summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po31
-rw-r--r--plugins/Adsense/AdsensePlugin.php2
-rw-r--r--plugins/Adsense/locale/Adsense.pot4
-rw-r--r--plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po103
-rw-r--r--plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po10
-rw-r--r--plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po10
-rw-r--r--plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po10
-rw-r--r--plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po10
-rw-r--r--plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po14
-rw-r--r--plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po10
-rw-r--r--plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po101
-rw-r--r--plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po12
-rw-r--r--plugins/AnonymousFave/locale/be-tarask/LC_MESSAGES/AnonymousFave.po104
-rw-r--r--plugins/AnonymousFave/locale/de/LC_MESSAGES/AnonymousFave.po14
-rw-r--r--plugins/AutoSandbox/locale/be-tarask/LC_MESSAGES/AutoSandbox.po46
-rw-r--r--plugins/Autocomplete/locale/be-tarask/LC_MESSAGES/Autocomplete.po33
-rw-r--r--plugins/BitlyUrl/locale/be-tarask/LC_MESSAGES/BitlyUrl.po90
-rw-r--r--plugins/BitlyUrl/locale/br/LC_MESSAGES/BitlyUrl.po78
-rw-r--r--plugins/BitlyUrl/locale/de/LC_MESSAGES/BitlyUrl.po84
-rw-r--r--plugins/BitlyUrl/locale/gl/LC_MESSAGES/BitlyUrl.po78
-rw-r--r--plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po10
-rw-r--r--plugins/Blacklist/locale/be-tarask/LC_MESSAGES/Blacklist.po131
-rw-r--r--plugins/Blacklist/locale/br/LC_MESSAGES/Blacklist.po16
-rw-r--r--plugins/Blacklist/locale/de/LC_MESSAGES/Blacklist.po26
-rw-r--r--plugins/Blacklist/locale/fr/LC_MESSAGES/Blacklist.po26
-rw-r--r--plugins/BlankAd/locale/be-tarask/LC_MESSAGES/BlankAd.po27
-rw-r--r--plugins/BlankAd/locale/de/LC_MESSAGES/BlankAd.po26
-rw-r--r--plugins/BlogspamNet/locale/be-tarask/LC_MESSAGES/BlogspamNet.po28
-rw-r--r--plugins/CacheLog/locale/br/LC_MESSAGES/CacheLog.po26
-rw-r--r--plugins/CasAuthentication/locale/de/LC_MESSAGES/CasAuthentication.po71
-rw-r--r--plugins/CasAuthentication/locale/gl/LC_MESSAGES/CasAuthentication.po73
-rw-r--r--plugins/CasAuthentication/locale/te/LC_MESSAGES/CasAuthentication.po71
-rw-r--r--plugins/ClientSideShorten/locale/br/LC_MESSAGES/ClientSideShorten.po32
-rw-r--r--plugins/ClientSideShorten/locale/de/LC_MESSAGES/ClientSideShorten.po10
-rw-r--r--plugins/Comet/locale/br/LC_MESSAGES/Comet.po28
-rw-r--r--plugins/Comet/locale/de/LC_MESSAGES/Comet.po26
-rw-r--r--plugins/DirectionDetector/locale/br/LC_MESSAGES/DirectionDetector.po28
-rw-r--r--plugins/DiskCache/locale/br/LC_MESSAGES/DiskCache.po27
-rw-r--r--plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po12
-rw-r--r--plugins/Disqus/locale/de/LC_MESSAGES/Disqus.po10
-rw-r--r--plugins/Disqus/locale/gl/LC_MESSAGES/Disqus.po43
-rw-r--r--plugins/Disqus/locale/te/LC_MESSAGES/Disqus.po43
-rw-r--r--plugins/EmailSummary/EmailSummaryPlugin.php202
-rw-r--r--plugins/EmailSummary/Email_summary_status.php167
-rw-r--r--plugins/EmailSummary/locale/EmailSummary.pot21
-rw-r--r--plugins/EmailSummary/locale/fr/LC_MESSAGES/EmailSummary.po28
-rw-r--r--plugins/EmailSummary/locale/mk/LC_MESSAGES/EmailSummary.po26
-rw-r--r--plugins/EmailSummary/locale/nl/LC_MESSAGES/EmailSummary.po26
-rw-r--r--plugins/EmailSummary/sendemailsummary.php47
-rw-r--r--plugins/EmailSummary/siteemailsummaryhandler.php96
-rw-r--r--plugins/EmailSummary/useremailsummaryhandler.php226
-rw-r--r--plugins/Facebook/FBConnectAuth.php15
-rw-r--r--plugins/Facebook/facebookaction.php2
-rw-r--r--plugins/Facebook/locale/Facebook.pot14
-rw-r--r--plugins/Facebook/locale/br/LC_MESSAGES/Facebook.po26
-rw-r--r--plugins/Facebook/locale/de/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/es/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/fr/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/gl/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/ia/LC_MESSAGES/Facebook.po24
-rw-r--r--plugins/Facebook/locale/mk/LC_MESSAGES/Facebook.po25
-rw-r--r--plugins/Facebook/locale/nb/LC_MESSAGES/Facebook.po23
-rw-r--r--plugins/Facebook/locale/nl/LC_MESSAGES/Facebook.po31
-rw-r--r--plugins/Facebook/locale/pt_BR/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/tl/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/uk/LC_MESSAGES/Facebook.po27
-rw-r--r--plugins/Facebook/locale/vi/LC_MESSAGES/Facebook.po540
-rw-r--r--plugins/Facebook/locale/zh_CN/LC_MESSAGES/Facebook.po23
-rw-r--r--plugins/FacebookBridge/FacebookBridgePlugin.php552
-rw-r--r--plugins/FacebookBridge/actions/facebookadminpanel.php212
-rw-r--r--plugins/FacebookBridge/actions/facebookdeauthorize.php144
-rw-r--r--plugins/FacebookBridge/actions/facebookfinishlogin.php677
-rw-r--r--plugins/FacebookBridge/actions/facebooklogin.php123
-rw-r--r--plugins/FacebookBridge/actions/facebooksettings.php266
-rw-r--r--plugins/FacebookBridge/classes/Notice_to_item.php190
-rw-r--r--plugins/FacebookBridge/extlib/facebook.php963
-rw-r--r--plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt121
-rw-r--r--plugins/FacebookBridge/images/login-button.pngbin0 -> 1661 bytes
-rw-r--r--plugins/FacebookBridge/lib/facebookclient.php1139
-rw-r--r--plugins/FacebookBridge/lib/facebookqueuehandler.php61
-rw-r--r--plugins/FacebookBridge/locale/FacebookBridge.pot294
-rw-r--r--plugins/FacebookBridge/locale/mk/LC_MESSAGES/FacebookBridge.po316
-rw-r--r--plugins/FacebookBridge/locale/nl/LC_MESSAGES/FacebookBridge.po324
-rw-r--r--plugins/FirePHP/locale/de/LC_MESSAGES/FirePHP.po27
-rw-r--r--plugins/FollowEveryone/locale/de/LC_MESSAGES/FollowEveryone.po28
-rw-r--r--plugins/FollowEveryone/locale/fr/LC_MESSAGES/FollowEveryone.po28
-rw-r--r--plugins/ForceGroup/locale/te/LC_MESSAGES/ForceGroup.po36
-rw-r--r--plugins/GoogleAnalytics/locale/de/LC_MESSAGES/GoogleAnalytics.po30
-rw-r--r--plugins/Gravatar/locale/de/LC_MESSAGES/Gravatar.po23
-rw-r--r--plugins/GroupFavorited/groupfavoritedaction.php7
-rw-r--r--plugins/GroupFavorited/locale/GroupFavorited.pot6
-rw-r--r--plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/gl/LC_MESSAGES/GroupFavorited.po53
-rw-r--r--plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/te/LC_MESSAGES/GroupFavorited.po53
-rw-r--r--plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po12
-rw-r--r--plugins/Imap/locale/br/LC_MESSAGES/Imap.po54
-rw-r--r--plugins/LilUrl/locale/de/LC_MESSAGES/LilUrl.po31
-rw-r--r--plugins/LinkPreview/LinkPreviewPlugin.php101
-rw-r--r--plugins/LinkPreview/linkpreview.js194
-rw-r--r--plugins/LinkPreview/locale/LinkPreview.pot21
-rw-r--r--plugins/LinkPreview/locale/fr/LC_MESSAGES/LinkPreview.po28
-rw-r--r--plugins/LinkPreview/locale/mk/LC_MESSAGES/LinkPreview.po27
-rw-r--r--plugins/LinkPreview/locale/nl/LC_MESSAGES/LinkPreview.po28
-rw-r--r--plugins/LinkPreview/oembedproxyaction.php84
-rw-r--r--plugins/LogFilter/LogFilterPlugin.php94
-rw-r--r--plugins/LogFilter/locale/LogFilter.pot21
-rw-r--r--plugins/LogFilter/locale/fr/LC_MESSAGES/LogFilter.po28
-rw-r--r--plugins/LogFilter/locale/mk/LC_MESSAGES/LogFilter.po28
-rw-r--r--plugins/LogFilter/locale/nl/LC_MESSAGES/LogFilter.po27
-rw-r--r--plugins/Mapstraction/MapstractionPlugin.php4
-rw-r--r--plugins/Mapstraction/allmap.php7
-rw-r--r--plugins/Mapstraction/locale/Mapstraction.pot14
-rw-r--r--plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/es/LC_MESSAGES/Mapstraction.po65
-rw-r--r--plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/te/LC_MESSAGES/Mapstraction.po64
-rw-r--r--plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po20
-rw-r--r--plugins/Mapstraction/map.php2
-rw-r--r--plugins/Mapstraction/usermap.php7
-rw-r--r--plugins/Memcache/locale/de/LC_MESSAGES/Memcache.po13
-rw-r--r--plugins/Memcached/locale/de/LC_MESSAGES/Memcached.po29
-rw-r--r--plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po29
-rw-r--r--plugins/Meteor/MeteorPlugin.php2
-rw-r--r--plugins/Meteor/locale/br/LC_MESSAGES/Meteor.po38
-rw-r--r--plugins/Meteor/locale/de/LC_MESSAGES/Meteor.po38
-rw-r--r--plugins/Meteor/meteorupdater.min.js1
-rw-r--r--plugins/MobileProfile/locale/es/LC_MESSAGES/MobileProfile.po78
-rw-r--r--plugins/MobileProfile/locale/ps/LC_MESSAGES/MobileProfile.po78
-rw-r--r--plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po78
-rw-r--r--plugins/ModHelper/locale/es/LC_MESSAGES/ModHelper.po29
-rw-r--r--plugins/ModPlus/locale/ModPlus.pot43
-rw-r--r--plugins/ModPlus/locale/fr/LC_MESSAGES/ModPlus.po54
-rw-r--r--plugins/ModPlus/locale/mk/LC_MESSAGES/ModPlus.po54
-rw-r--r--plugins/ModPlus/locale/nl/LC_MESSAGES/ModPlus.po54
-rw-r--r--plugins/NoticeTitle/NoticeTitlePlugin.php9
-rw-r--r--plugins/NoticeTitle/locale/ar/LC_MESSAGES/NoticeTitle.po34
-rw-r--r--plugins/NoticeTitle/locale/de/LC_MESSAGES/NoticeTitle.po32
-rw-r--r--plugins/NoticeTitle/locale/ne/LC_MESSAGES/NoticeTitle.po32
-rw-r--r--plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po33
-rw-r--r--plugins/OStatus/OStatusPlugin.php44
-rw-r--r--plugins/OStatus/actions/hostmeta.php48
-rw-r--r--plugins/OStatus/actions/userxrd.php65
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php25
-rw-r--r--plugins/OStatus/lib/xrd.php172
-rw-r--r--plugins/OStatus/lib/xrdaction.php127
-rw-r--r--plugins/OStatus/locale/OStatus.pot110
-rw-r--r--plugins/OStatus/locale/br/LC_MESSAGES/OStatus.po756
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po116
-rw-r--r--plugins/OStatus/locale/gl/LC_MESSAGES/OStatus.po756
-rw-r--r--plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po116
-rw-r--r--plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po116
-rw-r--r--plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po116
-rw-r--r--plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po116
-rw-r--r--plugins/OpenExternalLinkTarget/locale/es/LC_MESSAGES/OpenExternalLinkTarget.po14
-rw-r--r--plugins/OpenExternalLinkTarget/locale/ru/LC_MESSAGES/OpenExternalLinkTarget.po13
-rw-r--r--plugins/OpenID/OpenIDPlugin.php25
-rw-r--r--plugins/OpenID/finishopenidlogin.php32
-rw-r--r--plugins/OpenID/locale/OpenID.pot19
-rw-r--r--plugins/OpenID/locale/ar/LC_MESSAGES/OpenID.po589
-rw-r--r--plugins/OpenID/locale/br/LC_MESSAGES/OpenID.po582
-rw-r--r--plugins/OpenID/locale/ca/LC_MESSAGES/OpenID.po31
-rw-r--r--plugins/OpenID/locale/de/LC_MESSAGES/OpenID.po33
-rw-r--r--plugins/OpenID/locale/fr/LC_MESSAGES/OpenID.po32
-rw-r--r--plugins/OpenID/locale/gl/LC_MESSAGES/OpenID.po582
-rw-r--r--plugins/OpenID/locale/ia/LC_MESSAGES/OpenID.po29
-rw-r--r--plugins/OpenID/locale/mk/LC_MESSAGES/OpenID.po29
-rw-r--r--plugins/OpenID/locale/nb/LC_MESSAGES/OpenID.po580
-rw-r--r--plugins/OpenID/locale/nl/LC_MESSAGES/OpenID.po32
-rw-r--r--plugins/OpenID/locale/pt_BR/LC_MESSAGES/OpenID.po586
-rw-r--r--plugins/OpenID/locale/tl/LC_MESSAGES/OpenID.po32
-rw-r--r--plugins/OpenID/locale/tr/LC_MESSAGES/OpenID.po594
-rw-r--r--plugins/OpenID/locale/uk/LC_MESSAGES/OpenID.po32
-rw-r--r--plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po109
-rw-r--r--plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po109
-rw-r--r--plugins/PiwikAnalytics/locale/de/LC_MESSAGES/PiwikAnalytics.po30
-rw-r--r--plugins/PostDebug/locale/de/LC_MESSAGES/PostDebug.po26
-rw-r--r--plugins/PoweredByStatusNet/locale/es/LC_MESSAGES/PoweredByStatusNet.po38
-rw-r--r--plugins/PoweredByStatusNet/locale/pl/LC_MESSAGES/PoweredByStatusNet.po39
-rw-r--r--plugins/PoweredByStatusNet/locale/ru/LC_MESSAGES/PoweredByStatusNet.po39
-rw-r--r--plugins/PtitUrl/locale/de/LC_MESSAGES/PtitUrl.po27
-rw-r--r--plugins/RSSCloud/locale/nb/LC_MESSAGES/RSSCloud.po72
-rw-r--r--plugins/Realtime/README4
-rw-r--r--plugins/Realtime/RealtimePlugin.php29
-rw-r--r--plugins/Realtime/locale/Realtime.pot53
-rw-r--r--plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/fr/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/ia/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/mk/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/ne/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/nl/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po58
-rw-r--r--plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po59
-rw-r--r--plugins/Realtime/realtimeupdate.css2
-rw-r--r--plugins/Realtime/realtimeupdate.js329
-rw-r--r--plugins/Realtime/realtimeupdate.min.js1
-rw-r--r--plugins/Recaptcha/locale/ja/LC_MESSAGES/Recaptcha.po38
-rw-r--r--plugins/Recaptcha/locale/pl/LC_MESSAGES/Recaptcha.po37
-rw-r--r--plugins/RegisterThrottle/locale/de/LC_MESSAGES/RegisterThrottle.po10
-rw-r--r--plugins/RegisterThrottle/locale/ru/LC_MESSAGES/RegisterThrottle.po43
-rw-r--r--plugins/RequireValidatedEmail/locale/de/LC_MESSAGES/RequireValidatedEmail.po10
-rw-r--r--plugins/Sample/locale/br/LC_MESSAGES/Sample.po20
-rw-r--r--plugins/Sample/locale/gl/LC_MESSAGES/Sample.po69
-rw-r--r--plugins/Sample/locale/lb/LC_MESSAGES/Sample.po69
-rw-r--r--plugins/ShareNotice/locale/br/LC_MESSAGES/ShareNotice.po53
-rw-r--r--plugins/ShareNotice/locale/de/LC_MESSAGES/ShareNotice.po10
-rw-r--r--plugins/ShareNotice/locale/pl/LC_MESSAGES/ShareNotice.po54
-rw-r--r--plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po53
-rw-r--r--plugins/SimpleUrl/locale/de/LC_MESSAGES/SimpleUrl.po27
-rw-r--r--plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po11
-rw-r--r--plugins/SphinxSearch/locale/br/LC_MESSAGES/SphinxSearch.po37
-rw-r--r--plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po10
-rw-r--r--plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po32
-rw-r--r--plugins/TightUrl/locale/de/LC_MESSAGES/TightUrl.po27
-rw-r--r--plugins/TwitterBridge/TwitterBridgePlugin.php11
-rw-r--r--plugins/TwitterBridge/daemons/twitterdaemon.php314
-rwxr-xr-xplugins/TwitterBridge/daemons/twitterstatusfetcher.php596
-rw-r--r--plugins/TwitterBridge/jsonstreamreader.php265
-rw-r--r--plugins/TwitterBridge/locale/TwitterBridge.pot46
-rw-r--r--plugins/TwitterBridge/locale/br/LC_MESSAGES/TwitterBridge.po371
-rw-r--r--plugins/TwitterBridge/locale/fa/LC_MESSAGES/TwitterBridge.po375
-rw-r--r--plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po57
-rw-r--r--plugins/TwitterBridge/locale/gl/LC_MESSAGES/TwitterBridge.po371
-rw-r--r--plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po54
-rw-r--r--plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po55
-rw-r--r--plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po63
-rw-r--r--plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po57
-rw-r--r--plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po57
-rw-r--r--plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po53
-rw-r--r--plugins/TwitterBridge/scripts/fakestream.php147
-rw-r--r--plugins/TwitterBridge/scripts/streamtest.php244
-rw-r--r--plugins/TwitterBridge/tweetctlqueuehandler.php59
-rw-r--r--plugins/TwitterBridge/tweetinqueuehandler.php63
-rw-r--r--plugins/TwitterBridge/twitter.php32
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php14
-rw-r--r--plugins/TwitterBridge/twitterimport.php673
-rw-r--r--plugins/TwitterBridge/twittersettings.php14
-rw-r--r--plugins/TwitterBridge/twitterstreamreader.php285
-rw-r--r--plugins/UserFlag/UserFlagPlugin.php60
-rw-r--r--plugins/UserFlag/User_flag_profile.php23
-rw-r--r--plugins/UserFlag/flagprofile.php15
-rw-r--r--plugins/UserFlag/locale/UserFlag.pot16
-rw-r--r--plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po22
-rw-r--r--plugins/UserLimit/locale/fi/LC_MESSAGES/UserLimit.po26
-rw-r--r--plugins/UserLimit/locale/lv/LC_MESSAGES/UserLimit.po27
-rw-r--r--plugins/WikiHashtags/locale/de/LC_MESSAGES/WikiHashtags.po30
-rw-r--r--plugins/WikiHashtags/locale/mk/LC_MESSAGES/WikiHashtags.po10
-rw-r--r--plugins/XCache/locale/fi/LC_MESSAGES/XCache.po30
-rw-r--r--plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po268
282 files changed, 22186 insertions, 2569 deletions
diff --git a/plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po b/plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po
new file mode 100644
index 000000000..2013872f3
--- /dev/null
+++ b/plugins/APC/locale/be-tarask/LC_MESSAGES/APC.po
@@ -0,0 +1,31 @@
+# Translation of StatusNet - APC to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - APC\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:00+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-apc\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: APCPlugin.php:115
+msgid ""
+"Use the <a href=\"http://pecl.php.net/package/apc\">APC</a> variable cache "
+"to cache query results."
+msgstr ""
+"Выкарыстоўваць кэш зьменных <a href=\"http://pecl.php.net/package/apc\">APC</"
+"a> для захаваньня вынікаў запытаў."
diff --git a/plugins/Adsense/AdsensePlugin.php b/plugins/Adsense/AdsensePlugin.php
index 3d733e150..1965f95ea 100644
--- a/plugins/Adsense/AdsensePlugin.php
+++ b/plugins/Adsense/AdsensePlugin.php
@@ -206,7 +206,7 @@ class AdsensePlugin extends UAPPlugin
'author' => 'Evan Prodromou',
'homepage' => 'http://status.net/wiki/Plugin:Adsense',
'rawdescription' =>
- _m('Plugin to add Google Adsense to StatusNet sites.'));
+ _m('Plugin to add Google AdSense to StatusNet sites.'));
return true;
}
}
diff --git a/plugins/Adsense/locale/Adsense.pot b/plugins/Adsense/locale/Adsense.pot
index 2f5e4af2f..77db7e7d8 100644
--- a/plugins/Adsense/locale/Adsense.pot
+++ b/plugins/Adsense/locale/Adsense.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+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"
@@ -27,7 +27,7 @@ msgid "AdSense"
msgstr ""
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr ""
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po
new file mode 100644
index 000000000..ebd54ad15
--- /dev/null
+++ b/plugins/Adsense/locale/be-tarask/LC_MESSAGES/Adsense.po
@@ -0,0 +1,103 @@
+# Translation of StatusNet - Adsense to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# Author: Jim-by
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Adsense\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-adsense\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item title/tooltip
+#: AdsensePlugin.php:194
+msgid "AdSense configuration"
+msgstr "Устаноўкі AdSense"
+
+#. TRANS: Menu item for site administration
+#: AdsensePlugin.php:196
+msgid "AdSense"
+msgstr "AdSense"
+
+#: AdsensePlugin.php:209
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Дапаўненьне для даданьня Google AdSense на сайты StatusNet."
+
+#: adsenseadminpanel.php:52
+msgctxt "TITLE"
+msgid "AdSense"
+msgstr "AdSense"
+
+#: adsenseadminpanel.php:62
+msgid "AdSense settings for this StatusNet site"
+msgstr "Устаноўкі AdSense для гэтага сайта StatusNet"
+
+#: adsenseadminpanel.php:164
+msgid "Client ID"
+msgstr "Ідэнтыфікатар кліента"
+
+#: adsenseadminpanel.php:165
+msgid "Google client ID"
+msgstr "Ідэнтыфікатар кліента Google"
+
+#: adsenseadminpanel.php:170
+msgid "Ad script URL"
+msgstr "URL-адрас скрыпта рэклямы"
+
+#: adsenseadminpanel.php:171
+msgid "Script URL (advanced)"
+msgstr "URL-адрас скрыпта (палепшаная ўстаноўка)"
+
+#: adsenseadminpanel.php:176
+msgid "Medium rectangle"
+msgstr "Сярэдні прамавугольнік"
+
+#: adsenseadminpanel.php:177
+msgid "Medium rectangle slot code"
+msgstr "Слот-код сярэдняга прамавугольніка"
+
+#: adsenseadminpanel.php:182
+msgid "Rectangle"
+msgstr "Прамавугольнік"
+
+#: adsenseadminpanel.php:183
+msgid "Rectangle slot code"
+msgstr "Слот-код прамавугольніка"
+
+#: adsenseadminpanel.php:188
+msgid "Leaderboard"
+msgstr "Дошка гонару"
+
+#: adsenseadminpanel.php:189
+msgid "Leaderboard slot code"
+msgstr "Слот-код дошкі гонару"
+
+#: adsenseadminpanel.php:194
+msgid "Skyscraper"
+msgstr "Хмарачос"
+
+#: adsenseadminpanel.php:195
+msgid "Wide skyscraper slot code"
+msgstr "Слот-код хмарачосу"
+
+#: adsenseadminpanel.php:208
+msgid "Save"
+msgstr "Захаваць"
+
+#: adsenseadminpanel.php:208
+msgid "Save AdSense settings"
+msgstr "Захаваць устаноўкі AdSense"
diff --git a/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po
index c572f9b27..682d464fa 100644
--- a/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/br/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,8 +32,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Plugin evit ouzhpennañ Google Adsense da lec'hiennoù StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Plugin evit ouzhpennañ Google AdSense da lec'hiennoù StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po
index e7ddaa32e..4ba9ab2e1 100644
--- a/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/de/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,8 +32,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Plugin, das Google Adsense auf StatusNet-Websites hinzufügt."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Plugin, das Google AdSense auf StatusNet-Websites hinzufügt."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po
index 5a2fcfb25..68dc4e923 100644
--- a/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/es/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,8 +32,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Extensión para añadir Google Adsense a sitios StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Extensión para añadir Google AdSense a sitios StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po
index 17b56a00a..dee074fc1 100644
--- a/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/fr/LC_MESSAGES/Adsense.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -33,8 +33,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Greffon pour ajouter Google Adsense aux sites StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Greffon pour ajouter Google AdSense aux sites StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po
index e906670ea..2efd29f96 100644
--- a/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/gl/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:27:50+0000\n"
"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,7 +32,7 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr ""
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po
index 1f8a73ea2..22d450970 100644
--- a/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/ia/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,8 +32,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Plug-in pro adder Google Adsense a sitos StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Plug-in pro adder Google AdSense a sitos StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po
index e8addce83..455e6eb1c 100644
--- a/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/it/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Italian <http://translatewiki.net/wiki/Portal:it>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,8 +32,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Plugin per aggiungere Google Adsense ai siti StatusNet"
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Plugin per aggiungere Google AdSense ai siti StatusNet"
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po
index d3ccee66e..ee971e6d1 100644
--- a/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/ka/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:27:50+0000\n"
"Language-Team: Georgian <http://translatewiki.net/wiki/Portal:ka>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ka\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,7 +32,7 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr ""
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po
index 44fe432aa..17fa7cb86 100644
--- a/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/mk/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,7 +32,7 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr "Приклучок за додавање на Google AdSense во мреж. места со StatusNet."
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po
index c4854ad3f..0c4019ada 100644
--- a/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/nl/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:57+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,7 +32,7 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr "Plug-in om Google AdSense toe te voegen aan Statusnetsites."
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po
index cbe5e0554..7a26085bc 100644
--- a/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/pt_BR/LC_MESSAGES/Adsense.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:58+0000\n"
"Language-Team: Brazilian Portuguese <http://translatewiki.net/wiki/Portal:pt-"
"br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -34,8 +34,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Plugin para adicionar Google Adsense aos sites StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Plugin para adicionar Google AdSense aos sites StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
@@ -80,7 +80,7 @@ msgstr "Código colocado dentro de um retângulo."
#: adsenseadminpanel.php:188
msgid "Leaderboard"
-msgstr ""
+msgstr "Classificação"
#: adsenseadminpanel.php:189
msgid "Leaderboard slot code"
diff --git a/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po
index 85bb316a6..26a3638ec 100644
--- a/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/ru/LC_MESSAGES/Adsense.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:58+0000\n"
"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -34,8 +34,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Плагин для добавления Google Adsense на сайты StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Плагин для добавления Google AdSense на сайты StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po
index 031b79503..f8e3d83bc 100644
--- a/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/sv/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:27:50+0000\n"
"Language-Team: Swedish <http://translatewiki.net/wiki/Portal:sv>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-30 23:43:40+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,7 +32,7 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr ""
#: adsenseadminpanel.php:52
diff --git a/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po
index ad5ed1ad2..4e330473a 100644
--- a/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/tl/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:58+0000\n"
"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -32,9 +32,9 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
+msgid "Plugin to add Google AdSense to StatusNet sites."
msgstr ""
-"Pampasak upang maidagdag ang Adsense ng Google sa mga sityo ng StatusNet."
+"Pampasak upang maidagdag ang AdSense ng Google sa mga sityo ng StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po
new file mode 100644
index 000000000..23b2c1c8b
--- /dev/null
+++ b/plugins/Adsense/locale/tr/LC_MESSAGES/Adsense.po
@@ -0,0 +1,101 @@
+# Translation of StatusNet - Adsense to Turkish (Türkçe)
+# Expored from translatewiki.net
+#
+# Author: Maidis
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Adsense\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:28+0000\n"
+"Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:38:20+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: tr\n"
+"X-Message-Group: #out-statusnet-plugin-adsense\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. TRANS: Menu item title/tooltip
+#: AdsensePlugin.php:194
+msgid "AdSense configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: AdsensePlugin.php:196
+msgid "AdSense"
+msgstr "AdSense"
+
+#: AdsensePlugin.php:209
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr ""
+
+#: adsenseadminpanel.php:52
+msgctxt "TITLE"
+msgid "AdSense"
+msgstr "AdSense"
+
+#: adsenseadminpanel.php:62
+msgid "AdSense settings for this StatusNet site"
+msgstr ""
+
+#: adsenseadminpanel.php:164
+msgid "Client ID"
+msgstr ""
+
+#: adsenseadminpanel.php:165
+msgid "Google client ID"
+msgstr ""
+
+#: adsenseadminpanel.php:170
+msgid "Ad script URL"
+msgstr ""
+
+#: adsenseadminpanel.php:171
+msgid "Script URL (advanced)"
+msgstr ""
+
+#: adsenseadminpanel.php:176
+msgid "Medium rectangle"
+msgstr ""
+
+#: adsenseadminpanel.php:177
+msgid "Medium rectangle slot code"
+msgstr ""
+
+#: adsenseadminpanel.php:182
+msgid "Rectangle"
+msgstr ""
+
+#: adsenseadminpanel.php:183
+msgid "Rectangle slot code"
+msgstr ""
+
+#: adsenseadminpanel.php:188
+msgid "Leaderboard"
+msgstr ""
+
+#: adsenseadminpanel.php:189
+msgid "Leaderboard slot code"
+msgstr ""
+
+#: adsenseadminpanel.php:194
+msgid "Skyscraper"
+msgstr ""
+
+#: adsenseadminpanel.php:195
+msgid "Wide skyscraper slot code"
+msgstr ""
+
+#: adsenseadminpanel.php:208
+msgid "Save"
+msgstr "Kaydet"
+
+#: adsenseadminpanel.php:208
+msgid "Save AdSense settings"
+msgstr "AdSense ayarlarını kaydet"
diff --git a/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po
index f15de57c9..2436f6e05 100644
--- a/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/uk/LC_MESSAGES/Adsense.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:58+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -33,8 +33,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "Додаток для відображення Google Adsense на сторінці сайту StatusNet."
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "Додаток для відображення Google AdSense на сторінці сайту StatusNet."
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po b/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po
index 9bc76e416..d86e30a44 100644
--- a/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po
+++ b/plugins/Adsense/locale/zh_CN/LC_MESSAGES/Adsense.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Adsense\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:09+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:58+0000\n"
"Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
"hans>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:21:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: #out-statusnet-plugin-adsense\n"
@@ -34,8 +34,8 @@ msgid "AdSense"
msgstr "AdSense"
#: AdsensePlugin.php:209
-msgid "Plugin to add Google Adsense to StatusNet sites."
-msgstr "添加 Google Adsense 到 StatusNet 网站的插件。"
+msgid "Plugin to add Google AdSense to StatusNet sites."
+msgstr "添加 Google AdSense 到 StatusNet 网站的插件。"
#: adsenseadminpanel.php:52
msgctxt "TITLE"
diff --git a/plugins/AnonymousFave/locale/be-tarask/LC_MESSAGES/AnonymousFave.po b/plugins/AnonymousFave/locale/be-tarask/LC_MESSAGES/AnonymousFave.po
new file mode 100644
index 000000000..47b852add
--- /dev/null
+++ b/plugins/AnonymousFave/locale/be-tarask/LC_MESSAGES/AnonymousFave.po
@@ -0,0 +1,104 @@
+# Translation of StatusNet - AnonymousFave to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# Author: Jim-by
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - AnonymousFave\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:59+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-anonymousfave\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Label for tally for number of times a notice was favored.
+#: AnonymousFavePlugin.php:207
+msgid "Favored"
+msgstr "Улюблёнае"
+
+#. TRANS: Server exception.
+#: AnonymousFavePlugin.php:240 AnonymousFavePlugin.php:251
+msgid "Couldn't create anonymous user session."
+msgstr "Немагчыма стварыць сэсію ананімнага карыстальніка."
+
+#. TRANS: Plugin description.
+#: AnonymousFavePlugin.php:326
+msgid "Allow anonymous users to favorite notices."
+msgstr "Дазволіць ананімным карыстальнікам дадаваць паведамленьні ў улюблёныя."
+
+#. TRANS: Client error.
+#: anonfavor.php:60
+msgid ""
+"Could not favor notice! Please make sure your browser has cookies enabled."
+msgstr ""
+"Немагчыма пазначыць паведамленьне як улюблёнае. Калі ласка, упэўніцеся ў "
+"тым, што ў Вашым браўзэры ўключаныя закладкі (cookie)."
+
+#. TRANS: Client error.
+#: anonfavor.php:71 anondisfavor.php:72
+msgid "There was a problem with your session token. Try again, please."
+msgstr "Узьнікла праблема з ключом Вашай сэсіі. Калі ласка, паспрабуйце зноў."
+
+#. TRANS: Client error.
+#: anonfavor.php:78
+msgid "This notice is already a favorite!"
+msgstr "Гэтае паведамленьне ўжо знаходзіцца ў ліку ўлюблёных!"
+
+#. TRANS: Server error.
+#: anonfavor.php:85
+msgid "Could not create favorite."
+msgstr "Немагчыма стварыць як улюблёны."
+
+#. TRANS: Title.
+#: anonfavor.php:95
+msgid "Disfavor favorite"
+msgstr "Выдаліць з улюблёных"
+
+#. TRANS: Server exception.
+#. TRANS: %d is the notice ID (number).
+#: Fave_tally.php:155 Fave_tally.php:184
+#, php-format
+msgid "Couldn't update favorite tally for notice ID %d."
+msgstr "Немагчыма абнавіць лічыльнік пазнакаў улюблёных для запісу %d."
+
+#. TRANS: Server exception.
+#. TRANS: %d is the notice ID (number).
+#: Fave_tally.php:215
+#, php-format
+msgid "Couldn't create favorite tally for notice ID %d."
+msgstr "Немагчыма стварыць лічыльнік пазнакаў улюлёных для паведамленьня %d."
+
+#. TRANS: Client error.
+#: anondisfavor.php:61
+msgid ""
+"Could not disfavor notice! Please make sure your browser has cookies enabled."
+msgstr ""
+"Немагчыма выдаліць паведамленьне са сьпісу ўлюблёных! Калі ласка, "
+"упэўніцеся, што ў Вашым браўзэры дазволеныя закладкі (cookie)."
+
+#. TRANS: Client error.
+#: anondisfavor.php:82
+msgid "This notice is not a favorite!"
+msgstr "Гэтае паведамленьне ня зьяўляецца ўлюблёным!"
+
+#. TRANS: Server error.
+#: anondisfavor.php:91
+msgid "Could not delete favorite."
+msgstr "Немагчыма выдаліць са сьпісу ўлюблёных."
+
+#. TRANS: Title.
+#: anondisfavor.php:101
+msgid "Add to favorites"
+msgstr "Дадаць ва ўлюблёныя"
diff --git a/plugins/AnonymousFave/locale/de/LC_MESSAGES/AnonymousFave.po b/plugins/AnonymousFave/locale/de/LC_MESSAGES/AnonymousFave.po
index 48ba429f8..b18d6c412 100644
--- a/plugins/AnonymousFave/locale/de/LC_MESSAGES/AnonymousFave.po
+++ b/plugins/AnonymousFave/locale/de/LC_MESSAGES/AnonymousFave.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - AnonymousFave\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:10+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:39:59+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:56:48+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-anonymousfave\n"
@@ -24,7 +24,7 @@ msgstr ""
#. TRANS: Label for tally for number of times a notice was favored.
#: AnonymousFavePlugin.php:207
msgid "Favored"
-msgstr ""
+msgstr "Favorisiert"
#. TRANS: Server exception.
#: AnonymousFavePlugin.php:240 AnonymousFavePlugin.php:251
@@ -69,14 +69,14 @@ msgstr "Aus Favoriten entfernen"
#: Fave_tally.php:155 Fave_tally.php:184
#, php-format
msgid "Couldn't update favorite tally for notice ID %d."
-msgstr ""
+msgstr "Konnte Favoritenzähler der Nachrichten-ID %d nicht aktualisieren."
#. TRANS: Server exception.
#. TRANS: %d is the notice ID (number).
#: Fave_tally.php:215
#, php-format
msgid "Couldn't create favorite tally for notice ID %d."
-msgstr ""
+msgstr "Konnte keinen Favoritenzähler der Nachrichten-ID %d erstellen."
#. TRANS: Client error.
#: anondisfavor.php:61
diff --git a/plugins/AutoSandbox/locale/be-tarask/LC_MESSAGES/AutoSandbox.po b/plugins/AutoSandbox/locale/be-tarask/LC_MESSAGES/AutoSandbox.po
new file mode 100644
index 000000000..da4632190
--- /dev/null
+++ b/plugins/AutoSandbox/locale/be-tarask/LC_MESSAGES/AutoSandbox.po
@@ -0,0 +1,46 @@
+# Translation of StatusNet - AutoSandbox to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - AutoSandbox\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:20+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:52+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-autosandbox\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: AutoSandboxPlugin.php:66
+msgid "Automatically sandboxes newly registered members."
+msgstr "Аўтаматычна перасылае ў пясочніцу ўсіх новых карыстальнікаў."
+
+#: AutoSandboxPlugin.php:72
+msgid ""
+"Note you will initially be \"sandboxed\" so your posts will not appear in "
+"the public timeline."
+msgstr ""
+"Памятайце, што спачатку Вы будзеце знаходзіцца ў пясочніцы, таму Вашыя "
+"паведамленьні ня будуць паказвацца ў агульнай стужцы."
+
+#. TRANS: $contactlink is a clickable e-mailaddress.
+#: AutoSandboxPlugin.php:79
+msgid ""
+"Note you will initially be \"sandboxed\" so your posts will not appear in "
+"the public timeline. Send a message to $contactlink to speed up the "
+"unsandboxing process."
+msgstr ""
+"Памятайце, што спачатку Вы будзеце знаходзіцца ў пясочніцы, таму Вашыя "
+"паведамленьні ня будуць паказвацца ў агульнай стужцы. Дашліце паведамленьне "
+"ў $contactlink, каб паскорыць працэс пераводу з пясочніцы."
diff --git a/plugins/Autocomplete/locale/be-tarask/LC_MESSAGES/Autocomplete.po b/plugins/Autocomplete/locale/be-tarask/LC_MESSAGES/Autocomplete.po
new file mode 100644
index 000000000..966ef3f86
--- /dev/null
+++ b/plugins/Autocomplete/locale/be-tarask/LC_MESSAGES/Autocomplete.po
@@ -0,0 +1,33 @@
+# Translation of StatusNet - Autocomplete to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Autocomplete\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:01+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:52+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-autocomplete\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: AutocompletePlugin.php:80
+msgid ""
+"The autocomplete plugin allows users to autocomplete screen names in @ "
+"replies. When an \"@\" is typed into the notice text area, an autocomplete "
+"box is displayed populated with the user's friend' screen names."
+msgstr ""
+"Дапаўненьне аўтаматычнага запаўненьня дазваляе карыстальнікам аўтаматычна "
+"запаўняць імёны ў @-адказах. Калі «@» будзе ўведзенае ў тэкставую вобласьць "
+"паведамленьня, то зьявіцца блёк аўтаматычнага запаўненьня з імёнамі сяброў."
diff --git a/plugins/BitlyUrl/locale/be-tarask/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/be-tarask/LC_MESSAGES/BitlyUrl.po
new file mode 100644
index 000000000..d17a0d88b
--- /dev/null
+++ b/plugins/BitlyUrl/locale/be-tarask/LC_MESSAGES/BitlyUrl.po
@@ -0,0 +1,90 @@
+# Translation of StatusNet - BitlyUrl to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# Author: Jim-by
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BitlyUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:21+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:20:33+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-bitlyurl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BitlyUrlPlugin.php:48
+msgid "You must specify a serviceUrl for bit.ly shortening."
+msgstr "Вам неабходна пазначыць serviceUrl для сэрвісу скарачэньняў bit.ly."
+
+#: BitlyUrlPlugin.php:171
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr ""
+"Выкарыстаньне сэрвісу скарачэньня URL-адрасоў <a href=\"http://%1$s/\">%1$s</"
+"a>."
+
+#: BitlyUrlPlugin.php:212
+msgid "bit.ly"
+msgstr "bit.ly"
+
+#: BitlyUrlPlugin.php:213 bitlyadminpanelaction.php:54
+msgid "bit.ly URL shortening"
+msgstr "Скарачэньне URL-адрасоў bit.ly"
+
+#: bitlyadminpanelaction.php:65
+msgid ""
+"URL shortening with bit.ly requires [a bit.ly account and API key](http://"
+"bit.ly/a/your_api_key). This verifies that this is an authorized account, "
+"and allow you to use bit.ly's tracking features and custom domains."
+msgstr ""
+"Скарачэньне URL-адрасоў з дапамогай bit.ly патрабуе [рахунак bit.ly і ключ "
+"API](http://bit.ly/a/your_api_key). Гэта пацьвердзіць, што гэта аўтарызаваны "
+"рахунак і дазволіць Вам выкарыстоўваць магчымасьці сачэньня bit.ly і "
+"нестандартныя дамэны."
+
+#: bitlyadminpanelaction.php:132
+msgid "Invalid login. Max length is 255 characters."
+msgstr "Няслушнае імя карыстальніка. Максымальная даўжыня 255 сымбаляў."
+
+#: bitlyadminpanelaction.php:138
+msgid "Invalid API key. Max length is 255 characters."
+msgstr "Няслушны API-ключ. Максымальная даўжыня 255 сымбаляў."
+
+#: bitlyadminpanelaction.php:191
+msgid "Credentials"
+msgstr "Упаўнаважаньні"
+
+#: bitlyadminpanelaction.php:199
+msgid "Leave these empty to use global default credentials."
+msgstr ""
+"Пакіньце гэтае поле пустым, каб выкарыстоўваць глябальнымі ўпаўнаважаньнямі "
+"па змоўчваньні."
+
+#: bitlyadminpanelaction.php:202
+msgid "If you leave these empty, bit.ly will be unavailable to users."
+msgstr ""
+"Калі Вы пакінеце гэтае поле пустым, bit.ly будзе недаступны для "
+"карыстальнікаў."
+
+#: bitlyadminpanelaction.php:209
+msgid "Login name"
+msgstr "Імя карыстальніка"
+
+#: bitlyadminpanelaction.php:218
+msgid "API key"
+msgstr "API-ключ"
+
+#: bitlyadminpanelaction.php:236
+msgid "Save bit.ly settings"
+msgstr "Захаваць устаноўкі bit.ly"
diff --git a/plugins/BitlyUrl/locale/br/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/br/LC_MESSAGES/BitlyUrl.po
new file mode 100644
index 000000000..8e1c92f8c
--- /dev/null
+++ b/plugins/BitlyUrl/locale/br/LC_MESSAGES/BitlyUrl.po
@@ -0,0 +1,78 @@
+# Translation of StatusNet - BitlyUrl to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BitlyUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:33+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:49+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-bitlyurl\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: BitlyUrlPlugin.php:48
+msgid "You must specify a serviceUrl for bit.ly shortening."
+msgstr ""
+
+#: BitlyUrlPlugin.php:171
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr ""
+
+#: BitlyUrlPlugin.php:212
+msgid "bit.ly"
+msgstr "bit.ly"
+
+#: BitlyUrlPlugin.php:213 bitlyadminpanelaction.php:54
+msgid "bit.ly URL shortening"
+msgstr ""
+
+#: bitlyadminpanelaction.php:65
+msgid ""
+"URL shortening with bit.ly requires [a bit.ly account and API key](http://"
+"bit.ly/a/your_api_key). This verifies that this is an authorized account, "
+"and allow you to use bit.ly's tracking features and custom domains."
+msgstr ""
+
+#: bitlyadminpanelaction.php:132
+msgid "Invalid login. Max length is 255 characters."
+msgstr ""
+
+#: bitlyadminpanelaction.php:138
+msgid "Invalid API key. Max length is 255 characters."
+msgstr ""
+
+#: bitlyadminpanelaction.php:191
+msgid "Credentials"
+msgstr ""
+
+#: bitlyadminpanelaction.php:199
+msgid "Leave these empty to use global default credentials."
+msgstr ""
+
+#: bitlyadminpanelaction.php:202
+msgid "If you leave these empty, bit.ly will be unavailable to users."
+msgstr ""
+
+#: bitlyadminpanelaction.php:209
+msgid "Login name"
+msgstr "Anv implijer"
+
+#: bitlyadminpanelaction.php:218
+msgid "API key"
+msgstr ""
+
+#: bitlyadminpanelaction.php:236
+msgid "Save bit.ly settings"
+msgstr "Enrollañ arventennoù bit.ly"
diff --git a/plugins/BitlyUrl/locale/de/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/de/LC_MESSAGES/BitlyUrl.po
new file mode 100644
index 000000000..eeceec1f3
--- /dev/null
+++ b/plugins/BitlyUrl/locale/de/LC_MESSAGES/BitlyUrl.po
@@ -0,0 +1,84 @@
+# Translation of StatusNet - BitlyUrl to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: Michael
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BitlyUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:21+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:20:33+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-bitlyurl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BitlyUrlPlugin.php:48
+msgid "You must specify a serviceUrl for bit.ly shortening."
+msgstr "Du musst eine „serviceUrl“ zur bit.ly-URL-Kürzung angeben."
+
+#: BitlyUrlPlugin.php:171
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr "Benutzung des <a href=\"http://%1$s/\">%1$s</a>-URL-Kürzungsdienstes."
+
+#: BitlyUrlPlugin.php:212
+msgid "bit.ly"
+msgstr "bit.ly"
+
+#: BitlyUrlPlugin.php:213 bitlyadminpanelaction.php:54
+msgid "bit.ly URL shortening"
+msgstr "bit.ly-URL-Kürzung"
+
+#: bitlyadminpanelaction.php:65
+msgid ""
+"URL shortening with bit.ly requires [a bit.ly account and API key](http://"
+"bit.ly/a/your_api_key). This verifies that this is an authorized account, "
+"and allow you to use bit.ly's tracking features and custom domains."
+msgstr ""
+"URL-Kürzung mit bit.ly erfordert [ein bit.ly-Benutzerkonto und API-Schlüssel]"
+"(http://bit.ly/a/your_api_key). Das stellt sicher, dass es ein autorisiertes "
+"Benutzerkonto ist und ermöglicht bit.lys Tracking-Funktionen und "
+"benutzerdefinierte Domains."
+
+#: bitlyadminpanelaction.php:132
+msgid "Invalid login. Max length is 255 characters."
+msgstr "Ungültige Anmeldung. Maximale Länge sind 255 Zeichen."
+
+#: bitlyadminpanelaction.php:138
+msgid "Invalid API key. Max length is 255 characters."
+msgstr "Ungültiger API-Schlüssel. Maximale Länge sind 255 Zeichen."
+
+#: bitlyadminpanelaction.php:191
+msgid "Credentials"
+msgstr "Anmeldeinformationen"
+
+#: bitlyadminpanelaction.php:199
+msgid "Leave these empty to use global default credentials."
+msgstr "Lass dies leer, um globale Standard-Anmeldeinformationen zu benutzen."
+
+#: bitlyadminpanelaction.php:202
+msgid "If you leave these empty, bit.ly will be unavailable to users."
+msgstr ""
+"Wenn du dies leer lässt, wird bit.ly nicht für Benutzer verfügbar sein."
+
+#: bitlyadminpanelaction.php:209
+msgid "Login name"
+msgstr "Benutzername"
+
+#: bitlyadminpanelaction.php:218
+msgid "API key"
+msgstr "API-Schlüssel"
+
+#: bitlyadminpanelaction.php:236
+msgid "Save bit.ly settings"
+msgstr "bit.ly-Einstellungen speichern"
diff --git a/plugins/BitlyUrl/locale/gl/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/gl/LC_MESSAGES/BitlyUrl.po
new file mode 100644
index 000000000..2443894e3
--- /dev/null
+++ b/plugins/BitlyUrl/locale/gl/LC_MESSAGES/BitlyUrl.po
@@ -0,0 +1,78 @@
+# Translation of StatusNet - BitlyUrl to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BitlyUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:33+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:49+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-bitlyurl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BitlyUrlPlugin.php:48
+msgid "You must specify a serviceUrl for bit.ly shortening."
+msgstr ""
+
+#: BitlyUrlPlugin.php:171
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr ""
+
+#: BitlyUrlPlugin.php:212
+msgid "bit.ly"
+msgstr ""
+
+#: BitlyUrlPlugin.php:213 bitlyadminpanelaction.php:54
+msgid "bit.ly URL shortening"
+msgstr ""
+
+#: bitlyadminpanelaction.php:65
+msgid ""
+"URL shortening with bit.ly requires [a bit.ly account and API key](http://"
+"bit.ly/a/your_api_key). This verifies that this is an authorized account, "
+"and allow you to use bit.ly's tracking features and custom domains."
+msgstr ""
+
+#: bitlyadminpanelaction.php:132
+msgid "Invalid login. Max length is 255 characters."
+msgstr "Rexistro incorrecto. A extensión máxima é de 255 caracteres."
+
+#: bitlyadminpanelaction.php:138
+msgid "Invalid API key. Max length is 255 characters."
+msgstr "Clave API incorrecta. A extensión máxima é de 255 caracteres."
+
+#: bitlyadminpanelaction.php:191
+msgid "Credentials"
+msgstr ""
+
+#: bitlyadminpanelaction.php:199
+msgid "Leave these empty to use global default credentials."
+msgstr ""
+
+#: bitlyadminpanelaction.php:202
+msgid "If you leave these empty, bit.ly will be unavailable to users."
+msgstr ""
+
+#: bitlyadminpanelaction.php:209
+msgid "Login name"
+msgstr "Nome de usuario"
+
+#: bitlyadminpanelaction.php:218
+msgid "API key"
+msgstr ""
+
+#: bitlyadminpanelaction.php:236
+msgid "Save bit.ly settings"
+msgstr "Gardar a configuración bit.ly"
diff --git a/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po b/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po
index de00fc1ca..4298ae85e 100644
--- a/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po
+++ b/plugins/BitlyUrl/locale/nb/LC_MESSAGES/BitlyUrl.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - BitlyUrl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:16+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:27:56+0000\n"
"Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:21+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:53+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: #out-statusnet-plugin-bitlyurl\n"
@@ -23,7 +23,7 @@ msgstr ""
#: BitlyUrlPlugin.php:48
msgid "You must specify a serviceUrl for bit.ly shortening."
-msgstr ""
+msgstr "Du må angi en serviceUrl for bit.ly-forkortelse."
#: BitlyUrlPlugin.php:171
#, php-format
diff --git a/plugins/Blacklist/locale/be-tarask/LC_MESSAGES/Blacklist.po b/plugins/Blacklist/locale/be-tarask/LC_MESSAGES/Blacklist.po
new file mode 100644
index 000000000..b1f3635a5
--- /dev/null
+++ b/plugins/Blacklist/locale/be-tarask/LC_MESSAGES/Blacklist.po
@@ -0,0 +1,131 @@
+# Translation of StatusNet - Blacklist to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# Author: Jim-by
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Blacklist\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:56:57+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:38:25+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-blacklist\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Validation failure for URL. %s is the URL.
+#: BlacklistPlugin.php:149
+#, php-format
+msgid "You may not register with homepage \"%s\"."
+msgstr "Вы ня можаце зарэгістравацца, падаўшы «%s» як хатнюю старонку."
+
+#. TRANS: Validation failure for nickname. %s is the nickname.
+#: BlacklistPlugin.php:160
+#, php-format
+msgid "You may not register with nickname \"%s\"."
+msgstr "Вы ня можаце зарэгістравацца з мянушкай «%s»."
+
+#. TRANS: Validation failure for URL. %s is the URL.
+#: BlacklistPlugin.php:185
+#, php-format
+msgid "You may not use homepage \"%s\"."
+msgstr "Вы ня можаце выкарыстоўваць хатнюю старонку «%s»."
+
+#. TRANS: Validation failure for nickname. %s is the nickname.
+#: BlacklistPlugin.php:196
+#, php-format
+msgid "You may not use nickname \"%s\"."
+msgstr "Вы ня можаце выкарыстоўваць мянушку «%s»."
+
+#. TRANS: Validation failure for URL. %s is the URL.
+#: BlacklistPlugin.php:239
+#, php-format
+msgid "You may not use URL \"%s\" in notices."
+msgstr "Вы ня можаце выкарыстоўваць URL-адрас «%s» у заўвагах."
+
+#: BlacklistPlugin.php:343
+msgid "Keeps a blacklist of forbidden nickname and URL patterns."
+msgstr "Захоўвае чорны сьпіс забароненых мянушак і шаблёнаў URL-адрасоў."
+
+#. TRANS: Menu item in admin panel.
+#: BlacklistPlugin.php:381
+msgctxt "MENU"
+msgid "Blacklist"
+msgstr "Чорны сьпіс"
+
+#. TRANS: Tooltip for menu item in admin panel.
+#: BlacklistPlugin.php:383
+msgctxt "TOOLTIP"
+msgid "Blacklist configuration"
+msgstr "Устаноўкі чорнага сьпісу"
+
+#. TRANS: Checkbox with text label in the delete user form.
+#: BlacklistPlugin.php:410
+msgid "Add this nickname pattern to blacklist"
+msgstr "Дадаць гэты шаблён мянушкі да чорнага сьпісу"
+
+#. TRANS: Checkbox with text label in the delete user form.
+#: BlacklistPlugin.php:420
+msgid "Add this homepage pattern to blacklist"
+msgstr "Дадаць гэты шаблён хатняй старонкі да чорнага сьпісу"
+
+#. TRANS: Exception thrown trying to post a notice while having set a blocked homepage URL. %s is the blocked URL.
+#. TRANS: Client exception thrown trying to subscribe to a person with a blocked homepage or site URL. %s is the blocked URL.
+#: BlacklistPlugin.php:499 BlacklistPlugin.php:534
+#, php-format
+msgid "Users from \"%s\" blocked."
+msgstr "Карыстальнік з «%s» заблякаваны."
+
+#. TRANS: Exception thrown trying to post a notice while having a blocked nickname. %s is the blocked nickname.
+#: BlacklistPlugin.php:510
+#, php-format
+msgid "Posts from nickname \"%s\" disallowed."
+msgstr "Паведамленьні ад карыстальніка «%s» забароненыя."
+
+#. TRANS: Client exception thrown trying to subscribe to a person with a blocked nickname. %s is the blocked nickname.
+#: BlacklistPlugin.php:545
+#, php-format
+msgid "Can't subscribe to nickname \"%s\"."
+msgstr "Немагчыма падпісацца на карыстальніка «%s»."
+
+#: blacklistadminpanel.php:52
+msgid "Blacklist"
+msgstr "Чорны сьпіс"
+
+#: blacklistadminpanel.php:62
+msgid "Blacklisted URLs and nicknames"
+msgstr "Чорны сьпіс URL-адрасоў і мянушак"
+
+#: blacklistadminpanel.php:174
+msgid "Nicknames"
+msgstr "Мянушкі"
+
+#: blacklistadminpanel.php:176
+msgid "Patterns of nicknames to block, one per line"
+msgstr "Шаблёны мянушак для блякаваньня, па аднаму на радок"
+
+#: blacklistadminpanel.php:182
+msgid "URLs"
+msgstr "URL-адрасы"
+
+#: blacklistadminpanel.php:184
+msgid "Patterns of URLs to block, one per line"
+msgstr "Шаблёны URL-адрасоў для блякаваньня, па аднаму на радок"
+
+#: blacklistadminpanel.php:198
+msgid "Save"
+msgstr "Захаваць"
+
+#: blacklistadminpanel.php:201
+msgid "Save site settings"
+msgstr "Захаваць устаноўкі сайта"
diff --git a/plugins/Blacklist/locale/br/LC_MESSAGES/Blacklist.po b/plugins/Blacklist/locale/br/LC_MESSAGES/Blacklist.po
index 5e6bf3afa..ba29c2625 100644
--- a/plugins/Blacklist/locale/br/LC_MESSAGES/Blacklist.po
+++ b/plugins/Blacklist/locale/br/LC_MESSAGES/Blacklist.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blacklist\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:17+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:23+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:05+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-blacklist\n"
@@ -29,19 +29,19 @@ msgstr "Ne c'hellit ket en em enskrivañ gant ar bajenn degemer \"%s\"."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:160
-#, fuzzy, php-format
+#, php-format
msgid "You may not register with nickname \"%s\"."
msgstr "Ne c'hellit ket en em enskrivañ gant al lesanv \"%s\"."
#. TRANS: Validation failure for URL. %s is the URL.
#: BlacklistPlugin.php:185
-#, fuzzy, php-format
+#, php-format
msgid "You may not use homepage \"%s\"."
msgstr "Ne c'hellit ket implij ar bajenn degemer \"%s\"."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:196
-#, fuzzy, php-format
+#, php-format
msgid "You may not use nickname \"%s\"."
msgstr "Ne c'hellit ket implij al lesanv \"%s\"."
@@ -82,7 +82,7 @@ msgstr ""
#: BlacklistPlugin.php:499 BlacklistPlugin.php:534
#, php-format
msgid "Users from \"%s\" blocked."
-msgstr ""
+msgstr "Implijer \"%s\" stanket."
#. TRANS: Exception thrown trying to post a notice while having a blocked nickname. %s is the blocked nickname.
#: BlacklistPlugin.php:510
diff --git a/plugins/Blacklist/locale/de/LC_MESSAGES/Blacklist.po b/plugins/Blacklist/locale/de/LC_MESSAGES/Blacklist.po
index 35efa11df..f4bbeb7cc 100644
--- a/plugins/Blacklist/locale/de/LC_MESSAGES/Blacklist.po
+++ b/plugins/Blacklist/locale/de/LC_MESSAGES/Blacklist.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blacklist\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:17+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:23+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:05+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-blacklist\n"
@@ -23,25 +23,25 @@ msgstr ""
#. TRANS: Validation failure for URL. %s is the URL.
#: BlacklistPlugin.php:149
-#, fuzzy, php-format
+#, php-format
msgid "You may not register with homepage \"%s\"."
msgstr "Du darfst dich nicht mit der Homepage „%s“ anmelden."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:160
-#, fuzzy, php-format
+#, php-format
msgid "You may not register with nickname \"%s\"."
msgstr "Du darfst dich nicht mit den Benutzernamen „%s“ anmelden."
#. TRANS: Validation failure for URL. %s is the URL.
#: BlacklistPlugin.php:185
-#, fuzzy, php-format
+#, php-format
msgid "You may not use homepage \"%s\"."
msgstr "Du darfst nicht die Homepage „%s“ benutzen."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:196
-#, fuzzy, php-format
+#, php-format
msgid "You may not use nickname \"%s\"."
msgstr "Du darfst nicht den Benutzernamen „%s“ benutzen."
@@ -57,14 +57,12 @@ msgstr "Hält eine schwarze Liste der verbotenen Benutzernamen und URL-Muster."
#. TRANS: Menu item in admin panel.
#: BlacklistPlugin.php:381
-#, fuzzy
msgctxt "MENU"
msgid "Blacklist"
msgstr "Schwarze Liste"
#. TRANS: Tooltip for menu item in admin panel.
#: BlacklistPlugin.php:383
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Blacklist configuration"
msgstr "Konfiguration der schwarzen Liste"
@@ -84,19 +82,19 @@ msgstr "Dieses Homepage-Muster zur schwarzen Liste hinzufügen"
#: BlacklistPlugin.php:499 BlacklistPlugin.php:534
#, php-format
msgid "Users from \"%s\" blocked."
-msgstr ""
+msgstr "Benutzer von „%s“ blockiert."
#. TRANS: Exception thrown trying to post a notice while having a blocked nickname. %s is the blocked nickname.
#: BlacklistPlugin.php:510
#, php-format
msgid "Posts from nickname \"%s\" disallowed."
-msgstr ""
+msgstr "Beiträge vom Benutzernamen „%s“ nicht erlaubt."
#. TRANS: Client exception thrown trying to subscribe to a person with a blocked nickname. %s is the blocked nickname.
#: BlacklistPlugin.php:545
-#, fuzzy, php-format
+#, php-format
msgid "Can't subscribe to nickname \"%s\"."
-msgstr "Du darfst nicht den Benutzernamen „%s“ benutzen."
+msgstr "Kann Benutzernamen „%s“ nicht abonnieren."
#: blacklistadminpanel.php:52
msgid "Blacklist"
diff --git a/plugins/Blacklist/locale/fr/LC_MESSAGES/Blacklist.po b/plugins/Blacklist/locale/fr/LC_MESSAGES/Blacklist.po
index 23502a737..0736ba669 100644
--- a/plugins/Blacklist/locale/fr/LC_MESSAGES/Blacklist.po
+++ b/plugins/Blacklist/locale/fr/LC_MESSAGES/Blacklist.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Blacklist\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:17+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:23+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:05+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-blacklist\n"
@@ -24,25 +24,25 @@ msgstr ""
#. TRANS: Validation failure for URL. %s is the URL.
#: BlacklistPlugin.php:149
-#, fuzzy, php-format
+#, php-format
msgid "You may not register with homepage \"%s\"."
msgstr "Vous ne pouvez pas vous inscrire avec la page d’accueil « %s »."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:160
-#, fuzzy, php-format
+#, php-format
msgid "You may not register with nickname \"%s\"."
msgstr "Vous ne pouvez pas vous inscrire avec le pseudonyme « %s »."
#. TRANS: Validation failure for URL. %s is the URL.
#: BlacklistPlugin.php:185
-#, fuzzy, php-format
+#, php-format
msgid "You may not use homepage \"%s\"."
msgstr "Vous ne pouvez pas utiliser la page d’accueil « %s »."
#. TRANS: Validation failure for nickname. %s is the nickname.
#: BlacklistPlugin.php:196
-#, fuzzy, php-format
+#, php-format
msgid "You may not use nickname \"%s\"."
msgstr "Vous ne pouvez pas utiliser le pseudonyme « %s »."
@@ -58,14 +58,12 @@ msgstr "Maintient une liste noire des pseudonymes et motifs d’URL interdits."
#. TRANS: Menu item in admin panel.
#: BlacklistPlugin.php:381
-#, fuzzy
msgctxt "MENU"
msgid "Blacklist"
msgstr "Liste noire"
#. TRANS: Tooltip for menu item in admin panel.
#: BlacklistPlugin.php:383
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Blacklist configuration"
msgstr "Configuration de la liste noire"
@@ -85,19 +83,19 @@ msgstr "Ajouter ce motif de pages d’accueil à la liste noire"
#: BlacklistPlugin.php:499 BlacklistPlugin.php:534
#, php-format
msgid "Users from \"%s\" blocked."
-msgstr ""
+msgstr "Utilisateurs de « %s » bloqués."
#. TRANS: Exception thrown trying to post a notice while having a blocked nickname. %s is the blocked nickname.
#: BlacklistPlugin.php:510
#, php-format
msgid "Posts from nickname \"%s\" disallowed."
-msgstr ""
+msgstr "Messages de « %s » refusés."
#. TRANS: Client exception thrown trying to subscribe to a person with a blocked nickname. %s is the blocked nickname.
#: BlacklistPlugin.php:545
-#, fuzzy, php-format
+#, php-format
msgid "Can't subscribe to nickname \"%s\"."
-msgstr "Vous ne pouvez pas utiliser le pseudonyme « %s »."
+msgstr "Vous ne pouvez pas vous inscrire avec le pseudonyme « %s »."
#: blacklistadminpanel.php:52
msgid "Blacklist"
diff --git a/plugins/BlankAd/locale/be-tarask/LC_MESSAGES/BlankAd.po b/plugins/BlankAd/locale/be-tarask/LC_MESSAGES/BlankAd.po
new file mode 100644
index 000000000..6beb79755
--- /dev/null
+++ b/plugins/BlankAd/locale/be-tarask/LC_MESSAGES/BlankAd.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - BlankAd to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BlankAd\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:56:58+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:50+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-blankad\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BlankAdPlugin.php:127
+msgid "Plugin for testing ad layout."
+msgstr "Дапаўненьне для праверкі рэклямных модуляў."
diff --git a/plugins/BlankAd/locale/de/LC_MESSAGES/BlankAd.po b/plugins/BlankAd/locale/de/LC_MESSAGES/BlankAd.po
new file mode 100644
index 000000000..862f2336b
--- /dev/null
+++ b/plugins/BlankAd/locale/de/LC_MESSAGES/BlankAd.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - BlankAd to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BlankAd\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:24+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-blankad\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BlankAdPlugin.php:127
+msgid "Plugin for testing ad layout."
+msgstr "Plugin zum Testen von Werbungs-Layout."
diff --git a/plugins/BlogspamNet/locale/be-tarask/LC_MESSAGES/BlogspamNet.po b/plugins/BlogspamNet/locale/be-tarask/LC_MESSAGES/BlogspamNet.po
new file mode 100644
index 000000000..bad7b1de0
--- /dev/null
+++ b/plugins/BlogspamNet/locale/be-tarask/LC_MESSAGES/BlogspamNet.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - BlogspamNet to Belarusian (Taraškievica orthography) (Беларуская (тарашкевіца))
+# Expored from translatewiki.net
+#
+# Author: EugeneZelenko
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - BlogspamNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:56:59+0000\n"
+"Language-Team: Belarusian (Taraškievica orthography) <http://translatewiki."
+"net/wiki/Portal:be-tarask>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:55+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: be-tarask\n"
+"X-Message-Group: #out-statusnet-plugin-blogspamnet\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: BlogspamNetPlugin.php:152
+msgid "Plugin to check submitted notices with blogspam.net."
+msgstr ""
+"Дапаўненьне для праверкі дасланых абвяшчэньняў з дапамогай blogspam.net."
diff --git a/plugins/CacheLog/locale/br/LC_MESSAGES/CacheLog.po b/plugins/CacheLog/locale/br/LC_MESSAGES/CacheLog.po
new file mode 100644
index 000000000..e030ebd58
--- /dev/null
+++ b/plugins/CacheLog/locale/br/LC_MESSAGES/CacheLog.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - CacheLog to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Fulup
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - CacheLog\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:26+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:55+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-cachelog\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: CacheLogPlugin.php:106
+msgid "Log reads and writes to the cache."
+msgstr "Marilhañ a ra al lennadurioù hag ar skrivadurioù er grubuilh"
diff --git a/plugins/CasAuthentication/locale/de/LC_MESSAGES/CasAuthentication.po b/plugins/CasAuthentication/locale/de/LC_MESSAGES/CasAuthentication.po
new file mode 100644
index 000000000..e7aaddc33
--- /dev/null
+++ b/plugins/CasAuthentication/locale/de/LC_MESSAGES/CasAuthentication.po
@@ -0,0 +1,71 @@
+# Translation of StatusNet - CasAuthentication to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: Michael
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - CasAuthentication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:39+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-casauthentication\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:83
+msgid "CAS"
+msgstr "CAS"
+
+#. TRANS: Tooltip for menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:85
+msgid "Login or register with CAS."
+msgstr ""
+
+#. TRANS: Invitation to users with a CAS account to log in using the service.
+#. TRANS: "[CAS login]" is a link description. (%%action.caslogin%%) is the URL.
+#. TRANS: These two elements may not be separated.
+#: CasAuthenticationPlugin.php:101
+#, php-format
+msgid "(Have an account with CAS? Try our [CAS login](%%action.caslogin%%)!)"
+msgstr ""
+
+#: CasAuthenticationPlugin.php:128
+msgid "Specifying a server is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:131
+msgid "Specifying a port is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:134
+msgid "Specifying a path is required."
+msgstr ""
+
+#. TRANS: Plugin description. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:154
+msgid ""
+"The CAS Authentication plugin allows for StatusNet to handle authentication "
+"through CAS (Central Authentication Service)."
+msgstr ""
+
+#: caslogin.php:28
+msgid "Already logged in."
+msgstr "Bereits angemeldet."
+
+#: caslogin.php:39
+msgid "Incorrect username or password."
+msgstr ""
+
+#: caslogin.php:45
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
diff --git a/plugins/CasAuthentication/locale/gl/LC_MESSAGES/CasAuthentication.po b/plugins/CasAuthentication/locale/gl/LC_MESSAGES/CasAuthentication.po
new file mode 100644
index 000000000..180e2df94
--- /dev/null
+++ b/plugins/CasAuthentication/locale/gl/LC_MESSAGES/CasAuthentication.po
@@ -0,0 +1,73 @@
+# Translation of StatusNet - CasAuthentication to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - CasAuthentication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:39+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-casauthentication\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:83
+msgid "CAS"
+msgstr ""
+
+#. TRANS: Tooltip for menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:85
+msgid "Login or register with CAS."
+msgstr ""
+
+#. TRANS: Invitation to users with a CAS account to log in using the service.
+#. TRANS: "[CAS login]" is a link description. (%%action.caslogin%%) is the URL.
+#. TRANS: These two elements may not be separated.
+#: CasAuthenticationPlugin.php:101
+#, php-format
+msgid "(Have an account with CAS? Try our [CAS login](%%action.caslogin%%)!)"
+msgstr ""
+
+#: CasAuthenticationPlugin.php:128
+msgid "Specifying a server is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:131
+msgid "Specifying a port is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:134
+msgid "Specifying a path is required."
+msgstr ""
+
+#. TRANS: Plugin description. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:154
+msgid ""
+"The CAS Authentication plugin allows for StatusNet to handle authentication "
+"through CAS (Central Authentication Service)."
+msgstr ""
+
+#: caslogin.php:28
+msgid "Already logged in."
+msgstr "Xa se identificou."
+
+#: caslogin.php:39
+msgid "Incorrect username or password."
+msgstr "Nome de usuario ou contrasinal incorrectos."
+
+#: caslogin.php:45
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
+"Houbo un erro ao configurar o usuario. Probablemente non estea autorizado "
+"para facelo."
diff --git a/plugins/CasAuthentication/locale/te/LC_MESSAGES/CasAuthentication.po b/plugins/CasAuthentication/locale/te/LC_MESSAGES/CasAuthentication.po
new file mode 100644
index 000000000..0fc6f8ad1
--- /dev/null
+++ b/plugins/CasAuthentication/locale/te/LC_MESSAGES/CasAuthentication.po
@@ -0,0 +1,71 @@
+# Translation of StatusNet - CasAuthentication to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - CasAuthentication\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:40+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-casauthentication\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:83
+msgid "CAS"
+msgstr ""
+
+#. TRANS: Tooltip for menu item. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:85
+msgid "Login or register with CAS."
+msgstr ""
+
+#. TRANS: Invitation to users with a CAS account to log in using the service.
+#. TRANS: "[CAS login]" is a link description. (%%action.caslogin%%) is the URL.
+#. TRANS: These two elements may not be separated.
+#: CasAuthenticationPlugin.php:101
+#, php-format
+msgid "(Have an account with CAS? Try our [CAS login](%%action.caslogin%%)!)"
+msgstr ""
+
+#: CasAuthenticationPlugin.php:128
+msgid "Specifying a server is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:131
+msgid "Specifying a port is required."
+msgstr ""
+
+#: CasAuthenticationPlugin.php:134
+msgid "Specifying a path is required."
+msgstr ""
+
+#. TRANS: Plugin description. CAS is Central Authentication Service.
+#: CasAuthenticationPlugin.php:154
+msgid ""
+"The CAS Authentication plugin allows for StatusNet to handle authentication "
+"through CAS (Central Authentication Service)."
+msgstr ""
+
+#: caslogin.php:28
+msgid "Already logged in."
+msgstr "ఇప్పటికే లోనికి ప్రవేశించారు."
+
+#: caslogin.php:39
+msgid "Incorrect username or password."
+msgstr "వాడుకరిపేరు లేదా సంకేతపదం తప్పు."
+
+#: caslogin.php:45
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
diff --git a/plugins/ClientSideShorten/locale/br/LC_MESSAGES/ClientSideShorten.po b/plugins/ClientSideShorten/locale/br/LC_MESSAGES/ClientSideShorten.po
new file mode 100644
index 000000000..55497d39f
--- /dev/null
+++ b/plugins/ClientSideShorten/locale/br/LC_MESSAGES/ClientSideShorten.po
@@ -0,0 +1,32 @@
+# Translation of StatusNet - ClientSideShorten to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ClientSideShorten\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:28+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:11:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-clientsideshorten\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ClientSideShortenPlugin.php:74
+msgid ""
+"ClientSideShorten causes the web interface's notice form to automatically "
+"shorten URLs as they entered, and before the notice is submitted."
+msgstr ""
+
+#: shorten.php:55
+msgid "'text' argument must be specified."
+msgstr "Spisaet e rank bezañ an arguzenn \"testenn\"."
diff --git a/plugins/ClientSideShorten/locale/de/LC_MESSAGES/ClientSideShorten.po b/plugins/ClientSideShorten/locale/de/LC_MESSAGES/ClientSideShorten.po
index 2f74ca745..aecacac42 100644
--- a/plugins/ClientSideShorten/locale/de/LC_MESSAGES/ClientSideShorten.po
+++ b/plugins/ClientSideShorten/locale/de/LC_MESSAGES/ClientSideShorten.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - ClientSideShorten\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:23+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:28+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:51+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:11:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-clientsideshorten\n"
@@ -31,4 +31,4 @@ msgstr ""
#: shorten.php:55
msgid "'text' argument must be specified."
-msgstr ""
+msgstr "Das „text“-Argument muss angegeben werden."
diff --git a/plugins/Comet/locale/br/LC_MESSAGES/Comet.po b/plugins/Comet/locale/br/LC_MESSAGES/Comet.po
new file mode 100644
index 000000000..70093d613
--- /dev/null
+++ b/plugins/Comet/locale/br/LC_MESSAGES/Comet.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - Comet to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Comet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:04+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:39+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-comet\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: CometPlugin.php:114
+msgid "Plugin to do \"real time\" updates using Comet/Bayeux."
+msgstr ""
+"Un astenn evit ober hizivadennoù \"war ar prim\" en ur implijout Comet/"
+"Bayeux."
diff --git a/plugins/Comet/locale/de/LC_MESSAGES/Comet.po b/plugins/Comet/locale/de/LC_MESSAGES/Comet.po
new file mode 100644
index 000000000..9ddacb8e4
--- /dev/null
+++ b/plugins/Comet/locale/de/LC_MESSAGES/Comet.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - Comet to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Comet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:29+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:35:20+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-comet\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: CometPlugin.php:114
+msgid "Plugin to do \"real time\" updates using Comet/Bayeux."
+msgstr "Plugin für Echtzeit-Aktualisierungen mit Comet/Bayeux."
diff --git a/plugins/DirectionDetector/locale/br/LC_MESSAGES/DirectionDetector.po b/plugins/DirectionDetector/locale/br/LC_MESSAGES/DirectionDetector.po
new file mode 100644
index 000000000..1e0c134e1
--- /dev/null
+++ b/plugins/DirectionDetector/locale/br/LC_MESSAGES/DirectionDetector.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - DirectionDetector to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Fulup
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - DirectionDetector\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:30+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-directiondetector\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: DirectionDetectorPlugin.php:264
+msgid "Shows notices with right-to-left content in correct direction."
+msgstr ""
+"Diskwel a ra war an tu mat ar c'hemennoù enno testennoù skrivet a-zehou da "
+"gleiz."
diff --git a/plugins/DiskCache/locale/br/LC_MESSAGES/DiskCache.po b/plugins/DiskCache/locale/br/LC_MESSAGES/DiskCache.po
new file mode 100644
index 000000000..70cf26574
--- /dev/null
+++ b/plugins/DiskCache/locale/br/LC_MESSAGES/DiskCache.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - DiskCache to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Fulup
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - DiskCache\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:31+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:49+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-diskcache\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: DiskCachePlugin.php:175
+msgid "Plugin to implement cache interface with disk files."
+msgstr ""
+"Astenn evit emplementañ un etrefas krubuilh gant restroù eus ar bladenn"
diff --git a/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po b/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po
index caafa7ba8..d647fe3f6 100644
--- a/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po
+++ b/plugins/Disqus/locale/br/LC_MESSAGES/Disqus.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Disqus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:26+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:06+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:07+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:43+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-disqus\n"
@@ -27,10 +27,12 @@ msgid ""
"Please enable JavaScript to view the [comments powered by Disqus](http://"
"disqus.com/?ref_noscript=%s)."
msgstr ""
+"Mar plij gweredekait JavaScript evit gwelet an [evezhiadennoù enlusket gant "
+"Disqus] (http://disqus.com/?ref_noscript=%s)."
#: DisqusPlugin.php:149
msgid "Comments powered by "
-msgstr ""
+msgstr "Evezhiadennoù enlusket gant "
#: DisqusPlugin.php:201
msgid "Comments"
diff --git a/plugins/Disqus/locale/de/LC_MESSAGES/Disqus.po b/plugins/Disqus/locale/de/LC_MESSAGES/Disqus.po
index 12efd0c57..8c98e5918 100644
--- a/plugins/Disqus/locale/de/LC_MESSAGES/Disqus.po
+++ b/plugins/Disqus/locale/de/LC_MESSAGES/Disqus.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Disqus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:26+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:32+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:07+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-07 21:20:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-disqus\n"
@@ -28,6 +28,8 @@ msgid ""
"Please enable JavaScript to view the [comments powered by Disqus](http://"
"disqus.com/?ref_noscript=%s)."
msgstr ""
+"Bitte aktiviere JavaScript, um die [von Disqus bereitgestellten Kommentare]"
+"(http://disqus.com/?ref_noscript=%s) anzuzeigen."
#: DisqusPlugin.php:149
msgid "Comments powered by "
diff --git a/plugins/Disqus/locale/gl/LC_MESSAGES/Disqus.po b/plugins/Disqus/locale/gl/LC_MESSAGES/Disqus.po
new file mode 100644
index 000000000..9c61bad73
--- /dev/null
+++ b/plugins/Disqus/locale/gl/LC_MESSAGES/Disqus.po
@@ -0,0 +1,43 @@
+# Translation of StatusNet - Disqus to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Disqus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:42+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-disqus\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: DisqusPlugin.php:142
+#, php-format
+msgid ""
+"Please enable JavaScript to view the [comments powered by Disqus](http://"
+"disqus.com/?ref_noscript=%s)."
+msgstr ""
+
+#: DisqusPlugin.php:149
+msgid "Comments powered by "
+msgstr ""
+
+#: DisqusPlugin.php:201
+msgid "Comments"
+msgstr "Comentarios"
+
+#: DisqusPlugin.php:241
+msgid ""
+"Use <a href=\"http://disqus.com/\">Disqus</a> to add commenting to notice "
+"pages."
+msgstr ""
diff --git a/plugins/Disqus/locale/te/LC_MESSAGES/Disqus.po b/plugins/Disqus/locale/te/LC_MESSAGES/Disqus.po
new file mode 100644
index 000000000..ccd23e668
--- /dev/null
+++ b/plugins/Disqus/locale/te/LC_MESSAGES/Disqus.po
@@ -0,0 +1,43 @@
+# Translation of StatusNet - Disqus to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Disqus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:43+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-disqus\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: DisqusPlugin.php:142
+#, php-format
+msgid ""
+"Please enable JavaScript to view the [comments powered by Disqus](http://"
+"disqus.com/?ref_noscript=%s)."
+msgstr ""
+
+#: DisqusPlugin.php:149
+msgid "Comments powered by "
+msgstr ""
+
+#: DisqusPlugin.php:201
+msgid "Comments"
+msgstr "వ్యాఖ్యలు"
+
+#: DisqusPlugin.php:241
+msgid ""
+"Use <a href=\"http://disqus.com/\">Disqus</a> to add commenting to notice "
+"pages."
+msgstr ""
diff --git a/plugins/EmailSummary/EmailSummaryPlugin.php b/plugins/EmailSummary/EmailSummaryPlugin.php
new file mode 100644
index 000000000..58c40e43c
--- /dev/null
+++ b/plugins/EmailSummary/EmailSummaryPlugin.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Sends an email summary of the inbox to users in the network
+ *
+ * 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 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);
+}
+
+/**
+ * Plugin for sending email summaries to users
+ *
+ * @category Email
+ * @package StatusNet
+ * @author Brion Vibber <brionv@status.net>
+ * @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 EmailSummaryPlugin extends Plugin
+{
+ /**
+ * Database schema setup
+ *
+ * @return boolean hook value
+ */
+
+ function onCheckSchema()
+ {
+ $schema = Schema::get();
+
+ // For storing user-submitted flags on profiles
+
+ $schema->ensureTable('email_summary_status',
+ array(new ColumnDef('user_id', 'integer', null,
+ false, 'PRI'),
+ new ColumnDef('send_summary', 'tinyint', null,
+ false, null, 1),
+ new ColumnDef('last_summary_id', 'integer', null,
+ true),
+ new ColumnDef('created', 'datetime', null,
+ false),
+ new ColumnDef('modified', 'datetime', null,
+ false),
+ )
+ );
+ 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 'SiteEmailSummaryHandler':
+ case 'UserEmailSummaryHandler':
+ include_once $dir . '/'.strtolower($cls).'.php';
+ return false;
+ case 'Email_summary_status':
+ include_once $dir . '/'.$cls.'.php';
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /**
+ * Version info for this plugin
+ *
+ * @param array &$versions array of version data
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ *
+ */
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'EmailSummary',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Evan Prodromou',
+ 'homepage' => 'http://status.net/wiki/Plugin:EmailSummary',
+ 'rawdescription' =>
+ _m('Send an email summary of the inbox to users.'));
+ return true;
+ }
+
+ /**
+ * Register our queue handlers
+ *
+ * @param QueueManager $qm Current queue manager
+ *
+ * @return boolean hook value
+ */
+
+ function onEndInitializeQueueManager($qm)
+ {
+ $qm->connect('sitesum', 'SiteEmailSummaryHandler');
+ $qm->connect('usersum', 'UserEmailSummaryHandler');
+ return true;
+ }
+
+ /**
+ * Add a checkbox to turn off email summaries
+ *
+ * @param Action $action Action being executed (emailsettings)
+ *
+ * @return boolean hook value
+ */
+
+ function onEndEmailFormData($action)
+ {
+ $user = common_current_user();
+
+ $action->elementStart('li');
+ $action->checkbox('emailsummary',
+ // TRANS: Checkbox label in e-mail preferences form.
+ _('Send me a periodic summary of updates from my network.'),
+ Email_summary_status::getSendSummary($user->id));
+ $action->elementEnd('li');
+ return true;
+ }
+
+ /**
+ * Add a checkbox to turn off email summaries
+ *
+ * @param Action $action Action being executed (emailsettings)
+ *
+ * @return boolean hook value
+ */
+
+ function onEndEmailSaveForm($action)
+ {
+ $sendSummary = $action->boolean('emailsummary');
+
+ $user = common_current_user();
+
+ if (!empty($user)) {
+
+ $ess = Email_summary_status::staticGet('user_id', $user->id);
+
+ if (empty($ess)) {
+
+ $ess = new Email_summary_status();
+
+ $ess->user_id = $user->id;
+ $ess->send_summary = $sendSummary;
+ $ess->created = common_sql_now();
+ $ess->modified = common_sql_now();
+
+ $ess->insert();
+
+ } else {
+
+ $orig = clone($ess);
+
+ $ess->send_summary = $sendSummary;
+ $ess->modified = common_sql_now();
+
+ $ess->update($orig);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/plugins/EmailSummary/Email_summary_status.php b/plugins/EmailSummary/Email_summary_status.php
new file mode 100644
index 000000000..5b5b231e3
--- /dev/null
+++ b/plugins/EmailSummary/Email_summary_status.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * Data class for email summary status
+ *
+ * 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 email summaries
+ *
+ * Email summary information for users
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * @see DB_DataObject
+ */
+
+class Email_summary_status extends Memcached_DataObject
+{
+ public $__table = 'email_summary_status'; // table name
+ public $user_id; // int(4) primary_key not_null
+ public $send_summary; // tinyint not_null
+ public $last_summary_id; // int(4) null
+ public $created; // datetime not_null
+ public $modified; // datetime not_null
+
+ /**
+ * 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 Email_summary_status object found, or null for no hits
+ *
+ */
+ function staticGet($k, $v=null)
+ {
+ return Memcached_DataObject::staticGet('email_summary_status', $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('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'send_summary' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL,
+ 'last_summary_id' => DB_DATAOBJECT_INT,
+ 'created' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL,
+ 'modified' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL);
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * @return array list of key field names
+ */
+
+ 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. This key information is used to store and clear
+ * cached data, so be sure to list any key that will be used for static
+ * lookups.
+ *
+ * @return array associative array of key definitions, field name to type:
+ * 'K' for primary key: for compound keys, add an entry for each component;
+ * 'U' for unique keys: compound keys are not well supported here.
+ */
+ function keyTypes()
+ {
+ return array('user_id' => 'K');
+ }
+
+ /**
+ * Magic formula for non-autoincrementing integer primary keys
+ *
+ * @return array magic three-false array that stops auto-incrementing.
+ */
+
+ function sequenceKey()
+ {
+ return array(false, false, false);
+ }
+
+ /**
+ * Helper function
+ *
+ * @param integer $user_id ID of the user to get a count for
+ *
+ * @return int flag for whether to send this user a summary email
+ */
+
+ static function getSendSummary($user_id)
+ {
+ $ess = Email_summary_status::staticGet('user_id', $user_id);
+
+ if (!empty($ess)) {
+ return $ess->send_summary;
+ } else {
+ return 1;
+ }
+ }
+
+ /**
+ * Get email summary status for a user
+ *
+ * @param integer $user_id ID of the user to get a count for
+ *
+ * @return Email_summary_status instance for this user, with count already incremented.
+ */
+
+ static function getLastSummaryID($user_id)
+ {
+ $ess = Email_summary_status::staticGet('user_id', $user_id);
+
+ if (!empty($ess)) {
+ return $ess->last_summary_id;
+ } else {
+ return null;
+ }
+ }
+}
diff --git a/plugins/EmailSummary/locale/EmailSummary.pot b/plugins/EmailSummary/locale/EmailSummary.pot
new file mode 100644
index 000000000..ccd7f2af6
--- /dev/null
+++ b/plugins/EmailSummary/locale/EmailSummary.pot
@@ -0,0 +1,21 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: EmailSummaryPlugin.php:120
+msgid "Send an email summary of the inbox to users."
+msgstr ""
diff --git a/plugins/EmailSummary/locale/fr/LC_MESSAGES/EmailSummary.po b/plugins/EmailSummary/locale/fr/LC_MESSAGES/EmailSummary.po
new file mode 100644
index 000000000..c40a24259
--- /dev/null
+++ b/plugins/EmailSummary/locale/fr/LC_MESSAGES/EmailSummary.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - EmailSummary to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - EmailSummary\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:08+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:01+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-emailsummary\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: EmailSummaryPlugin.php:120
+msgid "Send an email summary of the inbox to users."
+msgstr ""
+"Envoyer un résumé de la boîte de réception par courrier électronique aux "
+"utilisateurs."
diff --git a/plugins/EmailSummary/locale/mk/LC_MESSAGES/EmailSummary.po b/plugins/EmailSummary/locale/mk/LC_MESSAGES/EmailSummary.po
new file mode 100644
index 000000000..d13f7666b
--- /dev/null
+++ b/plugins/EmailSummary/locale/mk/LC_MESSAGES/EmailSummary.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - EmailSummary to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - EmailSummary\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:08+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:01+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-emailsummary\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#: EmailSummaryPlugin.php:120
+msgid "Send an email summary of the inbox to users."
+msgstr "Испрати им на корисниците краток преглед на примената пошта."
diff --git a/plugins/EmailSummary/locale/nl/LC_MESSAGES/EmailSummary.po b/plugins/EmailSummary/locale/nl/LC_MESSAGES/EmailSummary.po
new file mode 100644
index 000000000..838d071d0
--- /dev/null
+++ b/plugins/EmailSummary/locale/nl/LC_MESSAGES/EmailSummary.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - EmailSummary to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - EmailSummary\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:08+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:01+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-emailsummary\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: EmailSummaryPlugin.php:120
+msgid "Send an email summary of the inbox to users."
+msgstr "E-mailsamenvatting verzenden naar het Postvak IN van gebruikers."
diff --git a/plugins/EmailSummary/sendemailsummary.php b/plugins/EmailSummary/sendemailsummary.php
new file mode 100644
index 000000000..37bfdcfbd
--- /dev/null
+++ b/plugins/EmailSummary/sendemailsummary.php
@@ -0,0 +1,47 @@
+#!/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__) . '/../..'));
+
+$shortoptions = 'i:n:a';
+$longoptions = array('id=', 'nickname=', 'all');
+
+$helptext = <<<END_OF_SENDEMAILSUMMARY_HELP
+sendemailsummary.php [options]
+Send an email summary of the inbox to users
+
+ -i --id ID of user to send summary to
+ -n --nickname nickname of the user to send summary to
+ -a --all send summary to all users
+
+END_OF_SENDEMAILSUMMARY_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$qm = QueueManager::get();
+
+// enqueue summary for user or all users
+
+try {
+ $user = getUser();
+ $qm->enqueue($user->id, 'usersum');
+} catch (NoUserArgumentException $nuae) {
+ $qm->enqueue(null, 'sitesum');
+}
diff --git a/plugins/EmailSummary/siteemailsummaryhandler.php b/plugins/EmailSummary/siteemailsummaryhandler.php
new file mode 100644
index 000000000..595c3267a
--- /dev/null
+++ b/plugins/EmailSummary/siteemailsummaryhandler.php
@@ -0,0 +1,96 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ *
+ * Handler for queue items of type 'sitesum', sends email summaries
+ * to all users on the site.
+ *
+ * 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 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);
+}
+
+/**
+ *
+ * Handler for queue items of type 'sitesum', sends email summaries
+ * to all users on the site.
+ *
+ * @category Email
+ * @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 SiteEmailSummaryHandler extends QueueHandler
+{
+
+ /**
+ * 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 'sitesum';
+ }
+
+ /**
+ * Handle the site
+ *
+ * @param mixed $object
+ * @return boolean true on success, false on failure
+ */
+
+ function handle($object)
+ {
+ $qm = QueueManager::get();
+
+ try {
+ // Enqueue a summary for all users
+
+ $user = new User();
+ $user->find();
+
+ while ($user->fetch()) {
+ try {
+ $qm->enqueue($user->id, 'usersum');
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, $e->getMessage());
+ continue;
+ }
+ }
+ } catch (Exception $e) {
+ common_log(LOG_WARNING, $e->getMessage());
+ }
+
+ return true;
+ }
+}
+
diff --git a/plugins/EmailSummary/useremailsummaryhandler.php b/plugins/EmailSummary/useremailsummaryhandler.php
new file mode 100644
index 000000000..b1ebd0c42
--- /dev/null
+++ b/plugins/EmailSummary/useremailsummaryhandler.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ *
+ * Handler for queue items of type 'usersum', sends an email summaries
+ * to a particular user.
+ *
+ * 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 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);
+}
+
+/**
+ * Handler for queue items of type 'usersum', sends an email summaries
+ * to a particular user.
+ *
+ * @category Email
+ * @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 UserEmailSummaryHandler extends QueueHandler
+{
+ // Maximum number of notices to include by default. This is probably too much.
+
+ const MAX_NOTICES = 200;
+
+ /**
+ * 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 'sitesum';
+ }
+
+ /**
+ * Send a summary email to the user
+ *
+ * @param mixed $object
+ * @return boolean true on success, false on failure
+ */
+
+ function handle($user_id)
+ {
+ // Skip if they've asked not to get summaries
+
+ $ess = Email_summary_status::staticGet('user_id', $user_id);
+
+ if (!empty($ess) && !$ess->send_summary) {
+ common_log(LOG_INFO, sprintf('Not sending email summary for user %s by request.', $user_id));
+ return true;
+ }
+
+ $since_id = null;
+
+ if (!empty($ess)) {
+ $since_id = $ess->last_summary_id;
+ }
+
+ $user = User::staticGet('id', $user_id);
+
+ if (empty($user)) {
+ common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no such user.', $user_id));
+ return true;
+ }
+
+ if (empty($user->email)) {
+ common_log(LOG_INFO, sprintf('Not sending email summary for user %s; no email address.', $user_id));
+ return true;
+ }
+
+ $profile = $user->getProfile();
+
+ if (empty($profile)) {
+ common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no profile.', $user_id));
+ return true;
+ }
+
+ $notice = $user->ownFriendsTimeline(0, self::MAX_NOTICES, $since_id);
+
+ if (empty($notice) || $notice->N == 0) {
+ common_log(LOG_WARNING, sprintf('Not sending email summary for user %s; no notices.', $user_id));
+ return true;
+ }
+
+ // XXX: This is risky fingerpoken in der objektvars, but I didn't feel like
+ // figuring out a better way. -ESP
+
+ $new_top = null;
+
+ if ($notice instanceof ArrayWrapper) {
+ $new_top = $notice->_items[0]->id;
+ }
+
+ $out = new XMLStringer();
+
+ $out->raw(sprintf(_('<p>Recent updates from %1s for %2s:</p>'),
+ common_config('site', 'name'),
+ $profile->getBestName()));
+
+
+ $out->elementStart('table', array('width' => '541px', 'style' => 'border: none'));
+
+ while ($notice->fetch()) {
+
+ $profile = Profile::staticGet('id', $notice->profile_id);
+
+ if (empty($profile)) {
+ continue;
+ }
+
+ $avatar = $profile->getAvatar(AVATAR_STREAM_SIZE);
+
+ $out->elementStart('tr');
+ $out->elementStart('td', array('width' => AVATAR_STREAM_SIZE,
+ 'height' => AVATAR_STREAM_SIZE,
+ 'align' => 'left',
+ 'valign' => 'top'));
+ $out->element('img', array('src' => ($avatar) ?
+ $avatar->displayUrl() :
+ Avatar::defaultImage($avatar_size),
+ 'class' => 'avatar photo',
+ 'width' => AVATAR_STREAM_SIZE,
+ 'height' => AVATAR_STREAM_SIZE,
+ 'alt' => $profile->getBestName()));
+ $out->elementEnd('td');
+ $out->elementStart('td', array('align' => 'left',
+ 'valign' => 'top'));
+ $out->element('a', array('href' => $profile->profileurl),
+ $profile->nickname);
+ $out->text(' ');
+ $out->raw($notice->rendered);
+ $out->element('br'); // yeah, you know it. I just wrote a <br> in the middle of my table layout.
+ $noticeurl = $notice->bestUrl();
+ // above should always return an URL
+ assert(!empty($noticeurl));
+ $out->elementStart('a', array('rel' => 'bookmark',
+ 'class' => 'timestamp',
+ 'href' => $noticeurl));
+ $dt = common_date_iso8601($notice->created);
+ $out->element('abbr', array('class' => 'published',
+ 'title' => $dt),
+ common_date_string($notice->created));
+ $out->elementEnd('a');
+ if ($notice->hasConversation()) {
+ $conv = Conversation::staticGet('id', $notice->conversation);
+ $convurl = $conv->uri;
+ if (!empty($convurl)) {
+ $out->text(' ');
+ $out->element('a',
+ array('href' => $convurl.'#notice-'.$notice->id,
+ 'class' => 'response'),
+ _('in context'));
+ }
+ }
+ $out->elementEnd('td');
+ $out->elementEnd('tr');
+ }
+
+ $out->elementEnd('table');
+
+ $out->raw(sprintf(_('<p><a href="%1s">change your email settings for %2s</a></p>'),
+ common_local_url('emailsettings'),
+ common_config('site', 'name')));
+
+ $body = $out->getString();
+
+ // FIXME: do something for people who don't like HTML email
+
+ mail_to_user($user, _('Updates from your network'), $body,
+ array('Content-Type' => 'text/html; charset=UTF-8'));
+
+ if (empty($ess)) {
+
+ $ess = new Email_summary_status();
+
+ $ess->user_id = $user_id;
+ $ess->created = common_sql_now();
+ $ess->last_summary_id = $new_top;
+ $ess->modified = common_sql_now();
+
+ $ess->insert();
+
+ } else {
+
+ $orig = clone($ess);
+
+ $ess->last_summary_id = $new_top;
+ $ess->modified = common_sql_now();
+
+ $ess->update($orig);
+ }
+
+ return true;
+ }
+}
diff --git a/plugins/Facebook/FBConnectAuth.php b/plugins/Facebook/FBConnectAuth.php
index d6d378626..84d51578f 100644
--- a/plugins/Facebook/FBConnectAuth.php
+++ b/plugins/Facebook/FBConnectAuth.php
@@ -257,13 +257,10 @@ class FBConnectauthAction extends Action
}
}
- $nickname = $this->trimmed('newname');
-
- if (!Validate::string($nickname, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
- $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
- return;
+ try {
+ $nickname = Nickname::normalize($this->trimmed('newname'));
+ } catch (NicknameException $e) {
+ $this->showForm($e->getMessage());
}
if (!User::allowed_nickname($nickname)) {
@@ -447,9 +444,7 @@ class FBConnectauthAction extends Action
function isNewNickname($str)
{
- if (!Validate::string($str, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
+ if (!Nickname::isValid($str)) {
return false;
}
if (!User::allowed_nickname($str)) {
diff --git a/plugins/Facebook/facebookaction.php b/plugins/Facebook/facebookaction.php
index 4c15fc039..e4edcea0d 100644
--- a/plugins/Facebook/facebookaction.php
+++ b/plugins/Facebook/facebookaction.php
@@ -370,7 +370,7 @@ class FacebookAction extends Action
$this->showPage(_m('No notice content!'));
return;
} else {
- $content_shortened = common_shorten_links($content);
+ $content_shortened = $user->shortenLinks($content);
if (Notice::contentTooLong($content_shortened)) {
// @todo FIXME: i18n: Needs plural.
diff --git a/plugins/Facebook/locale/Facebook.pot b/plugins/Facebook/locale/Facebook.pot
index b93939299..6c4466621 100644
--- a/plugins/Facebook/locale/Facebook.pot
+++ b/plugins/Facebook/locale/Facebook.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+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"
@@ -138,23 +138,19 @@ msgstr ""
msgid "Not a valid invitation code."
msgstr ""
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr ""
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr ""
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr ""
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr ""
diff --git a/plugins/Facebook/locale/br/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/br/LC_MESSAGES/Facebook.po
index cb73ace8e..453445d85 100644
--- a/plugins/Facebook/locale/br/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/br/LC_MESSAGES/Facebook.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:52+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -147,23 +147,19 @@ msgstr "N'eo ket aotreet krouiñ kontoù."
msgid "Not a valid invitation code."
msgstr "N'eo ket reizh ar c'hod pedadenn."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Lesanv nann-aotreet."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Implijet eo dija al lesanv-se. Klaskit unan all."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr ""
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Anv implijer pe ger-tremen direizh."
@@ -452,7 +448,7 @@ msgstr "Enrollañ"
#: facebookadminpanel.php:210
msgid "Save Facebook settings"
-msgstr ""
+msgstr "Enrollañ arventennoù Facebook"
#. TRANS: Instructions.
#: FBConnectSettings.php:66
@@ -465,12 +461,12 @@ msgstr ""
#: FBConnectSettings.php:98
msgid "Connected Facebook user"
-msgstr ""
+msgstr "Implijer Facebook kevreet"
#. TRANS: Legend.
#: FBConnectSettings.php:118
msgid "Disconnect my account from Facebook"
-msgstr ""
+msgstr "Digevreañ ma c'hont deus Facebook"
#. TRANS: Followed by a link containing text "set a password".
#: FBConnectSettings.php:125
diff --git a/plugins/Facebook/locale/de/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/de/LC_MESSAGES/Facebook.po
index 6293a7af8..d9cec5fdc 100644
--- a/plugins/Facebook/locale/de/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/de/LC_MESSAGES/Facebook.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:52+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -167,25 +167,19 @@ msgstr "Registrierung nicht erlaubt."
msgid "Not a valid invitation code."
msgstr "Kein gültiger Einladungscode."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Der Benutzername darf nur aus Kleinbuchstaben und Zahlen bestehen. "
-"Leerzeichen sind nicht erlaubt."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Benutzername nicht erlaubt."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Benutzername wird bereits verwendet. Suche dir einen anderen aus."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Fehler beim Verbinden des Benutzers mit Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Benutzername oder Passwort falsch."
@@ -582,3 +576,8 @@ msgstr "%s erlauben, meinen Facebook-Status zu aktualisieren"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Synchronisierungs-Einstellungen"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Der Benutzername darf nur aus Kleinbuchstaben und Zahlen bestehen. "
+#~ "Leerzeichen sind nicht erlaubt."
diff --git a/plugins/Facebook/locale/es/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/es/LC_MESSAGES/Facebook.po
index 8bb4e4fbc..0f4599c7f 100644
--- a/plugins/Facebook/locale/es/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/es/LC_MESSAGES/Facebook.po
@@ -11,13 +11,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:52+0000\n"
"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -162,25 +162,19 @@ msgstr "Registro de usuario no permitido."
msgid "Not a valid invitation code."
msgstr "No es un código de invitación válido."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"El nombre de usuario debe tener sólo letras minúsculas y números, sin "
-"espacios."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Nombre de usuario no autorizado."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "El nombre de usuario ya existe. Prueba con otro."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Error de conexión del usuario a Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Nombre de usuario o contraseña inválidos."
@@ -567,3 +561,8 @@ msgstr ""
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "El nombre de usuario debe tener sólo letras minúsculas y números, sin "
+#~ "espacios."
diff --git a/plugins/Facebook/locale/fr/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/fr/LC_MESSAGES/Facebook.po
index d62550a39..0288bb000 100644
--- a/plugins/Facebook/locale/fr/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/fr/LC_MESSAGES/Facebook.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:53+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -166,25 +166,19 @@ msgstr "Inscription non autorisée."
msgid "Not a valid invitation code."
msgstr "Le code d’invitation n’est pas valide."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
-"chiffres, sans espaces."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Pseudonyme non autorisé."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Pseudonyme déjà utilisé. Essayez-en un autre."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Erreur de connexion de l’utilisateur à Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Nom d’utilisateur ou mot de passe incorrect."
@@ -585,3 +579,8 @@ msgstr "Autoriser %s à mettre à jour mon statut Facebook"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Préférences de synchronisation"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
+#~ "chiffres, sans espaces."
diff --git a/plugins/Facebook/locale/gl/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/gl/LC_MESSAGES/Facebook.po
index 13478bc0f..7ac523490 100644
--- a/plugins/Facebook/locale/gl/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/gl/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:53+0000\n"
"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -148,25 +148,19 @@ msgstr "Non se permite o rexistro."
msgid "Not a valid invitation code."
msgstr "O código da invitación é incorrecto."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"O alcume debe ter só letras en minúscula e números, e non pode ter espazos "
-"en branco."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr ""
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Ese alcume xa está en uso. Probe con outro."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr ""
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "O nome de usuario ou contrasinal non son correctos."
@@ -549,3 +543,8 @@ msgstr ""
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "O alcume debe ter só letras en minúscula e números, e non pode ter "
+#~ "espazos en branco."
diff --git a/plugins/Facebook/locale/ia/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/ia/LC_MESSAGES/Facebook.po
index 00153ab2f..eb276166c 100644
--- a/plugins/Facebook/locale/ia/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/ia/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:53+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -161,23 +161,19 @@ msgstr "Creation de conto non permittite."
msgid "Not a valid invitation code."
msgstr "Le codice de invitation es invalide."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Pseudonymo non permittite."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Pseudonymo ja in uso. Proba un altere."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Error durante le connexion del usator a Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Nomine de usator o contrasigno invalide."
@@ -574,3 +570,7 @@ msgstr "Permitter a %s de actualisar mi stato de Facebook"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Preferentias de synchronisation"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
diff --git a/plugins/Facebook/locale/mk/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/mk/LC_MESSAGES/Facebook.po
index b663b17c5..e670a7459 100644
--- a/plugins/Facebook/locale/mk/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/mk/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:34+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:53+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -161,24 +161,19 @@ msgstr "Регистрацијата не е дозволена."
msgid "Not a valid invitation code."
msgstr "Ова не е важечки код за покана."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Прекарот мора да се состои само од мали букви и бројки, без празни места."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Прекарот не е дозволен."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Прекарот е зафатен. Одберете друг."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Грешка при поврзувањето на корисникот со Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Неважечко корисничко име или лозинка."
@@ -571,3 +566,7 @@ msgstr "Дозволи %s да го менува мојот статус на Fa
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Услогласи нагодувања"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Прекарот мора да се состои само од мали букви и бројки, без празни места."
diff --git a/plugins/Facebook/locale/nb/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/nb/LC_MESSAGES/Facebook.po
index d35302232..1d7873e97 100644
--- a/plugins/Facebook/locale/nb/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/nb/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
"Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -143,23 +143,19 @@ msgstr "Registrering ikke tillatt."
msgid "Not a valid invitation code."
msgstr "Ikke en gyldig invitasjonskode."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "Kallenavn kan kun ha små bokstaver og tall og ingen mellomrom."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Kallenavn er ikke tillatt."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Kallenavnet er allerede i bruk. Prøv et annet."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr ""
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Ugyldig brukernavn eller passord."
@@ -542,3 +538,6 @@ msgstr "Tillat %s å oppdatere min Facebook-status"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr "Kallenavn kan kun ha små bokstaver og tall og ingen mellomrom."
diff --git a/plugins/Facebook/locale/nl/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/nl/LC_MESSAGES/Facebook.po
index 5b60c244d..6812d8671 100644
--- a/plugins/Facebook/locale/nl/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/nl/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:53+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -37,7 +37,7 @@ msgid ""
msgstr ""
"Hallo %1$s.\n"
"\n"
-"Het spijt ons je te moeten meedelen dat het niet mogelijk is uw "
+"Het spijt ons u te moeten meedelen dat het niet mogelijk is uw "
"Facebookstatus bij te werken vanuit %2$s. De Facebookapplicatie is "
"uitgeschakeld voor uw gebruiker. Dit kan komen doordat u de toegangsrechten "
"voor de Facebookapplicatie hebt ingetrokken of omdat u uw Facebookgebruiker "
@@ -80,7 +80,7 @@ msgid ""
"Facebook to a local account. You can either create a new account, or connect "
"with your existing account, if you have one."
msgstr ""
-"De is de eerste keer dat u aanmeldt bij %s en dan moeten we uw "
+"Dit is de eerste keer dat u aanmeldt bij %s en dan moeten we uw "
"Facebookgebruiker koppelen met uw lokale gebruiker. U kunt een nieuwe "
"gebruiker aanmaken of koppelen met een bestaande gebruiker als u die al hebt."
@@ -166,26 +166,20 @@ msgstr "Registratie is niet toegestaan."
msgid "Not a valid invitation code."
msgstr "De uitnodigingscode is ongeldig."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
-"zijn niet toegestaan."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Gebruikersnaam niet toegestaan."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr ""
"De opgegeven gebruikersnaam is al in gebruik. Kies een andere gebruikersnaam."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Fout bij het verbinden van de gebruiker met Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Ongeldige gebruikersnaam of wachtwoord."
@@ -582,3 +576,8 @@ msgstr "%s toestaan mijn Facebookstatus bij te werken"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Synchronisatievooreuren"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
+#~ "zijn niet toegestaan."
diff --git a/plugins/Facebook/locale/pt_BR/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/pt_BR/LC_MESSAGES/Facebook.po
index 88b3ea2d1..70fbdf3e5 100644
--- a/plugins/Facebook/locale/pt_BR/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/pt_BR/LC_MESSAGES/Facebook.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
"Language-Team: Brazilian Portuguese <http://translatewiki.net/wiki/Portal:pt-"
"br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -145,25 +145,19 @@ msgstr "Não é permitido o registro."
msgid "Not a valid invitation code."
msgstr "O código de convite é inválido."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"O apelido deve conter apenas letras minúsculas e números e não pode ter "
-"espaços."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Apelido não permitido."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Este apelido já está em uso. Tente outro."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Erro ao conectar o usuário ao Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr ""
@@ -548,3 +542,8 @@ msgstr ""
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "O apelido deve conter apenas letras minúsculas e números e não pode ter "
+#~ "espaços."
diff --git a/plugins/Facebook/locale/tl/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/tl/LC_MESSAGES/Facebook.po
index c8fbf25fe..5833cdb95 100644
--- a/plugins/Facebook/locale/tl/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/tl/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -167,25 +167,19 @@ msgstr "Hindi pinapahintulutan ang pagpapatala."
msgid "Not a valid invitation code."
msgstr "Hindi isang tanggap na kodigo ng paanyaya."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Ang palayaw ay dapat na may mga maliliit na mga titik lamang at mga bilang "
-"at walang mga patlang."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Hindi pinapahintulutan ang palayaw."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Ginagamit na ang palayaw. Subukan ang iba."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "May kamalian sa pag-ugnay ng tagagamit sa Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Hindi tanggap na pangalan ng tagagamit o hudyat."
@@ -587,3 +581,8 @@ msgstr "Pahintulutan si %s na isapanahon ang aking katayuan ng Facebook"
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Mga nais sa pagsabay"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Ang palayaw ay dapat na may mga maliliit na mga titik lamang at mga "
+#~ "bilang at walang mga patlang."
diff --git a/plugins/Facebook/locale/uk/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/uk/LC_MESSAGES/Facebook.po
index 058733a1f..a8bc05155 100644
--- a/plugins/Facebook/locale/uk/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/uk/LC_MESSAGES/Facebook.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:35+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -163,25 +163,19 @@ msgstr "Реєстрацію не дозволено."
msgid "Not a valid invitation code."
msgstr "Це не дійсний код запрошення."
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Ім’я користувача повинно складатись з літер нижнього регістру і цифр, ніяких "
-"інтервалів."
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "Нікнейм не допускається."
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "Цей нікнейм вже використовується. Спробуйте інший."
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "Помилка при підключенні до Facebook."
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "Невірне ім’я або пароль."
@@ -577,3 +571,8 @@ msgstr "Дозволити додатку %s оновлювати мій ста
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr "Параметри синхронізації"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Ім’я користувача повинно складатись з літер нижнього регістру і цифр, "
+#~ "ніяких інтервалів."
diff --git a/plugins/Facebook/locale/vi/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/vi/LC_MESSAGES/Facebook.po
new file mode 100644
index 000000000..31b660d19
--- /dev/null
+++ b/plugins/Facebook/locale/vi/LC_MESSAGES/Facebook.po
@@ -0,0 +1,540 @@
+# Translation of StatusNet - Facebook to Vietnamese (Tiếng Việt)
+# Expored from translatewiki.net
+#
+# Author: Minh Nguyen
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Facebook\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
+"Language-Team: Vietnamese <http://translatewiki.net/wiki/Portal:vi>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: vi\n"
+"X-Message-Group: #out-statusnet-plugin-facebook\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: facebookutil.php:429
+#, 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:55
+msgid "You must be logged into Facebook to use Facebook Connect."
+msgstr ""
+
+#: FBConnectAuth.php:79
+msgid "There is already a local user linked with this Facebook account."
+msgstr ""
+
+#: FBConnectAuth.php:91 FBConnectSettings.php:166
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: FBConnectAuth.php:96
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: FBConnectAuth.php:106
+msgid "An unknown error has occured."
+msgstr ""
+
+#. TRANS: %s is the site name.
+#: FBConnectAuth.php:121
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your "
+"Facebook to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#. TRANS: Page title.
+#: FBConnectAuth.php:128
+msgid "Facebook Account Setup"
+msgstr "Thiết lập Tài khoản Facebook"
+
+#. TRANS: Legend.
+#: FBConnectAuth.php:162
+msgid "Connection options"
+msgstr ""
+
+#. TRANS: %s is the name of the license used by the user for their status updates.
+#: FBConnectAuth.php:172
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#. TRANS: Legend.
+#: FBConnectAuth.php:189
+msgid "Create new account"
+msgstr ""
+
+#: FBConnectAuth.php:191
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#. TRANS: Field label.
+#: FBConnectAuth.php:195
+msgid "New nickname"
+msgstr ""
+
+#: FBConnectAuth.php:197
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#. TRANS: Submit button.
+#: FBConnectAuth.php:201
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Tạo"
+
+#: FBConnectAuth.php:207
+msgid "Connect existing account"
+msgstr ""
+
+#: FBConnectAuth.php:209
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+
+#. TRANS: Field label.
+#: FBConnectAuth.php:213
+msgid "Existing nickname"
+msgstr ""
+
+#: FBConnectAuth.php:216 facebookaction.php:277
+msgid "Password"
+msgstr "Mật khẩu"
+
+#. TRANS: Submit button.
+#: FBConnectAuth.php:220
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Kết nối"
+
+#. TRANS: Client error trying to register with registrations not allowed.
+#. TRANS: Client error trying to register with registrations 'invite only'.
+#: FBConnectAuth.php:237 FBConnectAuth.php:247
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: Client error trying to register with an invalid invitation code.
+#: FBConnectAuth.php:255
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: FBConnectAuth.php:267
+msgid "Nickname not allowed."
+msgstr ""
+
+#: FBConnectAuth.php:272
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
+msgid "Error connecting user to Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:310
+msgid "Invalid username or password."
+msgstr ""
+
+#. TRANS: Page title.
+#: facebooklogin.php:90 facebookaction.php:255
+msgid "Login"
+msgstr "Đăng nhập"
+
+#. TRANS: Legend.
+#: facebooknoticeform.php:144
+msgid "Send a notice"
+msgstr ""
+
+#. TRANS: Field label.
+#: facebooknoticeform.php:157
+#, php-format
+msgid "What's up, %s?"
+msgstr ""
+
+#: facebooknoticeform.php:169
+msgid "Available characters"
+msgstr ""
+
+#. TRANS: Button text.
+#: facebooknoticeform.php:196
+msgctxt "BUTTON"
+msgid "Send"
+msgstr "Gửi"
+
+#: facebookhome.php:103
+msgid "Server error: Couldn't get user!"
+msgstr ""
+
+#: facebookhome.php:122
+msgid "Incorrect username or password."
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %1$s is a user nickname, %2$s is a page number.
+#: facebookhome.php:153
+#, php-format
+msgid "%1$s and friends, page %2$d"
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %s is a user nickname
+#: facebookhome.php:157
+#, php-format
+msgid "%s and friends"
+msgstr "%s và bạn bè"
+
+#. TRANS: Instructions. %s is the application name.
+#: facebookhome.php:185
+#, php-format
+msgid ""
+"If you would like the %s app to automatically update your Facebook status "
+"with your latest notice, you need to give it permission."
+msgstr ""
+
+#: facebookhome.php:210
+msgid "Okay, do it!"
+msgstr ""
+
+#. TRANS: Button text. Clicking the button will skip updating Facebook permissions.
+#: facebookhome.php:217
+msgctxt "BUTTON"
+msgid "Skip"
+msgstr "Bỏ qua"
+
+#: facebookhome.php:244 facebookaction.php:336
+msgid "Pagination"
+msgstr ""
+
+#. TRANS: Pagination link.
+#: facebookhome.php:254 facebookaction.php:345
+msgid "After"
+msgstr "Sau"
+
+#. TRANS: Pagination link.
+#: facebookhome.php:263 facebookaction.php:353
+msgid "Before"
+msgstr "Trước"
+
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:69
+#, php-format
+msgid "Thanks for inviting your friends to use %s."
+msgstr ""
+
+#. TRANS: Followed by an unordered list with invited friends.
+#: facebookinvite.php:72
+msgid "Invitations have been sent to the following users:"
+msgstr ""
+
+#: facebookinvite.php:91
+#, php-format
+msgid "You have been invited to %s"
+msgstr ""
+
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:101
+#, php-format
+msgid "Invite your friends to use %s"
+msgstr ""
+
+#. TRANS: %s is the name of the site.
+#: facebookinvite.php:124
+#, php-format
+msgid "Friends already using %s:"
+msgstr ""
+
+#. TRANS: Page title.
+#: facebookinvite.php:143
+msgid "Send invitations"
+msgstr ""
+
+#. TRANS: Menu item.
+#. TRANS: Menu item tab.
+#: FacebookPlugin.php:188 FacebookPlugin.php:461 FacebookPlugin.php:485
+msgctxt "MENU"
+msgid "Facebook"
+msgstr "Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookPlugin.php:190
+msgid "Facebook integration configuration"
+msgstr ""
+
+#: FacebookPlugin.php:431
+msgid "Facebook Connect User"
+msgstr "Người dùng Kết nối Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookPlugin.php:463
+msgid "Login or register using Facebook"
+msgstr ""
+
+#. TRANS: Tooltip for menu item "Facebook".
+#. TRANS: Page title.
+#: FacebookPlugin.php:487 FBConnectSettings.php:55
+msgid "Facebook Connect Settings"
+msgstr "Thiết lập Kết nối Facebook"
+
+#: FacebookPlugin.php:591
+msgid ""
+"The Facebook plugin allows integrating StatusNet instances with <a href="
+"\"http://facebook.com/\">Facebook</a> and Facebook Connect."
+msgstr ""
+
+#: FBConnectLogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#. TRANS: Instructions.
+#: FBConnectLogin.php:42
+msgid "Login with your Facebook Account"
+msgstr ""
+
+#. TRANS: Page title.
+#: FBConnectLogin.php:57
+msgid "Facebook Login"
+msgstr "Đăng nhập vào Facebook"
+
+#: facebookremove.php:53
+msgid "Couldn't remove Facebook user: already deleted."
+msgstr ""
+
+#: facebookremove.php:63
+msgid "Couldn't remove Facebook user."
+msgstr ""
+
+#. TRANS: Link description for 'Home' link that leads to a start page.
+#: facebookaction.php:169
+msgctxt "MENU"
+msgid "Home"
+msgstr "Trang chủ"
+
+#. TRANS: Tooltip for 'Home' link that leads to a start page.
+#: facebookaction.php:171
+msgid "Home"
+msgstr "Trang chủ"
+
+#. TRANS: Link description for 'Invite' link that leads to a page where friends can be invited.
+#: facebookaction.php:180
+msgctxt "MENU"
+msgid "Invite"
+msgstr ""
+
+#. TRANS: Tooltip for 'Invite' link that leads to a page where friends can be invited.
+#: facebookaction.php:182
+msgid "Invite"
+msgstr ""
+
+#. TRANS: Link description for 'Settings' link that leads to a page user preferences can be set.
+#: facebookaction.php:192
+msgctxt "MENU"
+msgid "Settings"
+msgstr "Thiết lập"
+
+#. TRANS: Tooltip for 'Settings' link that leads to a page user preferences can be set.
+#: facebookaction.php:194
+msgid "Settings"
+msgstr "Thiết lập"
+
+#: facebookaction.php:233
+#, php-format
+msgid ""
+"To use the %s Facebook Application you need to login with your username and "
+"password. Don't have a username yet?"
+msgstr ""
+
+#: facebookaction.php:235
+msgid " a new account."
+msgstr ""
+
+#: facebookaction.php:242
+msgid "Register"
+msgstr "Đăng ký"
+
+#: facebookaction.php:274
+msgid "Nickname"
+msgstr ""
+
+#. TRANS: Login button.
+#: facebookaction.php:282
+msgctxt "BUTTON"
+msgid "Login"
+msgstr "Đăng nhập"
+
+#: facebookaction.php:288
+msgid "Lost or forgotten password?"
+msgstr ""
+
+#: facebookaction.php:370
+msgid "No notice content!"
+msgstr ""
+
+#: facebookaction.php:377
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr ""
+
+#: facebookaction.php:431
+msgid "Notices"
+msgstr ""
+
+#: facebookadminpanel.php:52
+msgid "Facebook"
+msgstr "Facebook"
+
+#: facebookadminpanel.php:62
+msgid "Facebook integration settings"
+msgstr ""
+
+#: facebookadminpanel.php:123
+msgid "Invalid Facebook API key. Max length is 255 characters."
+msgstr ""
+
+#: facebookadminpanel.php:129
+msgid "Invalid Facebook API secret. Max length is 255 characters."
+msgstr ""
+
+#: facebookadminpanel.php:178
+msgid "Facebook application settings"
+msgstr "Thiết lập ứng dụng Facebook"
+
+#: facebookadminpanel.php:184
+msgid "API key"
+msgstr ""
+
+#: facebookadminpanel.php:185
+msgid "API key provided by Facebook"
+msgstr ""
+
+#: facebookadminpanel.php:193
+msgid "Secret"
+msgstr ""
+
+#: facebookadminpanel.php:194
+msgid "API secret provided by Facebook"
+msgstr ""
+
+#: facebookadminpanel.php:210
+msgid "Save"
+msgstr "Lưu"
+
+#: facebookadminpanel.php:210
+msgid "Save Facebook settings"
+msgstr "Lưu các thiết lập Facebook"
+
+#. TRANS: Instructions.
+#: FBConnectSettings.php:66
+msgid "Manage how your account connects to Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:90
+msgid "There is no Facebook user connected to this account."
+msgstr ""
+
+#: FBConnectSettings.php:98
+msgid "Connected Facebook user"
+msgstr "Người dùng Facebook kết nối"
+
+#. TRANS: Legend.
+#: FBConnectSettings.php:118
+msgid "Disconnect my account from Facebook"
+msgstr ""
+
+#. TRANS: Followed by a link containing text "set a password".
+#: FBConnectSettings.php:125
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please "
+msgstr ""
+
+#. TRANS: Preceded by "Please " and followed by " first."
+#: FBConnectSettings.php:130
+msgid "set a password"
+msgstr ""
+
+#. TRANS: Preceded by "Please set a password".
+#: FBConnectSettings.php:132
+msgid " first."
+msgstr ""
+
+#. TRANS: Submit button.
+#: FBConnectSettings.php:145
+msgctxt "BUTTON"
+msgid "Disconnect"
+msgstr "Ngắt kết nối"
+
+#: FBConnectSettings.php:180
+msgid "Couldn't delete link to Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:196
+msgid "You have disconnected from Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:199
+msgid "Not sure what you're trying to do."
+msgstr ""
+
+#: facebooksettings.php:61
+msgid "There was a problem saving your sync preferences!"
+msgstr ""
+
+#. TRANS: Confirmation that synchronisation settings have been saved into the system.
+#: facebooksettings.php:64
+msgid "Sync preferences saved."
+msgstr ""
+
+#: facebooksettings.php:87
+msgid "Automatically update my Facebook status with my notices."
+msgstr ""
+
+#: facebooksettings.php:94
+msgid "Send \"@\" replies to Facebook."
+msgstr ""
+
+#. TRANS: Submit button to save synchronisation settings.
+#: facebooksettings.php:102
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Lưu"
+
+#. TRANS: %s is the application name.
+#: facebooksettings.php:111
+#, php-format
+msgid ""
+"If you would like %s to automatically update your Facebook status with your "
+"latest notice, you need to give it permission."
+msgstr ""
+
+#: facebooksettings.php:124
+#, php-format
+msgid "Allow %s to update my Facebook status"
+msgstr ""
+
+#. TRANS: Page title for synchronisation settings.
+#: facebooksettings.php:134
+msgid "Sync preferences"
+msgstr ""
diff --git a/plugins/Facebook/locale/zh_CN/LC_MESSAGES/Facebook.po b/plugins/Facebook/locale/zh_CN/LC_MESSAGES/Facebook.po
index 03f85020c..5a4ad5ca0 100644
--- a/plugins/Facebook/locale/zh_CN/LC_MESSAGES/Facebook.po
+++ b/plugins/Facebook/locale/zh_CN/LC_MESSAGES/Facebook.po
@@ -10,14 +10,14 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Facebook\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:36+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:18:56+0000\n"
"Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
"hans>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:01+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: #out-statusnet-plugin-facebook\n"
@@ -157,23 +157,19 @@ msgstr "不允许注册。"
msgid "Not a valid invitation code."
msgstr "对不起,无效的邀请码。"
-#: FBConnectAuth.php:265
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "昵称只能使用小写字母和数字且不能使用空格。"
-
-#: FBConnectAuth.php:270
+#: FBConnectAuth.php:267
msgid "Nickname not allowed."
msgstr "昵称不被允许。"
-#: FBConnectAuth.php:275
+#: FBConnectAuth.php:272
msgid "Nickname already in use. Try another one."
msgstr "昵称已被使用,换一个吧。"
-#: FBConnectAuth.php:293 FBConnectAuth.php:327 FBConnectAuth.php:347
+#: FBConnectAuth.php:290 FBConnectAuth.php:324 FBConnectAuth.php:344
msgid "Error connecting user to Facebook."
msgstr "连接用户至Facebook时发生错误。"
-#: FBConnectAuth.php:313
+#: FBConnectAuth.php:310
msgid "Invalid username or password."
msgstr "用户名或密码不正确。"
@@ -557,3 +553,6 @@ msgstr ""
#: facebooksettings.php:134
msgid "Sync preferences"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr "昵称只能使用小写字母和数字且不能使用空格。"
diff --git a/plugins/FacebookBridge/FacebookBridgePlugin.php b/plugins/FacebookBridge/FacebookBridgePlugin.php
new file mode 100644
index 000000000..8b5d05e98
--- /dev/null
+++ b/plugins/FacebookBridge/FacebookBridgePlugin.php
@@ -0,0 +1,552 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * A plugin for integrating Facebook with StatusNet. Includes single-sign-on
+ * and publishing notices to Facebook using Facebook's Graph API.
+ *
+ * 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 Pugin
+ * @package StatusNet
+ * @author Zach Copley <zach@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);
+}
+
+define("FACEBOOK_SERVICE", 2);
+
+/**
+ * Main class for Facebook Bridge plugin
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
+ * @link http://status.net/
+ */
+class FacebookBridgePlugin extends Plugin
+{
+ public $appId = null; // Facebook application ID
+ public $secret = null; // Facebook application secret
+ public $facebook = null; // Facebook application instance
+ public $dir = null; // Facebook plugin dir
+
+ /**
+ * Initializer for this plugin
+ *
+ * Gets an instance of the Facebook API client object
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ */
+ function initialize()
+ {
+ $this->facebook = Facebookclient::getFacebook(
+ $this->appId,
+ $this->secret
+ );
+
+ 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__);
+
+ //common_debug("class = " . $cls);
+
+ switch ($cls)
+ {
+ case 'Facebook': // Facebook PHP SDK
+ include_once $dir . '/extlib/facebook.php';
+ return false;
+ case 'FacebookloginAction':
+ case 'FacebookfinishloginAction':
+ case 'FacebookadminpanelAction':
+ case 'FacebooksettingsAction':
+ case 'FacebookdeauthorizeAction':
+ include_once $dir . '/actions/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
+ return false;
+ case 'Facebookclient':
+ case 'FacebookQueueHandler':
+ include_once $dir . '/lib/' . strtolower($cls) . '.php';
+ return false;
+ case 'Notice_to_item':
+ include_once $dir . '/classes/' . $cls . '.php';
+ return false;
+ default:
+ return true;
+ }
+
+ }
+
+ /**
+ * Database schema setup
+ *
+ * We maintain a table mapping StatusNet notices to Facebook items
+ *
+ * @see Schema
+ * @see ColumnDef
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ */
+ function onCheckSchema()
+ {
+ $schema = Schema::get();
+ $schema->ensureTable('notice_to_item', Notice_to_item::schemaDef());
+ return true;
+ }
+
+ /*
+ * Does this $action need the Facebook JavaScripts?
+ */
+ function needsScripts($action)
+ {
+ static $needy = array(
+ 'FacebookloginAction',
+ 'FacebookfinishloginAction',
+ 'FacebookadminpanelAction',
+ 'FacebooksettingsAction'
+ );
+
+ if (in_array(get_class($action), $needy)) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Map URLs to actions
+ *
+ * @param Net_URL_Mapper $m path-to-action mapper
+ *
+ * @return boolean hook value; true means continue processing, false means stop.
+ */
+ function onRouterInitialized($m)
+ {
+ // Always add the admin panel route
+ $m->connect('admin/facebook', array('action' => 'facebookadminpanel'));
+
+ // Only add these routes if an application has been setup on
+ // Facebook for the plugin to use.
+ if ($this->hasApplication()) {
+
+ $m->connect(
+ 'main/facebooklogin',
+ array('action' => 'facebooklogin')
+ );
+ $m->connect(
+ 'main/facebookfinishlogin',
+ array('action' => 'facebookfinishlogin')
+ );
+ $m->connect(
+ 'settings/facebook',
+ array('action' => 'facebooksettings')
+ );
+ $m->connect(
+ 'facebook/deauthorize',
+ array('action' => 'facebookdeauthorize')
+ );
+
+ }
+
+ return true;
+ }
+
+ /*
+ * Add a login tab for Facebook, but only if there's a Facebook
+ * application defined for the plugin to use.
+ *
+ * @param Action &action the current action
+ *
+ * @return void
+ */
+ function onEndLoginGroupNav(&$action)
+ {
+ $action_name = $action->trimmed('action');
+
+ if ($this->hasApplication()) {
+
+ $action->menuItem(
+ common_local_url('facebooklogin'),
+ _m('MENU', 'Facebook'),
+ // TRANS: Tooltip for menu item "Facebook".
+ _m('Login or register using Facebook'),
+ 'facebooklogin' === $action_name
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * If the plugin's installed, this should be accessible to admins
+ */
+ function onAdminPanelCheck($name, &$isOK)
+ {
+ if ($name == 'facebook') {
+ $isOK = true;
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * 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'),
+ // TRANS: Menu item.
+ _m('MENU','Facebook'),
+ // TRANS: Tooltip for menu item "Facebook".
+ _m('Facebook integration configuration'),
+ $action_name == 'facebookadminpanel',
+ 'nav_facebook_admin_panel'
+ );
+ }
+
+ return true;
+ }
+
+ /*
+ * Add a tab for user-level Facebook settings if the user
+ * has a link to Facebook
+ *
+ * @param Action &action the current action
+ *
+ * @return void
+ */
+ function onEndConnectSettingsNav(&$action)
+ {
+ if ($this->hasApplication()) {
+ $action_name = $action->trimmed('action');
+
+ // CurrentUserDesignAction stores the current user in $cur
+ $user = $action->getCurrentUser();
+
+ $flink = null;
+
+ if (!empty($user)) {
+ $flink = Foreign_link::getByUserID(
+ $user->id,
+ FACEBOOK_SERVICE
+ );
+ }
+
+ if (!empty($flink)) {
+
+ $action->menuItem(
+ common_local_url('facebooksettings'),
+ // TRANS: Menu item tab.
+ _m('MENU','Facebook'),
+ // TRANS: Tooltip for menu item "Facebook".
+ _m('Facebook settings'),
+ $action_name === 'facebooksettings'
+ );
+
+ }
+ }
+
+ }
+
+ /*
+ * Is there a Facebook application for the plugin to use?
+ *
+ * Checks to see if a Facebook application ID and secret
+ * have been configured and a valid Facebook API client
+ * object exists.
+ *
+ */
+ function hasApplication()
+ {
+ if (!empty($this->facebook)) {
+
+ $appId = $this->facebook->getAppId();
+ $secret = $this->facebook->getApiSecret();
+
+ if (!empty($appId) && !empty($secret)) {
+ return true;
+ }
+
+ }
+
+ return false;
+ }
+
+ /*
+ * Output a Facebook div for the Facebook JavaSsript SDK to use
+ *
+ * @param Action $action the current action
+ *
+ */
+ function onStartShowHeader($action)
+ {
+ // output <div id="fb-root"></div> as close to <body> as possible
+ $action->element('div', array('id' => 'fb-root'));
+ return true;
+ }
+
+ /*
+ * Load the Facebook JavaScript SDK on pages that need them.
+ *
+ * @param Action $action the current action
+ *
+ */
+ function onEndShowScripts($action)
+ {
+ if ($this->needsScripts($action)) {
+
+ $action->script('https://connect.facebook.net/en_US/all.js');
+
+ $script = <<<ENDOFSCRIPT
+FB.init({appId: %1\$s, session: %2\$s, status: true, cookie: true, xfbml: true});
+
+$('#facebook_button').bind('click', function(event) {
+
+ event.preventDefault();
+
+ FB.login(function(response) {
+ if (response.session && response.perms) {
+ window.location.href = '%3\$s';
+ } else {
+ // NOP (user cancelled login)
+ }
+ }, {perms:'read_stream,publish_stream,offline_access,user_status,user_location,user_website,email'});
+});
+ENDOFSCRIPT;
+
+ $action->inlineScript(
+ sprintf($script,
+ json_encode($this->facebook->getAppId()),
+ json_encode($this->facebook->getSession()),
+ common_local_url('facebookfinishlogin')
+ )
+ );
+ }
+ }
+
+ /*
+ * Log the user out of Facebook, per the Facebook authentication guide
+ *
+ * @param Action action the current action
+ */
+ function onEndLogout($action)
+ {
+ if ($this->hasApplication()) {
+ $session = $this->facebook->getSession();
+ $fbuser = null;
+ $fbuid = null;
+
+ if ($session) {
+ try {
+ $fbuid = $this->facebook->getUser();
+ $fbuser = $this->facebook->api('/me');
+ } catch (FacebookApiException $e) {
+ common_log(LOG_ERROR, $e, __FILE__);
+ }
+ }
+
+ if (!empty($fbuser)) {
+
+ $logoutUrl = $this->facebook->getLogoutUrl(
+ array('next' => common_local_url('public'))
+ );
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ "Logging user out of Facebook (fbuid = %s)",
+ $fbuid
+ ),
+ __FILE__
+ );
+ common_debug("LOGOUT URL = $logoutUrl");
+ common_redirect($logoutUrl, 303);
+ }
+
+ }
+ }
+
+ /*
+ * Add fbml namespace to our HTML, so Facebook's JavaScript SDK can parse
+ * and render XFBML tags
+ *
+ * @param Action $action the current action
+ * @param array $attrs array of attributes for the HTML tag
+ *
+ * @return nothing
+ */
+ function onStartHtmlElement($action, $attrs) {
+
+ if ($this->needsScripts($action)) {
+ $attrs = array_merge(
+ $attrs,
+ array('xmlns:fb' => 'http://www.facebook.com/2008/fbml')
+ );
+ }
+
+ return true;
+ }
+
+ /**
+ * Add a Facebook queue item for each notice
+ *
+ * @param Notice $notice the notice
+ * @param array &$transports the list of transports (queues)
+ *
+ * @return boolean hook return
+ */
+ function onStartEnqueueNotice($notice, &$transports)
+ {
+ if (self::hasApplication() && $notice->isLocal()) {
+ array_push($transports, 'facebook');
+ }
+ return true;
+ }
+
+ /**
+ * Register Facebook notice queue handler
+ *
+ * @param QueueManager $manager
+ *
+ * @return boolean hook return
+ */
+ function onEndInitializeQueueManager($manager)
+ {
+ if (self::hasApplication()) {
+ $manager->connect('facebook', 'FacebookQueueHandler');
+ }
+ return true;
+ }
+
+ /*
+ * Use SSL for Facebook stuff
+ *
+ * @param string $action name
+ * @param boolean $ssl outval to force SSL
+ * @return mixed hook return value
+ */
+ function onSensitiveAction($action, &$ssl)
+ {
+ $sensitive = array(
+ 'facebookadminpanel',
+ 'facebooksettings',
+ 'facebooklogin',
+ 'facebookfinishlogin'
+ );
+
+ if (in_array($action, $sensitive)) {
+ $ssl = true;
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * If a notice gets deleted, remove the Notice_to_item mapping and
+ * delete the item on Facebook
+ *
+ * @param User $user The user doing the deleting
+ * @param Notice $notice The notice getting deleted
+ *
+ * @return boolean hook value
+ */
+ function onStartDeleteOwnNotice(User $user, Notice $notice)
+ {
+ $client = new Facebookclient($notice);
+ $client->streamRemove();
+
+ return true;
+ }
+
+ /**
+ * 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)
+ {
+ $client = new Facebookclient($notice);
+ $client->like();
+
+ 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)
+ {
+ $client = new Facebookclient($notice);
+ $client->unLike();
+
+ return true;
+ }
+
+ /*
+ * Add version info for this plugin
+ *
+ * @param array &$versions plugin version descriptions
+ */
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array(
+ 'name' => 'Facebook Bridge',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Craig Andrews, Zach Copley',
+ 'homepage' => 'http://status.net/wiki/Plugin:FacebookBridge',
+ 'rawdescription' =>
+ _m('A plugin for integrating StatusNet with Facebook.')
+ );
+
+ return true;
+ }
+}
diff --git a/plugins/FacebookBridge/actions/facebookadminpanel.php b/plugins/FacebookBridge/actions/facebookadminpanel.php
new file mode 100644
index 000000000..61b544184
--- /dev/null
+++ b/plugins/FacebookBridge/actions/facebookadminpanel.php
@@ -0,0 +1,212 @@
+<?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('appid', '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)
+ {
+ // appId, key and secret (can't be too long)
+
+ if (mb_strlen($values['facebook']['appid']) > 255) {
+ $this->clientError(
+ _m("Invalid Facebook ID. Max length is 255 characters.")
+ );
+ }
+
+ if (mb_strlen($values['facebook']['secret']) > 255) {
+ $this->clientError(
+ _m("Invalid Facebook 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(
+ 'appid',
+ _m('Application ID'),
+ _m('ID of your Facebook application'),
+ 'facebook'
+ );
+ $this->unli();
+
+ $this->li();
+ $this->input(
+ 'secret',
+ _m('Secret'),
+ _m('Application secret'),
+ 'facebook'
+ );
+ $this->unli();
+
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('fieldset');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+ function formActions()
+ {
+ $this->out->submit('submit', _m('Save'), 'submit', null, _m('Save Facebook settings'));
+ }
+}
diff --git a/plugins/FacebookBridge/actions/facebookdeauthorize.php b/plugins/FacebookBridge/actions/facebookdeauthorize.php
new file mode 100644
index 000000000..6813ccf1d
--- /dev/null
+++ b/plugins/FacebookBridge/actions/facebookdeauthorize.php
@@ -0,0 +1,144 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * An action that handles deauthorize callbacks from Facebook
+ *
+ * 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 Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@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);
+}
+
+/*
+ * Action class for handling deauthorize callbacks from Facebook. If the user
+ * doesn't have a password let her know she'll need to contact the site
+ * admin to get back into her account (if possible).
+ */
+class FacebookdeauthorizeAction extends Action
+{
+ private $facebook;
+
+ /**
+ * For initializing members of the class.
+ *
+ * @param array $args misc. arguments
+ *
+ * @return boolean true
+ */
+ function prepare($args)
+ {
+ $this->facebook = Facebookclient::getFacebook();
+
+ return true;
+ }
+
+ /**
+ * Handler method
+ *
+ * @param array $args is ignored since it's now passed in in prepare()
+ */
+ function handle($args)
+ {
+ parent::handle($args);
+
+ $data = $this->facebook->getSignedRequest();
+
+ if (isset($data['user_id'])) {
+
+ $fbuid = $data['user_id'];
+
+ $flink = Foreign_link::getByForeignID($fbuid, FACEBOOK_SERVICE);
+ $user = $flink->getUser();
+
+ // Remove the link to Facebook
+ $result = $flink->delete();
+
+ if (!$result) {
+ common_log_db_error($flink, 'DELETE', __FILE__);
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Unable to delete Facebook foreign link '
+ . 'for %s (%d), fbuid %d',
+ $user->nickname,
+ $user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+ return;
+ }
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Facebook callback: %s (%d), fbuid %d has deauthorized '
+ . 'the Facebook application.',
+ $user->nickname,
+ $user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ // Warn the user about being locked out of their account
+ // if we can.
+ if (empty($user->password) && !empty($user->email)) {
+ Facebookclient::emailWarn($user);
+ } else {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ '%s (%d), fbuid %d has deauthorized his/her Facebook '
+ . 'connection but hasn\'t set a password so s/he '
+ . 'is locked out.',
+ $user->nickname,
+ $user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+ }
+
+ } else {
+ if (!empty($data)) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Facebook called the deauthorize callback '
+ . ' but didn\'t provide a user ID.'
+ ),
+ __FILE__
+ );
+ } else {
+ // It probably wasn't Facebook that hit this action,
+ // so redirect to the public timeline
+ common_redirect(common_local_url('public'), 303);
+ }
+ }
+ }
+
+} \ No newline at end of file
diff --git a/plugins/FacebookBridge/actions/facebookfinishlogin.php b/plugins/FacebookBridge/actions/facebookfinishlogin.php
new file mode 100644
index 000000000..349acd7e2
--- /dev/null
+++ b/plugins/FacebookBridge/actions/facebookfinishlogin.php
@@ -0,0 +1,677 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Login or register a local user based on a Facebook 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 Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class FacebookfinishloginAction extends Action
+{
+ private $facebook = null; // Facebook client
+ private $fbuid = null; // Facebook user ID
+ private $fbuser = null; // Facebook user object (JSON)
+
+ function prepare($args) {
+
+ parent::prepare($args);
+
+ $this->facebook = new Facebook(
+ array(
+ 'appId' => common_config('facebook', 'appid'),
+ 'secret' => common_config('facebook', 'secret'),
+ 'cookie' => true,
+ )
+ );
+
+ // Check for a Facebook user session
+
+ $session = $this->facebook->getSession();
+ $me = null;
+
+ if ($session) {
+ try {
+ $this->fbuid = $this->facebook->getUser();
+ $this->fbuser = $this->facebook->api('/me');
+ } catch (FacebookApiException $e) {
+ common_log(LOG_ERROR, $e, __FILE__);
+ }
+ }
+
+ if (!empty($this->fbuser)) {
+
+ // OKAY, all is well... proceed to register
+
+ common_debug("Found a valid Facebook user.", __FILE__);
+ } else {
+
+ // This shouldn't happen in the regular course of things
+
+ list($proxy, $ip) = common_client_ip();
+
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Failed Facebook authentication attempt, proxy = %s, ip = %s.',
+ $proxy,
+ $ip
+ ),
+ __FILE__
+ );
+
+ $this->clientError(
+ _m('You must be logged into Facebook to register a local account using Facebook.')
+ );
+ }
+
+ return true;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if (common_is_real_login()) {
+
+ // User is already logged in, are her accounts already linked?
+
+ $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE);
+
+ if (!empty($flink)) {
+
+ // User already has a linked Facebook account and shouldn't be here!
+
+ common_debug(
+ sprintf(
+ 'There\'s already a local user %d linked with Facebook user %s.',
+ $flink->user_id,
+ $this->fbuid
+ )
+ );
+
+ $this->clientError(
+ _m('There is already a local account linked with that Facebook account.')
+ );
+
+ } else {
+
+ // Possibly reconnect an existing account
+
+ $this->connectUser();
+ }
+
+ } else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
+ $this->handlePost();
+ } else {
+ $this->tryLogin();
+ }
+ }
+
+ function handlePost()
+ {
+ $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;
+ }
+
+ if ($this->arg('create')) {
+
+ if (!$this->boolean('license')) {
+ $this->showForm(
+ _m('You can\'t register if you don\'t agree to the license.'),
+ $this->trimmed('newname')
+ );
+ return;
+ }
+
+ // We has a valid Facebook session and the Facebook user has
+ // agreed to the SN license, so create a new user
+ $this->createNewUser();
+
+ } else if ($this->arg('connect')) {
+
+ $this->connectNewUser();
+
+ } else {
+
+ $this->showForm(
+ _m('An unknown error has occured.'),
+ $this->trimmed('newname')
+ );
+ }
+ }
+
+ function showPageNotice()
+ {
+ if ($this->error) {
+
+ $this->element('div', array('class' => 'error'), $this->error);
+
+ } else {
+
+ $this->element(
+ 'div', 'instructions',
+ // TRANS: %s is the site name.
+ sprintf(
+ _m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new local account, or connect with an existing local account.'),
+ common_config('site', 'name')
+ )
+ );
+ }
+ }
+
+ function title()
+ {
+ // TRANS: Page title.
+ return _m('Facebook Setup');
+ }
+
+ function showForm($error=null, $username=null)
+ {
+ $this->error = $error;
+ $this->username = $username;
+
+ $this->showPage();
+ }
+
+ function showPage()
+ {
+ parent::showPage();
+ }
+
+ /**
+ * @fixme much of this duplicates core code, which is very fragile.
+ * Should probably be replaced with an extensible mini version of
+ * the core registration form.
+ */
+ function showContent()
+ {
+ if (!empty($this->message_text)) {
+ $this->element('p', null, $this->message);
+ return;
+ }
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_settings_facebook_connect',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('facebookfinishlogin')));
+ $this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
+ // TRANS: Legend.
+ $this->element('legend', null, _m('Connection options'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ $this->element('input', array('type' => 'checkbox',
+ 'id' => 'license',
+ 'class' => 'checkbox',
+ 'name' => 'license',
+ 'value' => 'true'));
+ $this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
+ // TRANS: %s is the name of the license used by the user for their status updates.
+ $message = _m('My text and files are available under %s ' .
+ 'except this private data: password, ' .
+ 'email address, IM address, and phone number.');
+ $link = '<a href="' .
+ htmlspecialchars(common_config('license', 'url')) .
+ '">' .
+ htmlspecialchars(common_config('license', 'title')) .
+ '</a>';
+ $this->raw(sprintf(htmlspecialchars($message), $link));
+ $this->elementEnd('label');
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+
+ $this->elementStart('fieldset');
+ $this->hidden('token', common_session_token());
+ $this->element('legend', null,
+ // TRANS: Legend.
+ _m('Create new account'));
+ $this->element('p', null,
+ _m('Create a new user with this nickname.'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ // TRANS: Field label.
+ $this->input('newname', _m('New nickname'),
+ ($this->username) ? $this->username : '',
+ _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ // TRANS: Submit button.
+ $this->submit('create', _m('BUTTON','Create'));
+ $this->elementEnd('fieldset');
+
+ $this->elementStart('fieldset');
+ // TRANS: Legend.
+ $this->element('legend', null,
+ _m('Connect existing account'));
+ $this->element('p', null,
+ _m('If you already have an account, login with your username and password to connect it to your Facebook.'));
+ $this->elementStart('ul', 'form_data');
+ $this->elementStart('li');
+ // TRANS: Field label.
+ $this->input('nickname', _m('Existing nickname'));
+ $this->elementEnd('li');
+ $this->elementStart('li');
+ $this->password('password', _m('Password'));
+ $this->elementEnd('li');
+ $this->elementEnd('ul');
+ // TRANS: Submit button.
+ $this->submit('connect', _m('BUTTON','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')) {
+ // TRANS: Client error trying to register with registrations not allowed.
+ $this->clientError(_m('Registration not allowed.'));
+ return;
+ }
+
+ $invite = null;
+
+ if (common_config('site', 'inviteonly')) {
+ $code = $_SESSION['invitecode'];
+ if (empty($code)) {
+ // TRANS: Client error trying to register with registrations 'invite only'.
+ $this->clientError(_m('Registration not allowed.'));
+ return;
+ }
+
+ $invite = Invitation::staticGet($code);
+
+ if (empty($invite)) {
+ // TRANS: Client error trying to register with an invalid invitation code.
+ $this->clientError(_m('Not a valid invitation code.'));
+ return;
+ }
+ }
+
+ try {
+ $nickname = Nickname::normalize($this->trimmed('newname'));
+ } catch (NicknameException $e) {
+ $this->showForm($e->getMessage());
+ return;
+ }
+
+ if (!User::allowed_nickname($nickname)) {
+ $this->showForm(_m('Nickname not allowed.'));
+ return;
+ }
+
+ if (User::staticGet('nickname', $nickname)) {
+ $this->showForm(_m('Nickname already in use. Try another one.'));
+ return;
+ }
+
+ $args = array(
+ 'nickname' => $nickname,
+ 'fullname' => $this->fbuser['first_name']
+ . ' ' . $this->fbuser['last_name'],
+ 'homepage' => $this->fbuser['website'],
+ 'bio' => $this->fbuser['about'],
+ 'location' => $this->fbuser['location']['name']
+ );
+
+ // It's possible that the email address is already in our
+ // DB. It's a unique key, so we need to check
+ if ($this->isNewEmail($this->fbuser['email'])) {
+ $args['email'] = $this->fbuser['email'];
+ $args['email_confirmed'] = true;
+ }
+
+ if (!empty($invite)) {
+ $args['code'] = $invite->code;
+ }
+
+ $user = User::register($args);
+ $result = $this->flinkUser($user->id, $this->fbuid);
+
+ if (!$result) {
+ $this->serverError(_m('Error connecting user to Facebook.'));
+ return;
+ }
+
+ // Add a Foreign_user record
+ Facebookclient::addFacebookUser($this->fbuser);
+
+ $this->setAvatar($user);
+
+ common_set_user($user);
+ common_real_login(true);
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Registered new user %s (%d) from Facebook user %s, (fbuid %d)',
+ $user->nickname,
+ $user->id,
+ $this->fbuser['name'],
+ $this->fbuid
+ ),
+ __FILE__
+ );
+
+ $this->goHome($user->nickname);
+ }
+
+ /*
+ * Attempt to download the user's Facebook picture and create a
+ * StatusNet avatar for the new user.
+ */
+ function setAvatar($user)
+ {
+ $picUrl = sprintf(
+ 'http://graph.facebook.com/%s/picture?type=large',
+ $this->fbuid
+ );
+
+ // fetch the picture from Facebook
+ $client = new HTTPClient();
+
+ // fetch the actual picture
+ $response = $client->get($picUrl);
+
+ if ($response->isOk()) {
+
+ $finalUrl = $client->getUrl();
+
+ // Make sure the filename is unique becuase it's possible for a user
+ // to deauthorize our app, and then come back in as a new user but
+ // have the same Facebook picture (avatar URLs have a unique index
+ // and their URLs are based on the filenames).
+ $filename = 'facebook-' . common_good_rand(4) . '-'
+ . substr(strrchr($finalUrl, '/'), 1);
+
+ $ok = file_put_contents(
+ Avatar::path($filename),
+ $response->getBody()
+ );
+
+ if (!$ok) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Couldn\'t save Facebook avatar %s',
+ $tmp
+ ),
+ __FILE__
+ );
+
+ } else {
+
+ // save it as an avatar
+ $profile = $user->getProfile();
+
+ if ($profile->setOriginal($filename)) {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Saved avatar for %s (%d) from Facebook picture for '
+ . '%s (fbuid %d), filename = %s',
+ $user->nickname,
+ $user->id,
+ $this->fbuser['name'],
+ $this->fbuid,
+ $filename
+ ),
+ __FILE__
+ );
+ }
+ }
+ }
+ }
+
+ function connectNewUser()
+ {
+ $nickname = $this->trimmed('nickname');
+ $password = $this->trimmed('password');
+
+ if (!common_check_user($nickname, $password)) {
+ $this->showForm(_m('Invalid username or password.'));
+ return;
+ }
+
+ $user = User::staticGet('nickname', $nickname);
+
+ if (!empty($user)) {
+ common_debug(
+ sprintf(
+ 'Found a legit user to connect to Facebook: %s (%d)',
+ $user->nickname,
+ $user->id
+ ),
+ __FILE__
+ );
+ }
+
+ $this->tryLinkUser($user);
+
+ common_set_user($user);
+ common_real_login(true);
+
+ $this->goHome($user->nickname);
+ }
+
+ function connectUser()
+ {
+ $user = common_current_user();
+ $this->tryLinkUser($user);
+ common_redirect(common_local_url('facebookfinishlogin'), 303);
+ }
+
+ function tryLinkUser($user)
+ {
+ $result = $this->flinkUser($user->id, $this->fbuid);
+
+ if (empty($result)) {
+ $this->serverError(_m('Error connecting user to Facebook.'));
+ return;
+ }
+
+ common_debug(
+ sprintf(
+ 'Connected Facebook user %s (fbuid %d) to local user %s (%d)',
+ $this->fbuser['name'],
+ $this->fbuid,
+ $user->nickname,
+ $user->id
+ ),
+ __FILE__
+ );
+ }
+
+ function tryLogin()
+ {
+ common_debug(
+ sprintf(
+ 'Trying login for Facebook user %s',
+ $this->fbuid
+ ),
+ __FILE__
+ );
+
+ $flink = Foreign_link::getByForeignID($this->fbuid, FACEBOOK_SERVICE);
+
+ if (!empty($flink)) {
+ $user = $flink->getUser();
+
+ if (!empty($user)) {
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Logged in Facebook user %s as user %d (%s)',
+ $this->fbuid,
+ $user->nickname,
+ $user->id
+ ),
+ __FILE__
+ );
+
+ common_set_user($user);
+ common_real_login(true);
+ $this->goHome($user->nickname);
+ }
+
+ } else {
+
+ common_debug(
+ sprintf(
+ 'No flink found for fbuid: %s - new user',
+ $this->fbuid
+ ),
+ __FILE__
+ );
+
+ $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 flinkUser($user_id, $fbuid)
+ {
+ $flink = new Foreign_link();
+ $flink->user_id = $user_id;
+ $flink->foreign_id = $fbuid;
+ $flink->service = FACEBOOK_SERVICE;
+
+ // Pull the access token from the Facebook cookies
+ $flink->credentials = $this->facebook->getAccessToken();
+
+ $flink->created = common_sql_now();
+
+ $flink_id = $flink->insert();
+
+ return $flink_id;
+ }
+
+ function bestNewNickname()
+ {
+ if (!empty($this->fbuser['name'])) {
+ $nickname = $this->nicknamize($this->fbuser['name']);
+ if ($this->isNewNickname($nickname)) {
+ return $nickname;
+ }
+ }
+
+ // Try the full name
+
+ $fullname = trim($this->fbuser['first_name'] .
+ ' ' . $this->fbuser['last_name']);
+
+ if (!empty($fullname)) {
+ $fullname = $this->nicknamize($fullname);
+ if ($this->isNewNickname($fullname)) {
+ return $fullname;
+ }
+ }
+
+ return null;
+ }
+
+ /**
+ * Given a string, try to make it work as a nickname
+ */
+ function nicknamize($str)
+ {
+ $str = preg_replace('/\W/', '', $str);
+ return strtolower($str);
+ }
+
+ /*
+ * Is the desired nickname already taken?
+ *
+ * @return boolean result
+ */
+ function isNewNickname($str)
+ {
+ if (!Nickname::isValid($str)) {
+ return false;
+ }
+
+ if (!User::allowed_nickname($str)) {
+ return false;
+ }
+
+ if (User::staticGet('nickname', $str)) {
+ return false;
+ }
+
+ return true;
+ }
+
+ /*
+ * Do we already have a user record with this email?
+ * (emails have to be unique but they can change)
+ *
+ * @param string $email the email address to check
+ *
+ * @return boolean result
+ */
+ function isNewEmail($email)
+ {
+ // we shouldn't have to validate the format
+ $result = User::staticGet('email', $email);
+
+ if (empty($result)) {
+ common_debug("XXXXXXXXXXXXXXXXXX We've never seen this email before!!!");
+ return true;
+ }
+ common_debug("XXXXXXXXXXXXXXXXXX dupe email address!!!!");
+
+ return false;
+ }
+
+}
diff --git a/plugins/FacebookBridge/actions/facebooklogin.php b/plugins/FacebookBridge/actions/facebooklogin.php
new file mode 100644
index 000000000..f8a45c41b
--- /dev/null
+++ b/plugins/FacebookBridge/actions/facebooklogin.php
@@ -0,0 +1,123 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * An action for logging in with Facebook
+ *
+ * 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 Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@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 FacebookloginAction extends Action
+{
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if (common_is_real_login()) {
+ $this->clientError(_m('Already logged in.'));
+ } else {
+ $this->showPage();
+ }
+ }
+
+ function getInstructions()
+ {
+ // TRANS: Instructions.
+ return _m('Login with your Facebook Account');
+ }
+
+ function showPageNotice()
+ {
+ $instr = $this->getInstructions();
+ $output = common_markup_to_html($instr);
+ $this->elementStart('div', 'instructions');
+ $this->raw($output);
+ $this->elementEnd('div');
+ }
+
+ function title()
+ {
+ // TRANS: Page title.
+ return _m('Login with Facebook');
+ }
+
+ function showContent() {
+
+ $this->elementStart('fieldset');
+
+ $facebook = Facebookclient::getFacebook();
+
+ // Degrade to plain link if JavaScript is not available
+ $this->elementStart(
+ 'a',
+ array(
+ 'href' => $facebook->getLoginUrl(
+ array(
+ 'next' => common_local_url('facebookfinishlogin'),
+ 'cancel' => common_local_url('facebooklogin'),
+ 'req_perms' => 'read_stream,publish_stream,offline_access,user_status,user_location,user_website,email'
+ )
+ ),
+ 'id' => 'facebook_button'
+ )
+ );
+
+ $attrs = array(
+ 'src' => common_path(
+ 'plugins/FacebookBridge/images/login-button.png',
+ true
+ ),
+ 'alt' => 'Login with Facebook',
+ 'title' => 'Login with Facebook'
+ );
+
+ $this->element('img', $attrs);
+
+ $this->elementEnd('a');
+
+ /*
+ $this->element('div', array('id' => 'fb-root'));
+ $this->script(
+ sprintf(
+ 'http://connect.facebook.net/en_US/all.js#appId=%s&xfbml=1',
+ common_config('facebook', 'appid')
+ )
+ );
+ $this->element('fb:facepile', array('max-rows' => '2', 'width' =>'300'));
+ */
+ $this->elementEnd('fieldset');
+ }
+
+ function showLocalNav()
+ {
+ $nav = new LoginGroupNav($this);
+ $nav->show();
+ }
+}
+
diff --git a/plugins/FacebookBridge/actions/facebooksettings.php b/plugins/FacebookBridge/actions/facebooksettings.php
new file mode 100644
index 000000000..6576e2041
--- /dev/null
+++ b/plugins/FacebookBridge/actions/facebooksettings.php
@@ -0,0 +1,266 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Edit user settings for Facebook
+ *
+ * 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);
+}
+
+/**
+ * Edit user settings for Facebook
+ *
+ * @category Settings
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ *
+ * @see SettingsAction
+ */
+class FacebooksettingsAction extends ConnectSettingsAction {
+ private $facebook; // Facebook PHP-SDK client obj
+ private $flink;
+ private $user;
+
+ /**
+ * For initializing members of the class.
+ *
+ * @param array $argarray misc. arguments
+ *
+ * @return boolean true
+ */
+ function prepare($args) {
+ parent::prepare($args);
+
+ $this->facebook = new Facebook(
+ array(
+ 'appId' => common_config('facebook', 'appid'),
+ 'secret' => common_config('facebook', 'secret'),
+ 'cookie' => true,
+ )
+ );
+
+ $this->user = common_current_user();
+
+ $this->flink = Foreign_link::getByUserID(
+ $this->user->id,
+ FACEBOOK_SERVICE
+ );
+
+ return true;
+ }
+
+ /*
+ * Check the sessions token and dispatch
+ */
+ function handlePost($args) {
+ // 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;
+ }
+
+ if ($this->arg('save')) {
+ $this->saveSettings();
+ } else if ($this->arg('disconnect')) {
+ $this->disconnect();
+ }
+ }
+
+ /**
+ * Returns the page title
+ *
+ * @return string page title
+ */
+ function title() {
+ // TRANS: Page title for Facebook settings.
+ return _m('Facebook settings');
+ }
+
+ /**
+ * Instructions for use
+ *
+ * @return instructions for use
+ */
+ function getInstructions() {
+ return _('Facebook settings');
+ }
+
+ /*
+ * Show the settings form if he/she has a link to Facebook
+ *
+ * @return void
+ */
+ function showContent() {
+ if (!empty($this->flink)) {
+
+ $this->elementStart(
+ 'form',
+ array(
+ 'method' => 'post',
+ 'id' => 'form_settings_facebook',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('facebooksettings')
+ )
+ );
+
+ $this->hidden('token', common_session_token());
+
+ $this->element('p', 'form_note', _m('Connected Facebook user'));
+
+ $this->elementStart('p', array('class' => 'facebook-user-display'));
+
+ $this->element(
+ 'fb:profile-pic',
+ array(
+ 'uid' => $this->flink->foreign_id,
+ 'size' => 'small',
+ 'linked' => 'true',
+ 'facebook-logo' => 'true'
+ )
+ );
+
+ $this->element(
+ 'fb:name',
+ array('uid' => $this->flink->foreign_id, 'useyou' => 'false')
+ );
+
+ $this->elementEnd('p');
+
+ $this->elementStart('ul', 'form_data');
+
+ $this->elementStart('li');
+
+ $this->checkbox(
+ 'noticesync',
+ _m('Publish my notices to Facebook.'),
+ ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true
+ );
+
+ $this->elementEnd('li');
+
+ $this->elementStart('li');
+
+ $this->checkbox(
+ 'replysync',
+ _m('Send "@" replies to Facebook.'),
+ ($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true
+ );
+
+ $this->elementEnd('li');
+
+ $this->elementStart('li');
+
+ // TRANS: Submit button to save synchronisation settings.
+ $this->submit('save', _m('BUTTON', 'Save'));
+
+ $this->elementEnd('li');
+
+ $this->elementEnd('ul');
+
+ $this->elementStart('fieldset');
+
+ // TRANS: Legend.
+ $this->element('legend', null, _m('Disconnect my account from Facebook'));
+
+ if (empty($this->user->password)) {
+ $this->elementStart('p', array('class' => 'form_guide'));
+
+ $msg = sprintf(
+ _m(
+ 'Disconnecting your Faceboook would make it impossible to '
+ . 'log in! Please [set a password](%s) first.'
+ ),
+ common_local_url('passwordsettings')
+ );
+
+ $this->raw(common_markup_to_html($msg));
+ $this->elementEnd('p');
+ } else {
+ // @todo FIXME: i18n: This message is not being used.
+ $msg = sprintf(
+ // TRANS: Message displayed when initiating disconnect of a StatusNet user
+ // TRANS: from a Facebook account. %1$s is the StatusNet site name.
+ _m(
+ 'Keep your %1$s account but disconnect from Facebook. ' .
+ 'You\'ll use your %1$s password to log in.'
+ ),
+ common_config('site', 'name')
+ );
+
+ // TRANS: Submit button.
+ $this->submit('disconnect', _m('BUTTON', 'Disconnect'));
+ }
+
+ $this->elementEnd('fieldset');
+
+ $this->elementEnd('form');
+ }
+ }
+
+ /*
+ * Save the user's Facebook settings
+ *
+ * @return void
+ */
+ function saveSettings() {
+ $noticesync = $this->boolean('noticesync');
+ $replysync = $this->boolean('replysync');
+
+ $original = clone($this->flink);
+ $this->flink->set_flags($noticesync, false, $replysync, false);
+ $result = $this->flink->update($original);
+
+ if ($result === false) {
+ $this->showForm(_m('There was a problem saving your sync preferences.'));
+ } else {
+ // TRANS: Confirmation that synchronisation settings have been saved into the system.
+ $this->showForm(_m('Sync preferences saved.'), true);
+ }
+ }
+
+ /*
+ * Disconnect the user's Facebook account - deletes the Foreign_link
+ * and shows the user a success message if all goes well.
+ */
+ function disconnect() {
+ $result = $this->flink->delete();
+ $this->flink = null;
+
+ if ($result === false) {
+ common_log_db_error($user, 'DELETE', __FILE__);
+ $this->serverError(_m('Couldn\'t delete link to Facebook.'));
+ return;
+ }
+
+ $this->showForm(_m('You have disconnected from Facebook.'), true);
+ }
+}
diff --git a/plugins/FacebookBridge/classes/Notice_to_item.php b/plugins/FacebookBridge/classes/Notice_to_item.php
new file mode 100644
index 000000000..a6a803034
--- /dev/null
+++ b/plugins/FacebookBridge/classes/Notice_to_item.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * Data class for storing notice-to-Facebook-item mappings
+ *
+ * PHP version 5
+ *
+ * @category Data
+ * @package StatusNet
+ * @author Zach Copley <zach@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 mapping notices to Facebook stream items
+ *
+ * Note that notice_id is unique only within a single database; if you
+ * want to share this data for some reason, get the notice's URI and use
+ * that instead, since it's universally unique.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * @see DB_DataObject
+ */
+
+class Notice_to_item extends Memcached_DataObject
+{
+ public $__table = 'notice_to_item'; // table name
+ public $notice_id; // int(4) primary_key not_null
+ public $item_id; // varchar(255) not null
+ public $created; // datetime
+
+ /**
+ * Get an instance by key
+ *
+ * This is a utility method to get a single instance with a given key value.
+ *
+ * @param string $k Key to use to lookup
+ * @param mixed $v Value to lookup
+ *
+ * @return Notice_to_item object found, or null for no hits
+ *
+ */
+
+ function staticGet($k, $v=null)
+ {
+ return Memcached_DataObject::staticGet('Notice_to_item', $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,
+ 'item_id' => DB_DATAOBJECT_STR + DB_DATAOBJECT_NOTNULL,
+ 'created' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME + DB_DATAOBJECT_NOTNULL
+ );
+ }
+
+ static function schemaDef()
+ {
+ return array(
+ new ColumnDef('notice_id', 'integer', null, false, 'PRI'),
+ new ColumnDef('item_id', 'varchar', 255, false, 'UNI'),
+ new ColumnDef('created', 'datetime', null, false)
+ );
+ }
+
+ /**
+ * return key definitions for DB_DataObject
+ *
+ * DB_DataObject needs to know about keys that the table has, since it
+ * won't appear in StatusNet's own keys list. In most cases, this will
+ * simply reference your keyTypes() function.
+ *
+ * @return array list of key field names
+ */
+
+ 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. This key information is used to store and clear
+ * cached data, so be sure to list any key that will be used for static
+ * lookups.
+ *
+ * @return array associative array of key definitions, field name to type:
+ * 'K' for primary key: for compound keys, add an entry for each component;
+ * 'U' for unique keys: compound keys are not well supported here.
+ */
+
+ function keyTypes()
+ {
+ return array('notice_id' => 'K', 'item_id' => 'U');
+ }
+
+ /**
+ * 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);
+ }
+
+ /**
+ * Save a mapping between a notice and a Facebook item
+ *
+ * @param integer $notice_id ID of the notice in StatusNet
+ * @param integer $item_id ID of the stream item on Facebook
+ *
+ * @return Notice_to_item new object for this value
+ */
+
+ static function saveNew($notice_id, $item_id)
+ {
+ $n2i = Notice_to_item::staticGet('notice_id', $notice_id);
+
+ if (!empty($n2i)) {
+ return $n2i;
+ }
+
+ $n2i = Notice_to_item::staticGet('item_id', $item_id);
+
+ if (!empty($n2i)) {
+ return $n2i;
+ }
+
+ common_debug(
+ "Mapping notice {$notice_id} to Facebook item {$item_id}",
+ __FILE__
+ );
+
+ $n2i = new Notice_to_item();
+
+ $n2i->notice_id = $notice_id;
+ $n2i->item_id = $item_id;
+ $n2i->created = common_sql_now();
+
+ $n2i->insert();
+
+ return $n2i;
+ }
+}
diff --git a/plugins/FacebookBridge/extlib/facebook.php b/plugins/FacebookBridge/extlib/facebook.php
new file mode 100644
index 000000000..d2d2e866b
--- /dev/null
+++ b/plugins/FacebookBridge/extlib/facebook.php
@@ -0,0 +1,963 @@
+<?php
+
+if (!function_exists('curl_init')) {
+ throw new Exception('Facebook needs the CURL PHP extension.');
+}
+if (!function_exists('json_decode')) {
+ throw new Exception('Facebook needs the JSON PHP extension.');
+}
+
+/**
+ * Thrown when an API call returns an exception.
+ *
+ * @author Naitik Shah <naitik@facebook.com>
+ */
+class FacebookApiException extends Exception
+{
+ /**
+ * The result from the API server that represents the exception information.
+ */
+ protected $result;
+
+ /**
+ * Make a new API Exception with the given result.
+ *
+ * @param Array $result the result from the API server
+ */
+ public function __construct($result) {
+ $this->result = $result;
+
+ $code = isset($result['error_code']) ? $result['error_code'] : 0;
+
+ if (isset($result['error_description'])) {
+ // OAuth 2.0 Draft 10 style
+ $msg = $result['error_description'];
+ } else if (isset($result['error']) && is_array($result['error'])) {
+ // OAuth 2.0 Draft 00 style
+ $msg = $result['error']['message'];
+ } else if (isset($result['error_msg'])) {
+ // Rest server style
+ $msg = $result['error_msg'];
+ } else {
+ $msg = 'Unknown Error. Check getResult()';
+ }
+
+ parent::__construct($msg, $code);
+ }
+
+ /**
+ * Return the associated result object returned by the API server.
+ *
+ * @returns Array the result from the API server
+ */
+ public function getResult() {
+ return $this->result;
+ }
+
+ /**
+ * Returns the associated type for the error. This will default to
+ * 'Exception' when a type is not available.
+ *
+ * @return String
+ */
+ public function getType() {
+ if (isset($this->result['error'])) {
+ $error = $this->result['error'];
+ if (is_string($error)) {
+ // OAuth 2.0 Draft 10 style
+ return $error;
+ } else if (is_array($error)) {
+ // OAuth 2.0 Draft 00 style
+ if (isset($error['type'])) {
+ return $error['type'];
+ }
+ }
+ }
+ return 'Exception';
+ }
+
+ /**
+ * To make debugging easier.
+ *
+ * @returns String the string representation of the error
+ */
+ public function __toString() {
+ $str = $this->getType() . ': ';
+ if ($this->code != 0) {
+ $str .= $this->code . ': ';
+ }
+ return $str . $this->message;
+ }
+}
+
+/**
+ * Provides access to the Facebook Platform.
+ *
+ * @author Naitik Shah <naitik@facebook.com>
+ */
+class Facebook
+{
+ /**
+ * Version.
+ */
+ const VERSION = '2.1.2';
+
+ /**
+ * Default options for curl.
+ */
+ public static $CURL_OPTS = array(
+ CURLOPT_CONNECTTIMEOUT => 10,
+ CURLOPT_RETURNTRANSFER => true,
+ CURLOPT_TIMEOUT => 60,
+ CURLOPT_USERAGENT => 'facebook-php-2.0',
+ );
+
+ /**
+ * List of query parameters that get automatically dropped when rebuilding
+ * the current URL.
+ */
+ protected static $DROP_QUERY_PARAMS = array(
+ 'session',
+ 'signed_request',
+ );
+
+ /**
+ * Maps aliases to Facebook domains.
+ */
+ public static $DOMAIN_MAP = array(
+ 'api' => 'https://api.facebook.com/',
+ 'api_read' => 'https://api-read.facebook.com/',
+ 'graph' => 'https://graph.facebook.com/',
+ 'www' => 'https://www.facebook.com/',
+ );
+
+ /**
+ * The Application ID.
+ */
+ protected $appId;
+
+ /**
+ * The Application API Secret.
+ */
+ protected $apiSecret;
+
+ /**
+ * The active user session, if one is available.
+ */
+ protected $session;
+
+ /**
+ * The data from the signed_request token.
+ */
+ protected $signedRequest;
+
+ /**
+ * Indicates that we already loaded the session as best as we could.
+ */
+ protected $sessionLoaded = false;
+
+ /**
+ * Indicates if Cookie support should be enabled.
+ */
+ protected $cookieSupport = false;
+
+ /**
+ * Base domain for the Cookie.
+ */
+ protected $baseDomain = '';
+
+ /**
+ * Indicates if the CURL based @ syntax for file uploads is enabled.
+ */
+ protected $fileUploadSupport = false;
+
+ /**
+ * Initialize a Facebook Application.
+ *
+ * The configuration:
+ * - appId: the application ID
+ * - secret: the application secret
+ * - cookie: (optional) boolean true to enable cookie support
+ * - domain: (optional) domain for the cookie
+ * - fileUpload: (optional) boolean indicating if file uploads are enabled
+ *
+ * @param Array $config the application configuration
+ */
+ public function __construct($config) {
+ $this->setAppId($config['appId']);
+ $this->setApiSecret($config['secret']);
+ if (isset($config['cookie'])) {
+ $this->setCookieSupport($config['cookie']);
+ }
+ if (isset($config['domain'])) {
+ $this->setBaseDomain($config['domain']);
+ }
+ if (isset($config['fileUpload'])) {
+ $this->setFileUploadSupport($config['fileUpload']);
+ }
+ }
+
+ /**
+ * Set the Application ID.
+ *
+ * @param String $appId the Application ID
+ */
+ public function setAppId($appId) {
+ $this->appId = $appId;
+ return $this;
+ }
+
+ /**
+ * Get the Application ID.
+ *
+ * @return String the Application ID
+ */
+ public function getAppId() {
+ return $this->appId;
+ }
+
+ /**
+ * Set the API Secret.
+ *
+ * @param String $appId the API Secret
+ */
+ public function setApiSecret($apiSecret) {
+ $this->apiSecret = $apiSecret;
+ return $this;
+ }
+
+ /**
+ * Get the API Secret.
+ *
+ * @return String the API Secret
+ */
+ public function getApiSecret() {
+ return $this->apiSecret;
+ }
+
+ /**
+ * Set the Cookie Support status.
+ *
+ * @param Boolean $cookieSupport the Cookie Support status
+ */
+ public function setCookieSupport($cookieSupport) {
+ $this->cookieSupport = $cookieSupport;
+ return $this;
+ }
+
+ /**
+ * Get the Cookie Support status.
+ *
+ * @return Boolean the Cookie Support status
+ */
+ public function useCookieSupport() {
+ return $this->cookieSupport;
+ }
+
+ /**
+ * Set the base domain for the Cookie.
+ *
+ * @param String $domain the base domain
+ */
+ public function setBaseDomain($domain) {
+ $this->baseDomain = $domain;
+ return $this;
+ }
+
+ /**
+ * Get the base domain for the Cookie.
+ *
+ * @return String the base domain
+ */
+ public function getBaseDomain() {
+ return $this->baseDomain;
+ }
+
+ /**
+ * Set the file upload support status.
+ *
+ * @param String $domain the base domain
+ */
+ public function setFileUploadSupport($fileUploadSupport) {
+ $this->fileUploadSupport = $fileUploadSupport;
+ return $this;
+ }
+
+ /**
+ * Get the file upload support status.
+ *
+ * @return String the base domain
+ */
+ public function useFileUploadSupport() {
+ return $this->fileUploadSupport;
+ }
+
+ /**
+ * Get the data from a signed_request token
+ *
+ * @return String the base domain
+ */
+ public function getSignedRequest() {
+ if (!$this->signedRequest) {
+ if (isset($_REQUEST['signed_request'])) {
+ $this->signedRequest = $this->parseSignedRequest(
+ $_REQUEST['signed_request']);
+ }
+ }
+ return $this->signedRequest;
+ }
+
+ /**
+ * Set the Session.
+ *
+ * @param Array $session the session
+ * @param Boolean $write_cookie indicate if a cookie should be written. this
+ * value is ignored if cookie support has been disabled.
+ */
+ public function setSession($session=null, $write_cookie=true) {
+ $session = $this->validateSessionObject($session);
+ $this->sessionLoaded = true;
+ $this->session = $session;
+ if ($write_cookie) {
+ $this->setCookieFromSession($session);
+ }
+ return $this;
+ }
+
+ /**
+ * Get the session object. This will automatically look for a signed session
+ * sent via the signed_request, Cookie or Query Parameters if needed.
+ *
+ * @return Array the session
+ */
+ public function getSession() {
+ if (!$this->sessionLoaded) {
+ $session = null;
+ $write_cookie = true;
+
+ // try loading session from signed_request in $_REQUEST
+ $signedRequest = $this->getSignedRequest();
+ if ($signedRequest) {
+ // sig is good, use the signedRequest
+ $session = $this->createSessionFromSignedRequest($signedRequest);
+ }
+
+ // try loading session from $_REQUEST
+ if (!$session && isset($_REQUEST['session'])) {
+ $session = json_decode(
+ get_magic_quotes_gpc()
+ ? stripslashes($_REQUEST['session'])
+ : $_REQUEST['session'],
+ true
+ );
+ $session = $this->validateSessionObject($session);
+ }
+
+ // try loading session from cookie if necessary
+ if (!$session && $this->useCookieSupport()) {
+ $cookieName = $this->getSessionCookieName();
+ if (isset($_COOKIE[$cookieName])) {
+ $session = array();
+ parse_str(trim(
+ get_magic_quotes_gpc()
+ ? stripslashes($_COOKIE[$cookieName])
+ : $_COOKIE[$cookieName],
+ '"'
+ ), $session);
+ $session = $this->validateSessionObject($session);
+ // write only if we need to delete a invalid session cookie
+ $write_cookie = empty($session);
+ }
+ }
+
+ $this->setSession($session, $write_cookie);
+ }
+
+ return $this->session;
+ }
+
+ /**
+ * Get the UID from the session.
+ *
+ * @return String the UID if available
+ */
+ public function getUser() {
+ $session = $this->getSession();
+ return $session ? $session['uid'] : null;
+ }
+
+ /**
+ * Gets a OAuth access token.
+ *
+ * @return String the access token
+ */
+ public function getAccessToken() {
+ $session = $this->getSession();
+ // either user session signed, or app signed
+ if ($session) {
+ return $session['access_token'];
+ } else {
+ return $this->getAppId() .'|'. $this->getApiSecret();
+ }
+ }
+
+ /**
+ * Get a Login URL for use with redirects. By default, full page redirect is
+ * assumed. If you are using the generated URL with a window.open() call in
+ * JavaScript, you can pass in display=popup as part of the $params.
+ *
+ * The parameters:
+ * - next: the url to go to after a successful login
+ * - cancel_url: the url to go to after the user cancels
+ * - req_perms: comma separated list of requested extended perms
+ * - display: can be "page" (default, full page) or "popup"
+ *
+ * @param Array $params provide custom parameters
+ * @return String the URL for the login flow
+ */
+ public function getLoginUrl($params=array()) {
+ $currentUrl = $this->getCurrentUrl();
+ return $this->getUrl(
+ 'www',
+ 'login.php',
+ array_merge(array(
+ 'api_key' => $this->getAppId(),
+ 'cancel_url' => $currentUrl,
+ 'display' => 'page',
+ 'fbconnect' => 1,
+ 'next' => $currentUrl,
+ 'return_session' => 1,
+ 'session_version' => 3,
+ 'v' => '1.0',
+ ), $params)
+ );
+ }
+
+ /**
+ * Get a Logout URL suitable for use with redirects.
+ *
+ * The parameters:
+ * - next: the url to go to after a successful logout
+ *
+ * @param Array $params provide custom parameters
+ * @return String the URL for the logout flow
+ */
+ public function getLogoutUrl($params=array()) {
+ return $this->getUrl(
+ 'www',
+ 'logout.php',
+ array_merge(array(
+ 'next' => $this->getCurrentUrl(),
+ 'access_token' => $this->getAccessToken(),
+ ), $params)
+ );
+ }
+
+ /**
+ * Get a login status URL to fetch the status from facebook.
+ *
+ * The parameters:
+ * - ok_session: the URL to go to if a session is found
+ * - no_session: the URL to go to if the user is not connected
+ * - no_user: the URL to go to if the user is not signed into facebook
+ *
+ * @param Array $params provide custom parameters
+ * @return String the URL for the logout flow
+ */
+ public function getLoginStatusUrl($params=array()) {
+ return $this->getUrl(
+ 'www',
+ 'extern/login_status.php',
+ array_merge(array(
+ 'api_key' => $this->getAppId(),
+ 'no_session' => $this->getCurrentUrl(),
+ 'no_user' => $this->getCurrentUrl(),
+ 'ok_session' => $this->getCurrentUrl(),
+ 'session_version' => 3,
+ ), $params)
+ );
+ }
+
+ /**
+ * Make an API call.
+ *
+ * @param Array $params the API call parameters
+ * @return the decoded response
+ */
+ public function api(/* polymorphic */) {
+ $args = func_get_args();
+ if (is_array($args[0])) {
+ return $this->_restserver($args[0]);
+ } else {
+ return call_user_func_array(array($this, '_graph'), $args);
+ }
+ }
+
+ /**
+ * Invoke the old restserver.php endpoint.
+ *
+ * @param Array $params method call object
+ * @return the decoded response object
+ * @throws FacebookApiException
+ */
+ protected function _restserver($params) {
+ // generic application level parameters
+ $params['api_key'] = $this->getAppId();
+ $params['format'] = 'json-strings';
+
+ $result = json_decode($this->_oauthRequest(
+ $this->getApiUrl($params['method']),
+ $params
+ ), true);
+
+ // results are returned, errors are thrown
+ if (is_array($result) && isset($result['error_code'])) {
+ throw new FacebookApiException($result);
+ }
+ return $result;
+ }
+
+ /**
+ * Invoke the Graph API.
+ *
+ * @param String $path the path (required)
+ * @param String $method the http method (default 'GET')
+ * @param Array $params the query/post data
+ * @return the decoded response object
+ * @throws FacebookApiException
+ */
+ protected function _graph($path, $method='GET', $params=array()) {
+ if (is_array($method) && empty($params)) {
+ $params = $method;
+ $method = 'GET';
+ }
+ $params['method'] = $method; // method override as we always do a POST
+
+ $result = json_decode($this->_oauthRequest(
+ $this->getUrl('graph', $path),
+ $params
+ ), true);
+
+ // results are returned, errors are thrown
+ if (is_array($result) && isset($result['error'])) {
+ $e = new FacebookApiException($result);
+ switch ($e->getType()) {
+ // OAuth 2.0 Draft 00 style
+ case 'OAuthException':
+ // OAuth 2.0 Draft 10 style
+ case 'invalid_token':
+ $this->setSession(null);
+ }
+ throw $e;
+ }
+ return $result;
+ }
+
+ /**
+ * Make a OAuth Request
+ *
+ * @param String $path the path (required)
+ * @param Array $params the query/post data
+ * @return the decoded response object
+ * @throws FacebookApiException
+ */
+ protected function _oauthRequest($url, $params) {
+ if (!isset($params['access_token'])) {
+ $params['access_token'] = $this->getAccessToken();
+ }
+
+ // json_encode all params values that are not strings
+ foreach ($params as $key => $value) {
+ if (!is_string($value)) {
+ $params[$key] = json_encode($value);
+ }
+ }
+ return $this->makeRequest($url, $params);
+ }
+
+ /**
+ * Makes an HTTP request. This method can be overriden by subclasses if
+ * developers want to do fancier things or use something other than curl to
+ * make the request.
+ *
+ * @param String $url the URL to make the request to
+ * @param Array $params the parameters to use for the POST body
+ * @param CurlHandler $ch optional initialized curl handle
+ * @return String the response text
+ */
+ protected function makeRequest($url, $params, $ch=null) {
+ if (!$ch) {
+ $ch = curl_init();
+ }
+
+ $opts = self::$CURL_OPTS;
+ if ($this->useFileUploadSupport()) {
+ $opts[CURLOPT_POSTFIELDS] = $params;
+ } else {
+ $opts[CURLOPT_POSTFIELDS] = http_build_query($params, null, '&');
+ }
+ $opts[CURLOPT_URL] = $url;
+
+ // disable the 'Expect: 100-continue' behaviour. This causes CURL to wait
+ // for 2 seconds if the server does not support this header.
+ if (isset($opts[CURLOPT_HTTPHEADER])) {
+ $existing_headers = $opts[CURLOPT_HTTPHEADER];
+ $existing_headers[] = 'Expect:';
+ $opts[CURLOPT_HTTPHEADER] = $existing_headers;
+ } else {
+ $opts[CURLOPT_HTTPHEADER] = array('Expect:');
+ }
+
+ curl_setopt_array($ch, $opts);
+ $result = curl_exec($ch);
+
+ if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT
+ self::errorLog('Invalid or no certificate authority found, using bundled information');
+ curl_setopt($ch, CURLOPT_CAINFO,
+ dirname(__FILE__) . '/fb_ca_chain_bundle.crt');
+ $result = curl_exec($ch);
+ }
+
+ if ($result === false) {
+ $e = new FacebookApiException(array(
+ 'error_code' => curl_errno($ch),
+ 'error' => array(
+ 'message' => curl_error($ch),
+ 'type' => 'CurlException',
+ ),
+ ));
+ curl_close($ch);
+ throw $e;
+ }
+ curl_close($ch);
+ return $result;
+ }
+
+ /**
+ * The name of the Cookie that contains the session.
+ *
+ * @return String the cookie name
+ */
+ protected function getSessionCookieName() {
+ return 'fbs_' . $this->getAppId();
+ }
+
+ /**
+ * Set a JS Cookie based on the _passed in_ session. It does not use the
+ * currently stored session -- you need to explicitly pass it in.
+ *
+ * @param Array $session the session to use for setting the cookie
+ */
+ protected function setCookieFromSession($session=null) {
+ if (!$this->useCookieSupport()) {
+ return;
+ }
+
+ $cookieName = $this->getSessionCookieName();
+ $value = 'deleted';
+ $expires = time() - 3600;
+ $domain = $this->getBaseDomain();
+ if ($session) {
+ $value = '"' . http_build_query($session, null, '&') . '"';
+ if (isset($session['base_domain'])) {
+ $domain = $session['base_domain'];
+ }
+ $expires = $session['expires'];
+ }
+
+ // prepend dot if a domain is found
+ if ($domain) {
+ $domain = '.' . $domain;
+ }
+
+ // if an existing cookie is not set, we dont need to delete it
+ if ($value == 'deleted' && empty($_COOKIE[$cookieName])) {
+ return;
+ }
+
+ if (headers_sent()) {
+ self::errorLog('Could not set cookie. Headers already sent.');
+
+ // ignore for code coverage as we will never be able to setcookie in a CLI
+ // environment
+ // @codeCoverageIgnoreStart
+ } else {
+ setcookie($cookieName, $value, $expires, '/', $domain);
+ }
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Validates a session_version=3 style session object.
+ *
+ * @param Array $session the session object
+ * @return Array the session object if it validates, null otherwise
+ */
+ protected function validateSessionObject($session) {
+ // make sure some essential fields exist
+ if (is_array($session) &&
+ isset($session['uid']) &&
+ isset($session['access_token']) &&
+ isset($session['sig'])) {
+ // validate the signature
+ $session_without_sig = $session;
+ unset($session_without_sig['sig']);
+ $expected_sig = self::generateSignature(
+ $session_without_sig,
+ $this->getApiSecret()
+ );
+ if ($session['sig'] != $expected_sig) {
+ self::errorLog('Got invalid session signature in cookie.');
+ $session = null;
+ }
+ // check expiry time
+ } else {
+ $session = null;
+ }
+ return $session;
+ }
+
+ /**
+ * Returns something that looks like our JS session object from the
+ * signed token's data
+ *
+ * TODO: Nuke this once the login flow uses OAuth2
+ *
+ * @param Array the output of getSignedRequest
+ * @return Array Something that will work as a session
+ */
+ protected function createSessionFromSignedRequest($data) {
+ if (!isset($data['oauth_token'])) {
+ return null;
+ }
+
+ $session = array(
+ 'uid' => $data['user_id'],
+ 'access_token' => $data['oauth_token'],
+ 'expires' => $data['expires'],
+ );
+
+ // put a real sig, so that validateSignature works
+ $session['sig'] = self::generateSignature(
+ $session,
+ $this->getApiSecret()
+ );
+
+ return $session;
+ }
+
+ /**
+ * Parses a signed_request and validates the signature.
+ * Then saves it in $this->signed_data
+ *
+ * @param String A signed token
+ * @param Boolean Should we remove the parts of the payload that
+ * are used by the algorithm?
+ * @return Array the payload inside it or null if the sig is wrong
+ */
+ protected function parseSignedRequest($signed_request) {
+ list($encoded_sig, $payload) = explode('.', $signed_request, 2);
+
+ // decode the data
+ $sig = self::base64UrlDecode($encoded_sig);
+ $data = json_decode(self::base64UrlDecode($payload), true);
+
+ if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
+ self::errorLog('Unknown algorithm. Expected HMAC-SHA256');
+ return null;
+ }
+
+ // check sig
+ $expected_sig = hash_hmac('sha256', $payload,
+ $this->getApiSecret(), $raw = true);
+ if ($sig !== $expected_sig) {
+ self::errorLog('Bad Signed JSON signature!');
+ return null;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Build the URL for api given parameters.
+ *
+ * @param $method String the method name.
+ * @return String the URL for the given parameters
+ */
+ protected function getApiUrl($method) {
+ static $READ_ONLY_CALLS =
+ array('admin.getallocation' => 1,
+ 'admin.getappproperties' => 1,
+ 'admin.getbannedusers' => 1,
+ 'admin.getlivestreamvialink' => 1,
+ 'admin.getmetrics' => 1,
+ 'admin.getrestrictioninfo' => 1,
+ 'application.getpublicinfo' => 1,
+ 'auth.getapppublickey' => 1,
+ 'auth.getsession' => 1,
+ 'auth.getsignedpublicsessiondata' => 1,
+ 'comments.get' => 1,
+ 'connect.getunconnectedfriendscount' => 1,
+ 'dashboard.getactivity' => 1,
+ 'dashboard.getcount' => 1,
+ 'dashboard.getglobalnews' => 1,
+ 'dashboard.getnews' => 1,
+ 'dashboard.multigetcount' => 1,
+ 'dashboard.multigetnews' => 1,
+ 'data.getcookies' => 1,
+ 'events.get' => 1,
+ 'events.getmembers' => 1,
+ 'fbml.getcustomtags' => 1,
+ 'feed.getappfriendstories' => 1,
+ 'feed.getregisteredtemplatebundlebyid' => 1,
+ 'feed.getregisteredtemplatebundles' => 1,
+ 'fql.multiquery' => 1,
+ 'fql.query' => 1,
+ 'friends.arefriends' => 1,
+ 'friends.get' => 1,
+ 'friends.getappusers' => 1,
+ 'friends.getlists' => 1,
+ 'friends.getmutualfriends' => 1,
+ 'gifts.get' => 1,
+ 'groups.get' => 1,
+ 'groups.getmembers' => 1,
+ 'intl.gettranslations' => 1,
+ 'links.get' => 1,
+ 'notes.get' => 1,
+ 'notifications.get' => 1,
+ 'pages.getinfo' => 1,
+ 'pages.isadmin' => 1,
+ 'pages.isappadded' => 1,
+ 'pages.isfan' => 1,
+ 'permissions.checkavailableapiaccess' => 1,
+ 'permissions.checkgrantedapiaccess' => 1,
+ 'photos.get' => 1,
+ 'photos.getalbums' => 1,
+ 'photos.gettags' => 1,
+ 'profile.getinfo' => 1,
+ 'profile.getinfooptions' => 1,
+ 'stream.get' => 1,
+ 'stream.getcomments' => 1,
+ 'stream.getfilters' => 1,
+ 'users.getinfo' => 1,
+ 'users.getloggedinuser' => 1,
+ 'users.getstandardinfo' => 1,
+ 'users.hasapppermission' => 1,
+ 'users.isappuser' => 1,
+ 'users.isverified' => 1,
+ 'video.getuploadlimits' => 1);
+ $name = 'api';
+ if (isset($READ_ONLY_CALLS[strtolower($method)])) {
+ $name = 'api_read';
+ }
+ return self::getUrl($name, 'restserver.php');
+ }
+
+ /**
+ * Build the URL for given domain alias, path and parameters.
+ *
+ * @param $name String the name of the domain
+ * @param $path String optional path (without a leading slash)
+ * @param $params Array optional query parameters
+ * @return String the URL for the given parameters
+ */
+ protected function getUrl($name, $path='', $params=array()) {
+ $url = self::$DOMAIN_MAP[$name];
+ if ($path) {
+ if ($path[0] === '/') {
+ $path = substr($path, 1);
+ }
+ $url .= $path;
+ }
+ if ($params) {
+ $url .= '?' . http_build_query($params, null, '&');
+ }
+ return $url;
+ }
+
+ /**
+ * Returns the Current URL, stripping it of known FB parameters that should
+ * not persist.
+ *
+ * @return String the current URL
+ */
+ protected function getCurrentUrl() {
+ $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on'
+ ? 'https://'
+ : 'http://';
+ $currentUrl = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ $parts = parse_url($currentUrl);
+
+ // drop known fb params
+ $query = '';
+ if (!empty($parts['query'])) {
+ $params = array();
+ parse_str($parts['query'], $params);
+ foreach(self::$DROP_QUERY_PARAMS as $key) {
+ unset($params[$key]);
+ }
+ if (!empty($params)) {
+ $query = '?' . http_build_query($params, null, '&');
+ }
+ }
+
+ // use port if non default
+ $port =
+ isset($parts['port']) &&
+ (($protocol === 'http://' && $parts['port'] !== 80) ||
+ ($protocol === 'https://' && $parts['port'] !== 443))
+ ? ':' . $parts['port'] : '';
+
+ // rebuild
+ return $protocol . $parts['host'] . $port . $parts['path'] . $query;
+ }
+
+ /**
+ * Generate a signature for the given params and secret.
+ *
+ * @param Array $params the parameters to sign
+ * @param String $secret the secret to sign with
+ * @return String the generated signature
+ */
+ protected static function generateSignature($params, $secret) {
+ // work with sorted data
+ ksort($params);
+
+ // generate the base string
+ $base_string = '';
+ foreach($params as $key => $value) {
+ $base_string .= $key . '=' . $value;
+ }
+ $base_string .= $secret;
+
+ return md5($base_string);
+ }
+
+ /**
+ * Prints to the error log if you aren't in command line mode.
+ *
+ * @param String log message
+ */
+ protected static function errorLog($msg) {
+ // disable error log if we are running in a CLI environment
+ // @codeCoverageIgnoreStart
+ if (php_sapi_name() != 'cli') {
+ error_log($msg);
+ }
+ // uncomment this if you want to see the errors on the page
+ // print 'error_log: '.$msg."\n";
+ // @codeCoverageIgnoreEnd
+ }
+
+ /**
+ * Base64 encoding that doesn't need to be urlencode()ed.
+ * Exactly the same as base64_encode except it uses
+ * - instead of +
+ * _ instead of /
+ *
+ * @param String base64UrlEncodeded string
+ */
+ protected static function base64UrlDecode($input) {
+ return base64_decode(strtr($input, '-_', '+/'));
+ }
+}
diff --git a/plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt b/plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt
new file mode 100644
index 000000000..b92d7190e
--- /dev/null
+++ b/plugins/FacebookBridge/extlib/fb_ca_chain_bundle.crt
@@ -0,0 +1,121 @@
+-----BEGIN CERTIFICATE-----
+MIIFgjCCBGqgAwIBAgIQDKKbZcnESGaLDuEaVk6fQjANBgkqhkiG9w0BAQUFADBm
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSUwIwYDVQQDExxEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBDQS0zMB4XDTEwMDExMzAwMDAwMFoXDTEzMDQxMTIzNTk1OVowaDELMAkGA1UE
+BhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExEjAQBgNVBAcTCVBhbG8gQWx0bzEX
+MBUGA1UEChMORmFjZWJvb2ssIEluYy4xFzAVBgNVBAMUDiouZmFjZWJvb2suY29t
+MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9rzj7QIuLM3sdHu1HcI1VcR3g
+b5FExKNV646agxSle1aQ/sJev1mh/u91ynwqd2BQmM0brZ1Hc3QrfYyAaiGGgEkp
+xbhezyfeYhAyO0TKAYxPnm2cTjB5HICzk6xEIwFbA7SBJ2fSyW1CFhYZyo3tIBjj
+19VjKyBfpRaPkzLmRwIDAQABo4ICrDCCAqgwHwYDVR0jBBgwFoAUUOpzidsp+xCP
+nuUBINTeeZlIg/cwHQYDVR0OBBYEFPp+tsFBozkjrHlEnZ9J4cFj2eM0MA4GA1Ud
+DwEB/wQEAwIFoDAMBgNVHRMBAf8EAjAAMF8GA1UdHwRYMFYwKaAnoCWGI2h0dHA6
+Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9jYTMtZmIuY3JsMCmgJ6AlhiNodHRwOi8vY3Js
+NC5kaWdpY2VydC5jb20vY2EzLWZiLmNybDCCAcYGA1UdIASCAb0wggG5MIIBtQYL
+YIZIAYb9bAEDAAEwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3LmRpZ2ljZXJ0
+LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUHAgIwggFWHoIB
+UgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQByAHQAaQBmAGkA
+YwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBjAGUAcAB0AGEA
+bgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAgAEMAUAAvAEMA
+UABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQAGEAcgB0AHkA
+IABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBtAGkAdAAgAGwA
+aQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBjAG8AcgBwAG8A
+cgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBlAHIAZQBuAGMA
+ZQAuMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0BAQUF
+AAOCAQEACOkTIdxMy11+CKrbGNLBSg5xHaTvu/v1wbyn3dO/mf68pPfJnX6ShPYy
+4XM4Vk0x4uaFaU4wAGke+nCKGi5dyg0Esg7nemLNKEJaFAJZ9enxZm334lSCeARy
+wlDtxULGOFRyGIZZPmbV2eNq5xdU/g3IuBEhL722mTpAye9FU/J8Wsnw54/gANyO
+Gzkewigua8ip8Lbs9Cht399yAfbfhUP1DrAm/xEcnHrzPr3cdCtOyJaM6SRPpRqH
+ITK5Nc06tat9lXVosSinT3KqydzxBYua9gCFFiR3x3DgZfvXkC6KDdUlDrNcJUub
+a1BHnLLP4mxTHL6faAXYd05IxNn/IA==
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIGVTCCBT2gAwIBAgIQCFH5WYFBRcq94CTiEsnCDjANBgkqhkiG9w0BAQUFADBs
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
+ZSBFViBSb290IENBMB4XDTA3MDQwMzAwMDAwMFoXDTIyMDQwMzAwMDAwMFowZjEL
+MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
+LmRpZ2ljZXJ0LmNvbTElMCMGA1UEAxMcRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
+Q0EtMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9hCikQH17+NDdR
+CPge+yLtYb4LDXBMUGMmdRW5QYiXtvCgFbsIYOBC6AUpEIc2iihlqO8xB3RtNpcv
+KEZmBMcqeSZ6mdWOw21PoF6tvD2Rwll7XjZswFPPAAgyPhBkWBATaccM7pxCUQD5
+BUTuJM56H+2MEb0SqPMV9Bx6MWkBG6fmXcCabH4JnudSREoQOiPkm7YDr6ictFuf
+1EutkozOtREqqjcYjbTCuNhcBoz4/yO9NV7UfD5+gw6RlgWYw7If48hl66l7XaAs
+zPw82W3tzPpLQ4zJ1LilYRyyQLYoEt+5+F/+07LJ7z20Hkt8HEyZNp496+ynaF4d
+32duXvsCAwEAAaOCAvcwggLzMA4GA1UdDwEB/wQEAwIBhjCCAcYGA1UdIASCAb0w
+ggG5MIIBtQYLYIZIAYb9bAEDAAIwggGkMDoGCCsGAQUFBwIBFi5odHRwOi8vd3d3
+LmRpZ2ljZXJ0LmNvbS9zc2wtY3BzLXJlcG9zaXRvcnkuaHRtMIIBZAYIKwYBBQUH
+AgIwggFWHoIBUgBBAG4AeQAgAHUAcwBlACAAbwBmACAAdABoAGkAcwAgAEMAZQBy
+AHQAaQBmAGkAYwBhAHQAZQAgAGMAbwBuAHMAdABpAHQAdQB0AGUAcwAgAGEAYwBj
+AGUAcAB0AGEAbgBjAGUAIABvAGYAIAB0AGgAZQAgAEQAaQBnAGkAQwBlAHIAdAAg
+AEMAUAAvAEMAUABTACAAYQBuAGQAIAB0AGgAZQAgAFIAZQBsAHkAaQBuAGcAIABQ
+AGEAcgB0AHkAIABBAGcAcgBlAGUAbQBlAG4AdAAgAHcAaABpAGMAaAAgAGwAaQBt
+AGkAdAAgAGwAaQBhAGIAaQBsAGkAdAB5ACAAYQBuAGQAIABhAHIAZQAgAGkAbgBj
+AG8AcgBwAG8AcgBhAHQAZQBkACAAaABlAHIAZQBpAG4AIABiAHkAIAByAGUAZgBl
+AHIAZQBuAGMAZQAuMA8GA1UdEwEB/wQFMAMBAf8wNAYIKwYBBQUHAQEEKDAmMCQG
+CCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wgY8GA1UdHwSBhzCB
+hDBAoD6gPIY6aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0SGlnaEFz
+c3VyYW5jZUVWUm9vdENBLmNybDBAoD6gPIY6aHR0cDovL2NybDQuZGlnaWNlcnQu
+Y29tL0RpZ2lDZXJ0SGlnaEFzc3VyYW5jZUVWUm9vdENBLmNybDAfBgNVHSMEGDAW
+gBSxPsNpA/i/RwHUmCYaCALvY2QrwzAdBgNVHQ4EFgQUUOpzidsp+xCPnuUBINTe
+eZlIg/cwDQYJKoZIhvcNAQEFBQADggEBAF1PhPGoiNOjsrycbeUpSXfh59bcqdg1
+rslx3OXb3J0kIZCmz7cBHJvUV5eR13UWpRLXuT0uiT05aYrWNTf58SHEW0CtWakv
+XzoAKUMncQPkvTAyVab+hA4LmzgZLEN8rEO/dTHlIxxFVbdpCJG1z9fVsV7un5Tk
+1nq5GMO41lJjHBC6iy9tXcwFOPRWBW3vnuzoYTYMFEuFFFoMg08iXFnLjIpx2vrF
+EIRYzwfu45DC9fkpx1ojcflZtGQriLCnNseaIGHr+k61rmsb5OPs4tk8QUmoIKRU
+9ZKNu8BVIASm2LAXFszj0Mi0PeXZhMbT9m5teMl5Q+h6N/9cNUm/ocU=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIEQjCCA6ugAwIBAgIEQoclDjANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEy
+MjIxNTI3MjdaFw0xNDA3MjIxNTU3MjdaMGwxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xKzApBgNV
+BAMTIkRpZ2lDZXJ0IEhpZ2ggQXNzdXJhbmNlIEVWIFJvb3QgQ0EwggEiMA0GCSqG
+SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGzOVz5vvUu+UtLTKm3+WBP8nNJUm2cSrD
+1ZQ0Z6IKHLBfaaZAscS3so/QmKSpQVk609yU1jzbdDikSsxNJYL3SqVTEjju80lt
+cZF+Y7arpl/DpIT4T2JRvvjF7Ns4kuMG5QiRDMQoQVX7y1qJFX5x6DW/TXIJPb46
+OFBbdzEbjbPHJEWap6xtABRaBLe6E+tRCphBQSJOZWGHgUFQpnlcid4ZSlfVLuZd
+HFMsfpjNGgYWpGhz0DQEE1yhcdNafFXbXmThN4cwVgTlEbQpgBLxeTmIogIRfCdm
+t4i3ePLKCqg4qwpkwr9mXZWEwaElHoddGlALIBLMQbtuC1E4uEvLAgMBAAGjggET
+MIIBDzASBgNVHRMBAf8ECDAGAQH/AgEBMCcGA1UdJQQgMB4GCCsGAQUFBwMBBggr
+BgEFBQcDAgYIKwYBBQUHAwQwMwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzABhhdo
+dHRwOi8vb2NzcC5lbnRydXN0Lm5ldDAzBgNVHR8ELDAqMCigJqAkhiJodHRwOi8v
+Y3JsLmVudHJ1c3QubmV0L3NlcnZlcjEuY3JsMB0GA1UdDgQWBBSxPsNpA/i/RwHU
+mCYaCALvY2QrwzALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7
+UISX8+1i0BowGQYJKoZIhvZ9B0EABAwwChsEVjcuMQMCAIEwDQYJKoZIhvcNAQEF
+BQADgYEAUuVY7HCc/9EvhaYzC1rAIo348LtGIiMduEl5Xa24G8tmJnDioD2GU06r
+1kjLX/ktCdpdBgXadbjtdrZXTP59uN0AXlsdaTiFufsqVLPvkp5yMnqnuI3E2o6p
+NpAkoQSbB6kUCNnXcW26valgOjDLZFOnr241QiwdBAJAAE/rRa8=
+-----END CERTIFICATE-----
+-----BEGIN CERTIFICATE-----
+MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
+VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
+ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
+KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
+ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
+MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
+ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
+b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
+bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
+U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
+A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
+I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
+wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
+AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
+oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
+BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
+dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
+MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
+b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
+dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
+MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
+E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
+MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
+hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
+95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
+2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
+-----END CERTIFICATE-----
diff --git a/plugins/FacebookBridge/images/login-button.png b/plugins/FacebookBridge/images/login-button.png
new file mode 100644
index 000000000..4e7766bca
--- /dev/null
+++ b/plugins/FacebookBridge/images/login-button.png
Binary files differ
diff --git a/plugins/FacebookBridge/lib/facebookclient.php b/plugins/FacebookBridge/lib/facebookclient.php
new file mode 100644
index 000000000..d5ecd11a9
--- /dev/null
+++ b/plugins/FacebookBridge/lib/facebookclient.php
@@ -0,0 +1,1139 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Class for communicating with Facebook
+ *
+ * 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 Zach Copley <zach@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);
+}
+
+/**
+ * Class for communication with Facebook
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+class Facebookclient
+{
+ protected $facebook = null; // Facebook Graph client obj
+ protected $flink = null; // Foreign_link StatusNet -> Facebook
+ protected $notice = null; // The user's notice
+ protected $user = null; // Sender of the notice
+
+ function __construct($notice)
+ {
+ $this->facebook = self::getFacebook();
+ $this->notice = $notice;
+
+ $this->flink = Foreign_link::getByUserID(
+ $notice->profile_id,
+ FACEBOOK_SERVICE
+ );
+
+ if (!empty($this->flink)) {
+ $this->user = $this->flink->getUser();
+ }
+ }
+
+ /*
+ * Get an instance of the Facebook Graph SDK object
+ *
+ * @param string $appId Application
+ * @param string $secret Facebook API secret
+ *
+ * @return Facebook A Facebook SDK obj
+ */
+ static function getFacebook($appId = null, $secret = null)
+ {
+ // Check defaults and configuration for application ID and secret
+ if (empty($appId)) {
+ $appId = common_config('facebook', 'appid');
+ }
+
+ if (empty($secret)) {
+ $secret = common_config('facebook', 'secret');
+ }
+
+ // If there's no app ID and secret set in the local config, look
+ // for a global one
+ if (empty($appId) || empty($secret)) {
+ $appId = common_config('facebook', 'global_appid');
+ $secret = common_config('facebook', 'global_secret');
+ }
+
+ return new Facebook(
+ array(
+ 'appId' => $appId,
+ 'secret' => $secret,
+ 'cookie' => true
+ )
+ );
+ }
+
+ /*
+ * Broadcast a notice to Facebook
+ *
+ * @param Notice $notice the notice to send
+ */
+ static function facebookBroadcastNotice($notice)
+ {
+ $client = new Facebookclient($notice);
+ return $client->sendNotice();
+ }
+
+ /*
+ * Should the notice go to Facebook?
+ */
+ function isFacebookBound() {
+
+ if (empty($this->flink)) {
+ common_log(
+ LOG_WARN,
+ sprintf(
+ "No Foreign_link to Facebook for the author of notice %d.",
+ $this->notice->id
+ ),
+ __FILE__
+ );
+ return false;
+ }
+
+ // Avoid a loop
+ if ($this->notice->source == 'Facebook') {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Skipping notice %d because its source is Facebook.',
+ $this->notice->id
+ ),
+ __FILE__
+ );
+ return false;
+ }
+
+ // If the user does not want to broadcast to Facebook, move along
+ if (!($this->flink->noticesync & FOREIGN_NOTICE_SEND == FOREIGN_NOTICE_SEND)) {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Skipping notice %d because user has FOREIGN_NOTICE_SEND bit off.',
+ $this->notice->id
+ ),
+ __FILE__
+ );
+ return false;
+ }
+
+ // If it's not a reply, or if the user WANTS to send @-replies,
+ // then, yeah, it can go to Facebook.
+ if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $this->notice->content) ||
+ ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ /*
+ * Determine whether we should send this notice using the Graph API or the
+ * old REST API and then dispatch
+ */
+ function sendNotice()
+ {
+ // If there's nothing in the credentials field try to send via
+ // the Old Rest API
+
+ if ($this->isFacebookBound()) {
+ common_debug("notice is facebook bound", __FILE__);
+ if (empty($this->flink->credentials)) {
+ return $this->sendOldRest();
+ } else {
+
+ // Otherwise we most likely have an access token
+ return $this->sendGraph();
+ }
+
+ } else {
+ common_debug(
+ sprintf(
+ "Skipping notice %d - not bound for Facebook",
+ $this->notice->id,
+ __FILE__
+ )
+ );
+ }
+ }
+
+ /*
+ * Send a notice to Facebook using the Graph API
+ */
+ function sendGraph()
+ {
+ try {
+
+ $fbuid = $this->flink->foreign_id;
+
+ common_debug(
+ sprintf(
+ "Attempting use Graph API to post notice %d as a stream item for %s (%d), fbuid %d",
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ $params = array(
+ 'access_token' => $this->flink->credentials,
+ // XXX: Need to worrry about length of the message?
+ 'message' => $this->notice->content
+ );
+
+ $attachments = $this->notice->attachments();
+
+ if (!empty($attachments)) {
+
+ // We can only send one attachment with the Graph API :(
+
+ $first = array_shift($attachments);
+
+ if (substr($first->mimetype, 0, 6) == 'image/'
+ || in_array(
+ $first->mimetype,
+ array('application/x-shockwave-flash', 'audio/mpeg' ))) {
+
+ $params['picture'] = $first->url;
+ $params['caption'] = 'Click for full size';
+ $params['source'] = $first->url;
+ }
+
+ }
+
+ $result = $this->facebook->api(
+ sprintf('/%s/feed', $fbuid), 'post', $params
+ );
+
+ // Save a mapping
+ Notice_to_item::saveNew($this->notice->id, $result['id']);
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ "Posted notice %d as a stream item for %s (%d), fbuid %d",
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ } catch (FacebookApiException $e) {
+ return $this->handleFacebookError($e);
+ }
+
+ return true;
+ }
+
+ /*
+ * Send a notice to Facebook using the deprecated Old REST API. We need this
+ * for backwards compatibility. Users who signed up for Facebook bridging
+ * using the old Facebook Canvas application do not have an OAuth 2.0
+ * access token.
+ */
+ function sendOldRest()
+ {
+ try {
+
+ $canPublish = $this->checkPermission('publish_stream');
+ $canUpdate = $this->checkPermission('status_update');
+
+ // We prefer to use stream.publish, because it can handle
+ // attachments and returns the ID of the published item
+
+ if ($canPublish == 1) {
+ $this->restPublishStream();
+ } else if ($canUpdate == 1) {
+ // as a last resort we can just update the user's "status"
+ $this->restStatusUpdate();
+ } else {
+
+ $msg = 'Not sending notice %d to Facebook because user %s '
+ . '(%d), fbuid %d, does not have \'status_update\' '
+ . 'or \'publish_stream\' permission.';
+
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ $msg,
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id
+ ),
+ __FILE__
+ );
+ }
+
+ } catch (FacebookApiException $e) {
+ return $this->handleFacebookError($e);
+ }
+
+ return true;
+ }
+
+ /*
+ * Query Facebook to to see if a user has permission
+ *
+ *
+ *
+ * @param $permission the permission to check for - must be either
+ * public_stream or status_update
+ *
+ * @return boolean result
+ */
+ function checkPermission($permission)
+ {
+ if (!in_array($permission, array('publish_stream', 'status_update'))) {
+ throw new ServerException("No such permission!");
+ }
+
+ $fbuid = $this->flink->foreign_id;
+
+ common_debug(
+ sprintf(
+ 'Checking for %s permission for user %s (%d), fbuid %d',
+ $permission,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ $hasPermission = $this->facebook->api(
+ array(
+ 'method' => 'users.hasAppPermission',
+ 'ext_perm' => $permission,
+ 'uid' => $fbuid
+ )
+ );
+
+ if ($hasPermission == 1) {
+
+ common_debug(
+ sprintf(
+ '%s (%d), fbuid %d has %s permission',
+ $permission,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ return true;
+
+ } else {
+
+ $logMsg = '%s (%d), fbuid $fbuid does NOT have %s permission.'
+ . 'Facebook returned: %s';
+
+ common_debug(
+ sprintf(
+ $logMsg,
+ $this->user->nickname,
+ $this->user->id,
+ $permission,
+ $fbuid,
+ var_export($result, true)
+ ),
+ __FILE__
+ );
+
+ return false;
+
+ }
+ }
+
+ /*
+ * Handle a Facebook API Exception
+ *
+ * @param FacebookApiException $e the exception
+ *
+ */
+ function handleFacebookError($e)
+ {
+ $fbuid = $this->flink->foreign_id;
+ $errmsg = $e->getMessage();
+ $code = $e->getCode();
+
+ // The Facebook PHP SDK seems to always set the code attribute
+ // of the Exception to 0; they put the real error code in
+ // the message. Gar!
+ if ($code == 0) {
+ preg_match('/^\(#(?<code>\d+)\)/', $errmsg, $matches);
+ $code = $matches['code'];
+ }
+
+ // XXX: Check for any others?
+ switch($code) {
+ case 100: // Invalid parameter
+ $msg = 'Facebook claims notice %d was posted with an invalid '
+ . 'parameter (error code 100 - %s) Notice details: '
+ . '[nickname=%s, user id=%d, fbuid=%d, content="%s"]. '
+ . 'Dequeing.';
+ common_log(
+ LOG_ERR, sprintf(
+ $msg,
+ $this->notice->id,
+ $errmsg,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid,
+ $this->notice->content
+ ),
+ __FILE__
+ );
+ return true;
+ break;
+ case 200: // Permissions error
+ case 250: // Updating status requires the extended permission status_update
+ $this->disconnect();
+ return true; // dequeue
+ break;
+ case 341: // Feed action request limit reached
+ $msg = '%s (userid=%d, fbuid=%d) has exceeded his/her limit '
+ . 'for posting notices to Facebook today. Dequeuing '
+ . 'notice %d';
+ common_log(
+ LOG_INFO, sprintf(
+ $msg,
+ $user->nickname,
+ $user->id,
+ $fbuid,
+ $this->notice->id
+ ),
+ __FILE__
+ );
+ // @fixme: We want to rety at a later time when the throttling has expired
+ // instead of just giving up.
+ return true;
+ break;
+ default:
+ $msg = 'Facebook returned an error we don\'t know how to deal with '
+ . 'when posting notice %d. Error code: %d, error message: "%s"'
+ . ' Notice details: [nickname=%s, user id=%d, fbuid=%d, '
+ . 'notice content="%s"]. Dequeing.';
+ common_log(
+ LOG_ERR, sprintf(
+ $msg,
+ $this->notice->id,
+ $code,
+ $errmsg,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid,
+ $this->notice->content
+ ),
+ __FILE__
+ );
+ return true; // dequeue
+ break;
+ }
+ }
+
+ /*
+ * Publish a notice to Facebook as a status update
+ *
+ * This is the least preferable way to send a notice to Facebook because
+ * it doesn't support attachments and the API method doesn't return
+ * the ID of the post on Facebook.
+ *
+ */
+ function restStatusUpdate()
+ {
+ $fbuid = $this->flink->foreign_id;
+
+ common_debug(
+ sprintf(
+ "Attempting to post notice %d as a status update for %s (%d), fbuid %d",
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ $result = $this->facebook->api(
+ array(
+ 'method' => 'users.setStatus',
+ 'status' => $this->formatMessage(),
+ 'status_includes_verb' => true,
+ 'uid' => $fbuid
+ )
+ );
+
+ if ($result == 1) { // 1 is success
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ "Posted notice %s as a status update for %s (%d), fbuid %d",
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ // There is no item ID returned for status update so we can't
+ // save a Notice_to_item mapping
+
+ } else {
+
+ $msg = sprintf(
+ "Error posting notice %s as a status update for %s (%d), fbuid %d - error code: %s",
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid,
+ $result // will contain 0, or an error
+ );
+
+ throw new FacebookApiException($msg, $result);
+ }
+ }
+
+ /*
+ * Publish a notice to a Facebook user's stream using the old REST API
+ */
+ function restPublishStream()
+ {
+ $fbuid = $this->flink->foreign_id;
+
+ common_debug(
+ sprintf(
+ 'Attempting to post notice %d as stream item for %s (%d) fbuid %d',
+ $this->notice->id,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ $fbattachment = $this->formatAttachments();
+
+ $result = $this->facebook->api(
+ array(
+ 'method' => 'stream.publish',
+ 'message' => $this->formatMessage(),
+ 'attachment' => $fbattachment,
+ 'uid' => $fbuid
+ )
+ );
+
+ if (!empty($result)) { // result will contain the item ID
+
+ // Save a mapping
+ Notice_to_item::saveNew($this->notice->id, $result);
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Posted notice %d as a %s for %s (%d), fbuid %d',
+ $this->notice->id,
+ empty($fbattachment) ? 'stream item' : 'stream item with attachment',
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ } else {
+
+ $msg = sprintf(
+ 'Could not post notice %d as a %s for %s (%d), fbuid %d - error code: %s',
+ $this->notice->id,
+ empty($fbattachment) ? 'stream item' : 'stream item with attachment',
+ $this->user->nickname,
+ $this->user->id,
+ $result, // result will contain an error code
+ $fbuid
+ );
+
+ throw new FacebookApiException($msg, $result);
+ }
+ }
+
+ /*
+ * Format the text message of a stream item so it's appropriate for
+ * sending to Facebook. If the notice is too long, truncate it, and
+ * add a linkback to the original notice at the end.
+ *
+ * @return String $txt the formated message
+ */
+ function formatMessage()
+ {
+ // Start with the plaintext source of this notice...
+ $txt = $this->notice->content;
+
+ // Facebook has a 420-char hardcoded max.
+ if (mb_strlen($statustxt) > 420) {
+ $noticeUrl = common_shorten_url($this->notice->uri);
+ $urlLen = mb_strlen($noticeUrl);
+ $txt = mb_substr($statustxt, 0, 420 - ($urlLen + 3)) . ' … ' . $noticeUrl;
+ }
+
+ return $txt;
+ }
+
+ /*
+ * Format attachments for the old REST API stream.publish method
+ *
+ * Note: Old REST API supports multiple attachments per post
+ *
+ */
+ function formatAttachments()
+ {
+ $attachments = $this->notice->attachments();
+
+ $fbattachment = array();
+ $fbattachment['media'] = array();
+
+ foreach($attachments as $attachment)
+ {
+ if($enclosure = $attachment->getEnclosure()){
+ $fbmedia = $this->getFacebookMedia($enclosure);
+ }else{
+ $fbmedia = $this->getFacebookMedia($attachment);
+ }
+ if($fbmedia){
+ $fbattachment['media'][]=$fbmedia;
+ }else{
+ $fbattachment['name'] = ($attachment->title ?
+ $attachment->title : $attachment->url);
+ $fbattachment['href'] = $attachment->url;
+ }
+ }
+ if(count($fbattachment['media'])>0){
+ unset($fbattachment['name']);
+ unset($fbattachment['href']);
+ }
+ return $fbattachment;
+ }
+
+ /**
+ * given a File objects, returns an associative array suitable for Facebook media
+ */
+ function getFacebookMedia($attachment)
+ {
+ $fbmedia = array();
+
+ if (strncmp($attachment->mimetype, 'image/', strlen('image/')) == 0) {
+ $fbmedia['type'] = 'image';
+ $fbmedia['src'] = $attachment->url;
+ $fbmedia['href'] = $attachment->url;
+ } else if ($attachment->mimetype == 'audio/mpeg') {
+ $fbmedia['type'] = 'mp3';
+ $fbmedia['src'] = $attachment->url;
+ }else if ($attachment->mimetype == 'application/x-shockwave-flash') {
+ $fbmedia['type'] = 'flash';
+
+ // http://wiki.developers.facebook.com/index.php/Attachment_%28Streams%29
+ // says that imgsrc is required... but we have no value to put in it
+ // $fbmedia['imgsrc']='';
+
+ $fbmedia['swfsrc'] = $attachment->url;
+ }else{
+ return false;
+ }
+ return $fbmedia;
+ }
+
+ /*
+ * Disconnect a user from Facebook by deleting his Foreign_link.
+ * Notifies the user his account has been disconnected by email.
+ */
+ function disconnect()
+ {
+ $fbuid = $this->flink->foreign_id;
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Removing Facebook link for %s (%d), fbuid %d',
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+
+ $result = $this->flink->delete();
+
+ if (empty($result)) {
+ common_log(
+ LOG_ERR,
+ sprintf(
+ 'Could not remove Facebook link for %s (%d), fbuid %d',
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+ common_log_db_error($flink, 'DELETE', __FILE__);
+ }
+
+ // Notify the user that we are removing their Facebook link
+ if (!empty($this->user->email)) {
+ $result = $this->mailFacebookDisconnect();
+
+ if (!$result) {
+
+ $msg = 'Unable to send email to notify %s (%d), fbuid %d '
+ . 'about his/her Facebook link being removed.';
+
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ $msg,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+ }
+
+ } else {
+
+ $msg = 'Unable to send email to notify %s (%d), fbuid %d '
+ . 'about his/her Facebook link being removed because the '
+ . 'user has not set an email address.';
+
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ $msg,
+ $this->user->nickname,
+ $this->user->id,
+ $fbuid
+ ),
+ __FILE__
+ );
+ }
+ }
+
+ /**
+ * Send a mail message to notify a user that her Facebook link
+ * has been terminated.
+ *
+ * @return boolean success flag
+ */
+ function mailFacebookDisconnect()
+ {
+ $profile = $this->user->getProfile();
+
+ $siteName = common_config('site', 'name');
+
+ common_switch_locale($this->user->language);
+
+ $subject = _m('Your Facebook connection has been removed');
+
+ $msg = <<<BODY
+Hi %1$s,
+
+We're sorry to inform you we are unable to publish your notice to
+Facebook, and have removed the connection between your %2$s account and
+Facebook.
+
+This may have happened because you have removed permission for %2$s
+to post on your behalf, or perhaps you have deactivated your Facebook
+account. You can reconnect your %s account to Facebook at any time by
+logging in with Facebook again.
+
+Sincerely,
+
+%2$s
+BODY;
+ $body = sprintf(
+ _m($msg),
+ $this->user->nickname,
+ $siteName
+ );
+
+ common_switch_locale();
+
+ $result = mail_to_user($this->user, $subject, $body);
+
+ if (empty($this->user->password)) {
+ $result = self::emailWarn($this->user);
+ }
+
+ return $result;
+ }
+
+ /*
+ * Send the user an email warning that their account has been
+ * disconnected and he/she has no way to login and must contact
+ * the site administrator for help.
+ *
+ * @param User $user the deauthorizing user
+ *
+ */
+ static function emailWarn($user)
+ {
+ $profile = $user->getProfile();
+
+ $siteName = common_config('site', 'name');
+ $siteEmail = common_config('site', 'email');
+
+ if (empty($siteEmail)) {
+ common_log(
+ LOG_WARNING,
+ "No site email address configured. Please set one."
+ );
+ }
+
+ common_switch_locale($user->language);
+
+ $subject = _m('Contact the %s administrator to retrieve your account');
+
+ $msg = <<<BODY
+Hi %1$s,
+
+We've noticed you have deauthorized the Facebook connection for your
+%2$s account. You have not set a password for your %2$s account yet, so
+you will not be able to login. If you wish to continue using your %2$s
+account, please contact the site administrator (%3$s) to set a password.
+
+Sincerely,
+
+%2$s
+BODY;
+ $body = sprintf(
+ _m($msg),
+ $user->nickname,
+ $siteName,
+ $siteEmail
+ );
+
+ common_switch_locale();
+
+ if (mail_to_user($user, $subject, $body)) {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Sent account lockout warning to %s (%d)',
+ $user->nickname,
+ $user->id
+ ),
+ __FILE__
+ );
+ } else {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Unable to send account lockout warning to %s (%d)',
+ $user->nickname,
+ $user->id
+ ),
+ __FILE__
+ );
+ }
+ }
+
+ /*
+ * Check to see if we have a mapping to a copy of this notice
+ * on Facebook
+ *
+ * @param Notice $notice the notice to check
+ *
+ * @return mixed null if it can't find one, or the id of the Facebook
+ * stream item
+ */
+ static function facebookStatusId($notice)
+ {
+ $n2i = Notice_to_item::staticGet('notice_id', $notice->id);
+
+ if (empty($n2i)) {
+ return null;
+ } else {
+ return $n2i->item_id;
+ }
+ }
+
+ /*
+ * Save a Foreign_user record of a Facebook user
+ *
+ * @param object $fbuser a Facebook Graph API user obj
+ * See: http://developers.facebook.com/docs/reference/api/user
+ * @return mixed $result Id or key
+ *
+ */
+ static function addFacebookUser($fbuser)
+ {
+ // remove any existing, possibly outdated, record
+ $luser = Foreign_user::getForeignUser($fbuser['id'], FACEBOOK_SERVICE);
+
+ if (!empty($luser)) {
+
+ $result = $luser->delete();
+
+ if ($result != false) {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Removed old Facebook user: %s, fbuid %d',
+ $fbuid['name'],
+ $fbuid['id']
+ ),
+ __FILE__
+ );
+ }
+ }
+
+ $fuser = new Foreign_user();
+
+ $fuser->nickname = $fbuser['name'];
+ $fuser->uri = $fbuser['link'];
+ $fuser->id = $fbuser['id'];
+ $fuser->service = FACEBOOK_SERVICE;
+ $fuser->created = common_sql_now();
+
+ $result = $fuser->insert();
+
+ if (empty($result)) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Failed to add new Facebook user: %s, fbuid %d',
+ $fbuser['name'],
+ $fbuser['id']
+ ),
+ __FILE__
+ );
+
+ common_log_db_error($fuser, 'INSERT', __FILE__);
+ } else {
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Added new Facebook user: %s, fbuid %d',
+ $fbuser['name'],
+ $fbuser['id']
+ ),
+ __FILE__
+ );
+ }
+
+ return $result;
+ }
+
+ /*
+ * Remove an item from a Facebook user's feed if we have a mapping
+ * for it.
+ */
+ function streamRemove()
+ {
+ $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+
+ if (!empty($this->flink) && !empty($n2i)) {
+
+ try {
+
+ $result = $this->facebook->api(
+ array(
+ 'method' => 'stream.remove',
+ 'post_id' => $n2i->item_id,
+ 'uid' => $this->flink->foreign_id
+ )
+ );
+
+ if (!empty($result) && result == true) {
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Deleted Facebook item: %s for %s (%d), fbuid %d',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id
+ ),
+ __FILE__
+ );
+
+ $n2i->delete();
+
+ } else {
+ throw new FaceboookApiException(var_export($result, true));
+ }
+
+ } catch (FacebookApiException $e) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Could not deleted Facebook item: %s for %s (%d), '
+ . 'fbuid %d - (API error: %s) item already deleted '
+ . 'on Facebook? ',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id,
+ $e
+ ),
+ __FILE__
+ );
+ }
+ }
+ }
+
+ /*
+ * Like an item in a Facebook user's feed if we have a mapping
+ * for it.
+ */
+ function like()
+ {
+ $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+
+ if (!empty($this->flink) && !empty($n2i)) {
+
+ try {
+
+ $result = $this->facebook->api(
+ array(
+ 'method' => 'stream.addlike',
+ 'post_id' => $n2i->item_id,
+ 'uid' => $this->flink->foreign_id
+ )
+ );
+
+ if (!empty($result) && result == true) {
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Added like for item: %s for %s (%d), fbuid %d',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id
+ ),
+ __FILE__
+ );
+
+ } else {
+ throw new FacebookApiException(var_export($result, true));
+ }
+
+ } catch (FacebookApiException $e) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Could not like Facebook item: %s for %s (%d), '
+ . 'fbuid %d (API error: %s)',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id,
+ $e
+ ),
+ __FILE__
+ );
+ }
+ }
+ }
+
+ /*
+ * Unlike an item in a Facebook user's feed if we have a mapping
+ * for it.
+ */
+ function unLike()
+ {
+ $n2i = Notice_to_item::staticGet('notice_id', $this->notice->id);
+
+ if (!empty($this->flink) && !empty($n2i)) {
+
+ try {
+
+ $result = $this->facebook->api(
+ array(
+ 'method' => 'stream.removeLike',
+ 'post_id' => $n2i->item_id,
+ 'uid' => $this->flink->foreign_id
+ )
+ );
+
+ if (!empty($result) && result == true) {
+
+ common_log(
+ LOG_INFO,
+ sprintf(
+ 'Removed like for item: %s for %s (%d), fbuid %d',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id
+ ),
+ __FILE__
+ );
+
+ } else {
+ throw new FacebookApiException(var_export($result, true));
+ }
+
+ } catch (FacebookApiException $e) {
+ common_log(
+ LOG_WARNING,
+ sprintf(
+ 'Could not remove like for Facebook item: %s for %s '
+ . '(%d), fbuid %d (API error: %s)',
+ $n2i->item_id,
+ $this->user->nickname,
+ $this->user->id,
+ $this->flink->foreign_id,
+ $e
+ ),
+ __FILE__
+ );
+ }
+ }
+ }
+
+}
diff --git a/plugins/FacebookBridge/lib/facebookqueuehandler.php b/plugins/FacebookBridge/lib/facebookqueuehandler.php
new file mode 100644
index 000000000..1e82ff01b
--- /dev/null
+++ b/plugins/FacebookBridge/lib/facebookqueuehandler.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Queuehandler for Facebook transport
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class FacebookQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'facebook';
+ }
+
+ function handle($notice)
+ {
+ if ($this->_isLocal($notice)) {
+ return Facebookclient::facebookBroadcastNotice($notice);
+ }
+ return true;
+ }
+
+ /**
+ * Determine whether the notice was locally created
+ *
+ * @param Notice $notice the notice
+ *
+ * @return boolean locality
+ */
+ function _isLocal($notice)
+ {
+ return ($notice->is_local == Notice::LOCAL_PUBLIC ||
+ $notice->is_local == Notice::LOCAL_NONPUBLIC);
+ }
+}
diff --git a/plugins/FacebookBridge/locale/FacebookBridge.pot b/plugins/FacebookBridge/locale/FacebookBridge.pot
new file mode 100644
index 000000000..08c0813fc
--- /dev/null
+++ b/plugins/FacebookBridge/locale/FacebookBridge.pot
@@ -0,0 +1,294 @@
+# 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-11-30 20:16+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. TRANS: Menu item.
+#. TRANS: Menu item tab.
+#: FacebookBridgePlugin.php:201 FacebookBridgePlugin.php:240
+#: FacebookBridgePlugin.php:281
+msgctxt "MENU"
+msgid "Facebook"
+msgstr ""
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:203
+msgid "Login or register using Facebook"
+msgstr ""
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:242
+msgid "Facebook integration configuration"
+msgstr ""
+
+#. TRANS: Tooltip for menu item "Facebook".
+#. TRANS: Page title for Facebook settings.
+#: FacebookBridgePlugin.php:283 actions/facebooksettings.php:106
+msgid "Facebook settings"
+msgstr ""
+
+#: FacebookBridgePlugin.php:547
+msgid "A plugin for integrating StatusNet with Facebook."
+msgstr ""
+
+#: lib/facebookclient.php:776
+msgid "Your Facebook connection has been removed"
+msgstr ""
+
+#: lib/facebookclient.php:835
+#, php-format
+msgid "Contact the %s administrator to retrieve your account"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:88
+msgid ""
+"You must be logged into Facebook to register a local account using Facebook."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:118
+msgid "There is already a local account linked with that Facebook account."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:141 actions/facebooksettings.php:87
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:150
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:167
+msgid "An unknown error has occured."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:185
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your "
+"Facebook to a local account. You can either create a new local account, or "
+"connect with an existing local account."
+msgstr ""
+
+#. TRANS: Page title.
+#: actions/facebookfinishlogin.php:195
+msgid "Facebook Setup"
+msgstr ""
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:229
+msgid "Connection options"
+msgstr ""
+
+#. TRANS: %s is the name of the license used by the user for their status updates.
+#: actions/facebookfinishlogin.php:239
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:256
+msgid "Create new account"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:258
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:262
+msgid "New nickname"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:264
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:268
+msgctxt "BUTTON"
+msgid "Create"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:274
+msgid "Connect existing account"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:276
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:280
+msgid "Existing nickname"
+msgstr ""
+
+#: actions/facebookfinishlogin.php:283
+msgid "Password"
+msgstr ""
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:287
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr ""
+
+#. TRANS: Client error trying to register with registrations not allowed.
+#. TRANS: Client error trying to register with registrations 'invite only'.
+#: actions/facebookfinishlogin.php:304 actions/facebookfinishlogin.php:314
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: Client error trying to register with an invalid invitation code.
+#: actions/facebookfinishlogin.php:322
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:335
+msgid "Nickname not allowed."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:340
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:368 actions/facebookfinishlogin.php:505
+msgid "Error connecting user to Facebook."
+msgstr ""
+
+#: actions/facebookfinishlogin.php:468
+msgid "Invalid username or password."
+msgstr ""
+
+#: actions/facebooklogin.php:43
+msgid "Already logged in."
+msgstr ""
+
+#. TRANS: Instructions.
+#: actions/facebooklogin.php:52
+msgid "Login with your Facebook Account"
+msgstr ""
+
+#. TRANS: Page title.
+#: actions/facebooklogin.php:67
+msgid "Login with Facebook"
+msgstr ""
+
+#: actions/facebookadminpanel.php:52
+msgid "Facebook"
+msgstr ""
+
+#: actions/facebookadminpanel.php:62
+msgid "Facebook integration settings"
+msgstr ""
+
+#: actions/facebookadminpanel.php:123
+msgid "Invalid Facebook ID. Max length is 255 characters."
+msgstr ""
+
+#: actions/facebookadminpanel.php:129
+msgid "Invalid Facebook secret. Max length is 255 characters."
+msgstr ""
+
+#: actions/facebookadminpanel.php:178
+msgid "Facebook application settings"
+msgstr ""
+
+#: actions/facebookadminpanel.php:184
+msgid "Application ID"
+msgstr ""
+
+#: actions/facebookadminpanel.php:185
+msgid "ID of your Facebook application"
+msgstr ""
+
+#: actions/facebookadminpanel.php:193
+msgid "Secret"
+msgstr ""
+
+#: actions/facebookadminpanel.php:194
+msgid "Application secret"
+msgstr ""
+
+#: actions/facebookadminpanel.php:210
+msgid "Save"
+msgstr ""
+
+#: actions/facebookadminpanel.php:210
+msgid "Save Facebook settings"
+msgstr ""
+
+#: actions/facebooksettings.php:139
+msgid "Connected Facebook user"
+msgstr ""
+
+#: actions/facebooksettings.php:166
+msgid "Publish my notices to Facebook."
+msgstr ""
+
+#: actions/facebooksettings.php:176
+msgid "Send \"@\" replies to Facebook."
+msgstr ""
+
+#. TRANS: Submit button to save synchronisation settings.
+#: actions/facebooksettings.php:185
+msgctxt "BUTTON"
+msgid "Save"
+msgstr ""
+
+#. TRANS: Legend.
+#: actions/facebooksettings.php:194
+msgid "Disconnect my account from Facebook"
+msgstr ""
+
+#: actions/facebooksettings.php:202
+#, php-format
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please [set "
+"a password](%s) first."
+msgstr ""
+
+#: actions/facebooksettings.php:215
+msgid ""
+"Keep your %1$s account but disconnect from Facebook. You'll use your 1%$s "
+"password to log in."
+msgstr ""
+
+#. TRANS: Submit button.
+#: actions/facebooksettings.php:222
+msgctxt "BUTTON"
+msgid "Disconnect"
+msgstr ""
+
+#: actions/facebooksettings.php:246
+msgid "There was a problem saving your sync preferences."
+msgstr ""
+
+#. TRANS: Confirmation that synchronisation settings have been saved into the system.
+#: actions/facebooksettings.php:249
+msgid "Sync preferences saved."
+msgstr ""
+
+#: actions/facebooksettings.php:264
+msgid "Couldn't delete link to Facebook."
+msgstr ""
+
+#: actions/facebooksettings.php:268
+msgid "You have disconnected from Facebook."
+msgstr ""
diff --git a/plugins/FacebookBridge/locale/mk/LC_MESSAGES/FacebookBridge.po b/plugins/FacebookBridge/locale/mk/LC_MESSAGES/FacebookBridge.po
new file mode 100644
index 000000000..2d338e877
--- /dev/null
+++ b/plugins/FacebookBridge/locale/mk/LC_MESSAGES/FacebookBridge.po
@@ -0,0 +1,316 @@
+# Translation of StatusNet - FacebookBridge to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - FacebookBridge\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:00+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:27+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-facebookbridge\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#. TRANS: Menu item.
+#. TRANS: Menu item tab.
+#: FacebookBridgePlugin.php:201 FacebookBridgePlugin.php:240
+#: FacebookBridgePlugin.php:281
+msgctxt "MENU"
+msgid "Facebook"
+msgstr "Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:203
+msgid "Login or register using Facebook"
+msgstr "Најава или регистрација со Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:242
+msgid "Facebook integration configuration"
+msgstr "Поставки за обединување со Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#. TRANS: Page title for Facebook settings.
+#: FacebookBridgePlugin.php:283 actions/facebooksettings.php:106
+msgid "Facebook settings"
+msgstr "Поставки за Facebook"
+
+#: FacebookBridgePlugin.php:547
+msgid "A plugin for integrating StatusNet with Facebook."
+msgstr "Приклучок за обединување на StatusNet со Facebook."
+
+#: lib/facebookclient.php:776
+msgid "Your Facebook connection has been removed"
+msgstr "Вашата врска со Facebook е отстранета"
+
+#: lib/facebookclient.php:835
+#, php-format
+msgid "Contact the %s administrator to retrieve your account"
+msgstr "Контактирајте го администраторот на %s за да си ја повртатите сметката"
+
+#: actions/facebookfinishlogin.php:88
+msgid ""
+"You must be logged into Facebook to register a local account using Facebook."
+msgstr ""
+"За да регистрирате локална сметка користејќи Facebook, ќе мора да сте "
+"најавени на самиот Facebook."
+
+#: actions/facebookfinishlogin.php:118
+msgid "There is already a local account linked with that Facebook account."
+msgstr "Веќе постои локална сметка поврзана со тааа сметка на Facebook."
+
+#: actions/facebookfinishlogin.php:141 actions/facebooksettings.php:87
+msgid "There was a problem with your session token. Try again, please."
+msgstr "Се поајви проблем со Вашиот сесиски жетон. Обидете се повторно."
+
+#: actions/facebookfinishlogin.php:150
+msgid "You can't register if you don't agree to the license."
+msgstr "Не може да се регистрирате ако не ја прифаќате лиценцата."
+
+#: actions/facebookfinishlogin.php:167
+msgid "An unknown error has occured."
+msgstr "Се појави непозната грешка."
+
+#: actions/facebookfinishlogin.php:185
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your "
+"Facebook to a local account. You can either create a new local account, or "
+"connect with an existing local account."
+msgstr ""
+"Ова е прв пат како се најавувате на %s, па затоа мораме да го поврземе "
+"Вашиот профил на Facebook со локална сметка. Можете да создадете нова "
+"локална сметка, или пак да се поврзете со постоечка сметка."
+
+#. TRANS: Page title.
+#: actions/facebookfinishlogin.php:195
+msgid "Facebook Setup"
+msgstr "Поставки за Facebook"
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:229
+msgid "Connection options"
+msgstr "Нагодувања за врска"
+
+#. TRANS: %s is the name of the license used by the user for their status updates.
+#: actions/facebookfinishlogin.php:239
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+"Мојот текст и податотеки се достапни под %s, освен следниве приватни "
+"податоци: лозинка, е-пошта, IM-адреса и телефонски број."
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:256
+msgid "Create new account"
+msgstr "Создај нова сметка"
+
+#: actions/facebookfinishlogin.php:258
+msgid "Create a new user with this nickname."
+msgstr "Создај нов корисник со овој прекар."
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:262
+msgid "New nickname"
+msgstr "Нов прекар"
+
+#: actions/facebookfinishlogin.php:264
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr "1-64 мали букви и бројки, без интерпункциски знаци и празни места"
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:268
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Создај"
+
+#: actions/facebookfinishlogin.php:274
+msgid "Connect existing account"
+msgstr "Поврзи постоечка сметка"
+
+#: actions/facebookfinishlogin.php:276
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+"Ако веќе имате сметка, најавете се со корисничкото име и лозинката за да ја "
+"поврзете со профилот на Facebook."
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:280
+msgid "Existing nickname"
+msgstr "Постоечки прекар"
+
+#: actions/facebookfinishlogin.php:283
+msgid "Password"
+msgstr "Лозинка"
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:287
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Поврзи"
+
+#. TRANS: Client error trying to register with registrations not allowed.
+#. TRANS: Client error trying to register with registrations 'invite only'.
+#: actions/facebookfinishlogin.php:304 actions/facebookfinishlogin.php:314
+msgid "Registration not allowed."
+msgstr "Регистрирањето не е дозволено."
+
+#. TRANS: Client error trying to register with an invalid invitation code.
+#: actions/facebookfinishlogin.php:322
+msgid "Not a valid invitation code."
+msgstr "Ова не е важечки код за покана."
+
+#: actions/facebookfinishlogin.php:335
+msgid "Nickname not allowed."
+msgstr "Прекарот не е дозволен."
+
+#: actions/facebookfinishlogin.php:340
+msgid "Nickname already in use. Try another one."
+msgstr "Тој прекар е во употреба. Одберете друг."
+
+#: actions/facebookfinishlogin.php:368 actions/facebookfinishlogin.php:505
+msgid "Error connecting user to Facebook."
+msgstr "Грешка при поврзувањето на корисникот со Facebook."
+
+#: actions/facebookfinishlogin.php:468
+msgid "Invalid username or password."
+msgstr "Погрешно име или лозинка."
+
+#: actions/facebooklogin.php:43
+msgid "Already logged in."
+msgstr "Веќе сте најавени."
+
+#. TRANS: Instructions.
+#: actions/facebooklogin.php:52
+msgid "Login with your Facebook Account"
+msgstr "Најава со Вашата сметка на Facebook"
+
+#. TRANS: Page title.
+#: actions/facebooklogin.php:67
+msgid "Login with Facebook"
+msgstr "Најава со Facebook"
+
+#: actions/facebookadminpanel.php:52
+msgid "Facebook"
+msgstr "Facebook"
+
+#: actions/facebookadminpanel.php:62
+msgid "Facebook integration settings"
+msgstr "Поставки за обединување со Facebook"
+
+#: actions/facebookadminpanel.php:123
+msgid "Invalid Facebook ID. Max length is 255 characters."
+msgstr "Неважечка назнака (ID) за Facebook. Дозволени се највеќе 255 знаци."
+
+#: actions/facebookadminpanel.php:129
+msgid "Invalid Facebook secret. Max length is 255 characters."
+msgstr "Неважечка тајна за Facebook. Дозволени се највеќе 255 знаци."
+
+#: actions/facebookadminpanel.php:178
+msgid "Facebook application settings"
+msgstr "Поставки за програм за Facebook"
+
+#: actions/facebookadminpanel.php:184
+msgid "Application ID"
+msgstr "Назнака (ID) на програмот"
+
+#: actions/facebookadminpanel.php:185
+msgid "ID of your Facebook application"
+msgstr "Назнака (ID) на Вашиот програм за Facebook"
+
+#: actions/facebookadminpanel.php:193
+msgid "Secret"
+msgstr "Тајна"
+
+#: actions/facebookadminpanel.php:194
+msgid "Application secret"
+msgstr "Тајна за програмот"
+
+#: actions/facebookadminpanel.php:210
+msgid "Save"
+msgstr "Зачувај"
+
+#: actions/facebookadminpanel.php:210
+msgid "Save Facebook settings"
+msgstr "Зачувај поставки за Facebook"
+
+#: actions/facebooksettings.php:139
+msgid "Connected Facebook user"
+msgstr "Поврзан корисник на Facebook"
+
+#: actions/facebooksettings.php:166
+msgid "Publish my notices to Facebook."
+msgstr "Објавувај ми ги забелешките на Facebook."
+
+#: actions/facebooksettings.php:176
+msgid "Send \"@\" replies to Facebook."
+msgstr "Испраќај „@“-одговори на Facebook."
+
+#. TRANS: Submit button to save synchronisation settings.
+#: actions/facebooksettings.php:185
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Зачувај"
+
+#. TRANS: Legend.
+#: actions/facebooksettings.php:194
+msgid "Disconnect my account from Facebook"
+msgstr "Исклучи ми ја сметката од Facebook"
+
+#: actions/facebooksettings.php:202
+#, php-format
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please [set "
+"a password](%s) first."
+msgstr ""
+"Ако ја исклучите сметката од Faceboook, тогаш нема да можете да се "
+"најавувате! Најпрвин [ставете лозинка](%s)."
+
+#: actions/facebooksettings.php:215
+msgid ""
+"Keep your %1$s account but disconnect from Facebook. You'll use your 1%$s "
+"password to log in."
+msgstr ""
+"Задржете ја сметката на %1$s, но исклучете ја од Facebook. За најава ќе ја "
+"користите лозинката на 1%$s."
+
+#. TRANS: Submit button.
+#: actions/facebooksettings.php:222
+msgctxt "BUTTON"
+msgid "Disconnect"
+msgstr "Исклучи"
+
+#: actions/facebooksettings.php:246
+msgid "There was a problem saving your sync preferences."
+msgstr "Се појави проблем при зачувувањето на нагодувањата за усогласување."
+
+#. TRANS: Confirmation that synchronisation settings have been saved into the system.
+#: actions/facebooksettings.php:249
+msgid "Sync preferences saved."
+msgstr "Нагодувањата за усогласување се зачувани."
+
+#: actions/facebooksettings.php:264
+msgid "Couldn't delete link to Facebook."
+msgstr "Не можев да ја избришам врската со Facebook."
+
+#: actions/facebooksettings.php:268
+msgid "You have disconnected from Facebook."
+msgstr "Сега сте исклучени од Facebook."
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Прекарот мора да има само мали букви и бројки и да нема празни места."
diff --git a/plugins/FacebookBridge/locale/nl/LC_MESSAGES/FacebookBridge.po b/plugins/FacebookBridge/locale/nl/LC_MESSAGES/FacebookBridge.po
new file mode 100644
index 000000000..359425d22
--- /dev/null
+++ b/plugins/FacebookBridge/locale/nl/LC_MESSAGES/FacebookBridge.po
@@ -0,0 +1,324 @@
+# Translation of StatusNet - FacebookBridge to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - FacebookBridge\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:00+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:27+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-facebookbridge\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item.
+#. TRANS: Menu item tab.
+#: FacebookBridgePlugin.php:201 FacebookBridgePlugin.php:240
+#: FacebookBridgePlugin.php:281
+msgctxt "MENU"
+msgid "Facebook"
+msgstr "Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:203
+msgid "Login or register using Facebook"
+msgstr "Aanmelden of registreren via Facebook"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#: FacebookBridgePlugin.php:242
+msgid "Facebook integration configuration"
+msgstr "Instellingen voor Facebookintegratie"
+
+#. TRANS: Tooltip for menu item "Facebook".
+#. TRANS: Page title for Facebook settings.
+#: FacebookBridgePlugin.php:283 actions/facebooksettings.php:106
+msgid "Facebook settings"
+msgstr "Facebookinstellingen"
+
+#: FacebookBridgePlugin.php:547
+msgid "A plugin for integrating StatusNet with Facebook."
+msgstr "Een plug-in voor het integreren van StatusNet met Facebook."
+
+#: lib/facebookclient.php:776
+msgid "Your Facebook connection has been removed"
+msgstr "Uw koppeling met Facebook is verwijderd"
+
+#: lib/facebookclient.php:835
+#, php-format
+msgid "Contact the %s administrator to retrieve your account"
+msgstr ""
+"Neem contact op met de beheerder van %s om uw gebruikersgegevens te "
+"verkrijgen"
+
+#: actions/facebookfinishlogin.php:88
+msgid ""
+"You must be logged into Facebook to register a local account using Facebook."
+msgstr ""
+"U moet aangemeld zijn bij Facebook om een lokale gebruiker via Facebook te "
+"kunnen registreren."
+
+#: actions/facebookfinishlogin.php:118
+msgid "There is already a local account linked with that Facebook account."
+msgstr "Er is al een lokale gebruiker verbonden met deze Facebookgebruiker."
+
+#: actions/facebookfinishlogin.php:141 actions/facebooksettings.php:87
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+"Er is een probleem ontstaan met uw sessie. Probeer het nog een keer, "
+"alstublieft."
+
+#: actions/facebookfinishlogin.php:150
+msgid "You can't register if you don't agree to the license."
+msgstr "U kunt zich niet registreren als u niet met de licentie akkoord gaat."
+
+#: actions/facebookfinishlogin.php:167
+msgid "An unknown error has occured."
+msgstr "Er is een onbekende fout opgetreden."
+
+#: actions/facebookfinishlogin.php:185
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your "
+"Facebook to a local account. You can either create a new local account, or "
+"connect with an existing local account."
+msgstr ""
+"De is de eerste keer dat u aanmeldt bij %s en dan moeten we uw "
+"Facebookgebruiker koppelen met uw lokale gebruiker. U kunt een nieuwe lokale "
+"gebruiker aanmaken of koppelen met een bestaande gebruiker als u die al hebt."
+
+#. TRANS: Page title.
+#: actions/facebookfinishlogin.php:195
+msgid "Facebook Setup"
+msgstr "Facebookinstellingen"
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:229
+msgid "Connection options"
+msgstr "Koppelingsinstellingen"
+
+#. TRANS: %s is the name of the license used by the user for their status updates.
+#: actions/facebookfinishlogin.php:239
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+"Mijn teksten en bestanden zijn beschikbaar onder %s, behalve de volgende "
+"privégegevens: wachtwoord, e-mailadres, IM-adres, telefoonnummer."
+
+#. TRANS: Legend.
+#: actions/facebookfinishlogin.php:256
+msgid "Create new account"
+msgstr "Nieuwe gebruiker aanmaken"
+
+#: actions/facebookfinishlogin.php:258
+msgid "Create a new user with this nickname."
+msgstr "Nieuwe gebruiker aanmaken met deze gebruikersnaam."
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:262
+msgid "New nickname"
+msgstr "Nieuwe gebruikersnaam"
+
+#: actions/facebookfinishlogin.php:264
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties"
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:268
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Aanmaken"
+
+#: actions/facebookfinishlogin.php:274
+msgid "Connect existing account"
+msgstr "Verbinden met een bestaande gebruiker"
+
+#: actions/facebookfinishlogin.php:276
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+"Als u al een gebruiker hebt, meld dan aan met uw gebruikersnaam en "
+"wachtwoord om deze daarna te koppelen met uw Facebookgebruiker."
+
+#. TRANS: Field label.
+#: actions/facebookfinishlogin.php:280
+msgid "Existing nickname"
+msgstr "Bestaande gebruikersnaam"
+
+#: actions/facebookfinishlogin.php:283
+msgid "Password"
+msgstr "Wachtwoord"
+
+#. TRANS: Submit button.
+#: actions/facebookfinishlogin.php:287
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Koppelen"
+
+#. TRANS: Client error trying to register with registrations not allowed.
+#. TRANS: Client error trying to register with registrations 'invite only'.
+#: actions/facebookfinishlogin.php:304 actions/facebookfinishlogin.php:314
+msgid "Registration not allowed."
+msgstr "Registratie is niet toegestaan."
+
+#. TRANS: Client error trying to register with an invalid invitation code.
+#: actions/facebookfinishlogin.php:322
+msgid "Not a valid invitation code."
+msgstr "De uitnodigingscode is ongeldig."
+
+#: actions/facebookfinishlogin.php:335
+msgid "Nickname not allowed."
+msgstr "Gebruikersnaam niet toegestaan."
+
+#: actions/facebookfinishlogin.php:340
+msgid "Nickname already in use. Try another one."
+msgstr ""
+"De opgegeven gebruikersnaam is al in gebruik. Kies een andere gebruikersnaam."
+
+#: actions/facebookfinishlogin.php:368 actions/facebookfinishlogin.php:505
+msgid "Error connecting user to Facebook."
+msgstr "Fout bij het verbinden van de gebruiker met Facebook."
+
+#: actions/facebookfinishlogin.php:468
+msgid "Invalid username or password."
+msgstr "Ongeldige gebruikersnaam of wachtwoord."
+
+#: actions/facebooklogin.php:43
+msgid "Already logged in."
+msgstr "U bent al aangemeld."
+
+#. TRANS: Instructions.
+#: actions/facebooklogin.php:52
+msgid "Login with your Facebook Account"
+msgstr "Aanmelden met uw Facebookgebruiker"
+
+#. TRANS: Page title.
+#: actions/facebooklogin.php:67
+msgid "Login with Facebook"
+msgstr "Aanmelden met Facebook"
+
+#: actions/facebookadminpanel.php:52
+msgid "Facebook"
+msgstr "Facebook"
+
+#: actions/facebookadminpanel.php:62
+msgid "Facebook integration settings"
+msgstr "Instellingen voor Facebookkoppeling"
+
+#: actions/facebookadminpanel.php:123
+msgid "Invalid Facebook ID. Max length is 255 characters."
+msgstr "Ongeldig Facebook-ID. De maximale lengte is 255 tekens."
+
+#: actions/facebookadminpanel.php:129
+msgid "Invalid Facebook secret. Max length is 255 characters."
+msgstr "Ongeldig Facebookgeheim. De maximale lengte is 255 tekens."
+
+#: actions/facebookadminpanel.php:178
+msgid "Facebook application settings"
+msgstr "Applicatieinstellingen voor Facebook"
+
+#: actions/facebookadminpanel.php:184
+msgid "Application ID"
+msgstr "Applicatie-ID"
+
+#: actions/facebookadminpanel.php:185
+msgid "ID of your Facebook application"
+msgstr "ID van uw Facebookapplicatie"
+
+#: actions/facebookadminpanel.php:193
+msgid "Secret"
+msgstr "Geheim"
+
+#: actions/facebookadminpanel.php:194
+msgid "Application secret"
+msgstr "Applicatiegeheim"
+
+#: actions/facebookadminpanel.php:210
+msgid "Save"
+msgstr "Opslaan"
+
+#: actions/facebookadminpanel.php:210
+msgid "Save Facebook settings"
+msgstr "Facebookinstellingen opslaan"
+
+#: actions/facebooksettings.php:139
+msgid "Connected Facebook user"
+msgstr "Gekoppelde Facebookgebruiker"
+
+#: actions/facebooksettings.php:166
+msgid "Publish my notices to Facebook."
+msgstr "Mijn mededelingen publiceren op Facebook."
+
+#: actions/facebooksettings.php:176
+msgid "Send \"@\" replies to Facebook."
+msgstr "Antwoorden met \"@\" naar Facebook verzenden."
+
+#. TRANS: Submit button to save synchronisation settings.
+#: actions/facebooksettings.php:185
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Opslaan"
+
+#. TRANS: Legend.
+#: actions/facebooksettings.php:194
+msgid "Disconnect my account from Facebook"
+msgstr "Mijn gebruiker loskoppelen van Facebook"
+
+#: actions/facebooksettings.php:202
+#, php-format
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please [set "
+"a password](%s) first."
+msgstr ""
+"Door los te koppelen van Faceboook zou u niet meer kunnen aanmelden! [Stel "
+"eerst een wachtwoord in](%s)."
+
+#: actions/facebooksettings.php:215
+msgid ""
+"Keep your %1$s account but disconnect from Facebook. You'll use your 1%$s "
+"password to log in."
+msgstr ""
+"Uw gebruiker bij %1$s behouden maar deze loskoppelen van Facebook. U kunt uw "
+"wachtwoord van %1$s gebruiken om aan te melden."
+
+#. TRANS: Submit button.
+#: actions/facebooksettings.php:222
+msgctxt "BUTTON"
+msgid "Disconnect"
+msgstr "Loskoppelen"
+
+#: actions/facebooksettings.php:246
+msgid "There was a problem saving your sync preferences."
+msgstr ""
+"Er is een fout opgetreden tijdens het opslaan van uw "
+"synchronisatievoorkeuren."
+
+#. TRANS: Confirmation that synchronisation settings have been saved into the system.
+#: actions/facebooksettings.php:249
+msgid "Sync preferences saved."
+msgstr "Uw synchronisatievoorkeuren zijn opgeslagen."
+
+#: actions/facebooksettings.php:264
+msgid "Couldn't delete link to Facebook."
+msgstr "Het was niet mogelijk de verwijzing naar Facebook te verwijderen."
+
+#: actions/facebooksettings.php:268
+msgid "You have disconnected from Facebook."
+msgstr "U bent losgekoppeld van Facebook."
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
+#~ "zijn niet toegestaan."
diff --git a/plugins/FirePHP/locale/de/LC_MESSAGES/FirePHP.po b/plugins/FirePHP/locale/de/LC_MESSAGES/FirePHP.po
new file mode 100644
index 000000000..1efa9ffa6
--- /dev/null
+++ b/plugins/FirePHP/locale/de/LC_MESSAGES/FirePHP.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - FirePHP to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - FirePHP\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:55+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:45+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-firephp\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: FirePHPPlugin.php:68
+msgid "The FirePHP plugin writes StatusNet's log output to FirePHP."
+msgstr ""
+"Das FirePHP-Plugin schreibt die Konsolenausgabe von StatusNet an FirePHP."
diff --git a/plugins/FollowEveryone/locale/de/LC_MESSAGES/FollowEveryone.po b/plugins/FollowEveryone/locale/de/LC_MESSAGES/FollowEveryone.po
new file mode 100644
index 000000000..f322865ca
--- /dev/null
+++ b/plugins/FollowEveryone/locale/de/LC_MESSAGES/FollowEveryone.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - FollowEveryone to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - FollowEveryone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:57+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:45+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-followeveryone\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: FollowEveryonePlugin.php:203
+msgid "New users follow everyone at registration and are followed in return."
+msgstr ""
+"Neue Benutzer folgen jedem nach der Registrierung und werden im Gegenzug "
+"ebenfalls gefolgt."
diff --git a/plugins/FollowEveryone/locale/fr/LC_MESSAGES/FollowEveryone.po b/plugins/FollowEveryone/locale/fr/LC_MESSAGES/FollowEveryone.po
new file mode 100644
index 000000000..33d9f1fee
--- /dev/null
+++ b/plugins/FollowEveryone/locale/fr/LC_MESSAGES/FollowEveryone.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - FollowEveryone to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - FollowEveryone\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:57+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:45+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-followeveryone\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: FollowEveryonePlugin.php:203
+msgid "New users follow everyone at registration and are followed in return."
+msgstr ""
+"Les nouveaux utilisateurs suivent tout le monde lors de l’inscription et "
+"sont suivis en retour."
diff --git a/plugins/ForceGroup/locale/te/LC_MESSAGES/ForceGroup.po b/plugins/ForceGroup/locale/te/LC_MESSAGES/ForceGroup.po
new file mode 100644
index 000000000..2bf7fc856
--- /dev/null
+++ b/plugins/ForceGroup/locale/te/LC_MESSAGES/ForceGroup.po
@@ -0,0 +1,36 @@
+# Translation of StatusNet - ForceGroup to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ForceGroup\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:40:58+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:46+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-forcegroup\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Server exception.
+#. TRANS: %1$s is a user nickname, %2$s is a group nickname.
+#: ForceGroupPlugin.php:78
+#, php-format
+msgid "Could not join user %1$s to group %2$s."
+msgstr "వాడుకరి %1$sని %2$s గుంపులో చేర్చలేకపోయాం."
+
+#. TRANS: Plugin description.
+#: ForceGroupPlugin.php:104
+msgid ""
+"Allows forced group memberships and forces all notices to appear in groups "
+"that users were forced in."
+msgstr ""
diff --git a/plugins/GoogleAnalytics/locale/de/LC_MESSAGES/GoogleAnalytics.po b/plugins/GoogleAnalytics/locale/de/LC_MESSAGES/GoogleAnalytics.po
new file mode 100644
index 000000000..c812b591e
--- /dev/null
+++ b/plugins/GoogleAnalytics/locale/de/LC_MESSAGES/GoogleAnalytics.po
@@ -0,0 +1,30 @@
+# Translation of StatusNet - GoogleAnalytics to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - GoogleAnalytics\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:00+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:47+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-googleanalytics\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: GoogleAnalyticsPlugin.php:80
+msgid ""
+"Use <a href=\"http://www.google.com/analytics/\">Google Analytics</a> to "
+"track web access."
+msgstr ""
+"Benutzung von <a href=\"http://www.google.com/analytics/\">Google Analytics</"
+"a> zur Verfolgung des Web-Zugangs."
diff --git a/plugins/Gravatar/locale/de/LC_MESSAGES/Gravatar.po b/plugins/Gravatar/locale/de/LC_MESSAGES/Gravatar.po
index 5a6317a9a..649c3db64 100644
--- a/plugins/Gravatar/locale/de/LC_MESSAGES/Gravatar.po
+++ b/plugins/Gravatar/locale/de/LC_MESSAGES/Gravatar.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Gravatar\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:40+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:04+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:04+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:47+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-gravatar\n"
@@ -24,12 +24,11 @@ msgstr ""
#: GravatarPlugin.php:60
msgid "Set Gravatar"
-msgstr ""
+msgstr "Gravatar einstellen"
#: GravatarPlugin.php:63
msgid "If you want to use your Gravatar image, click \"Add\"."
-msgstr ""
-"Falls Sie Ihr Gravatar Bild verwenden wollen, klicken sie \"Hinzufügen\""
+msgstr "Falls du dein Gravatar-Bild verwenden willst, klicke auf „Hinzufügen“."
#: GravatarPlugin.php:68
msgid "Add"
@@ -41,8 +40,7 @@ msgstr "Gravatar löschen"
#: GravatarPlugin.php:81
msgid "If you want to remove your Gravatar image, click \"Remove\"."
-msgstr ""
-"Falls Sie Ihr Gravatar Bild entfernen wollen, klicken sie \"Entfernen\""
+msgstr "Falls du dein Gravatar-Bild entfernen willst, klicke auf „Entfernen“."
#: GravatarPlugin.php:86
msgid "Remove"
@@ -50,16 +48,15 @@ msgstr "Entfernen"
#: GravatarPlugin.php:91
msgid "To use a Gravatar first enter in an email address."
-msgstr ""
-"Um einen Gravatar zuverwenden geben Sie zunächst in eine E-Mail-Adresse ein."
+msgstr "Um einen Gravatar zu verwenden, gib zunächst eine E-Mail-Adresse ein."
#: GravatarPlugin.php:140
msgid "You do not have an email address set in your profile."
-msgstr ""
+msgstr "Du hast keine E-Mail-Adresse in deinem Profil eingetragen."
#: GravatarPlugin.php:158
msgid "Failed to save Gravatar to the database."
-msgstr ""
+msgstr "Konnte Gravatar nicht in der Datenbank speichern."
#: GravatarPlugin.php:162
msgid "Gravatar added."
diff --git a/plugins/GroupFavorited/groupfavoritedaction.php b/plugins/GroupFavorited/groupfavoritedaction.php
index dbd37abbc..dcbf7d0bc 100644
--- a/plugins/GroupFavorited/groupfavoritedaction.php
+++ b/plugins/GroupFavorited/groupfavoritedaction.php
@@ -41,12 +41,7 @@ class GroupFavoritedAction extends ShowgroupAction
*/
function title()
{
- if (!empty($this->group->fullname)) {
- // @todo Create a core method to create this properly. i18n issue.
- $base = $this->group->fullname . ' (' . $this->group->nickname . ')';
- } else {
- $base = $this->group->nickname;
- }
+ $base = $this->group->getFancyName();
if ($this->page == 1) {
// TRANS: %s is a group name.
diff --git a/plugins/GroupFavorited/locale/GroupFavorited.pot b/plugins/GroupFavorited/locale/GroupFavorited.pot
index c6c2f1114..041126fad 100644
--- a/plugins/GroupFavorited/locale/GroupFavorited.pot
+++ b/plugins/GroupFavorited/locale/GroupFavorited.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+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,13 +17,13 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr ""
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr ""
diff --git a/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po
index 7362f0505..6ca70c83f 100644
--- a/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/br/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr ""
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr ""
diff --git a/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po
index c820c89e1..cc8988658 100644
--- a/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/de/LC_MESSAGES/GroupFavorited.po
@@ -10,26 +10,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Beliebte Beiträge in der %s-Gruppe"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Beliebte Beiträge in der %1$s-Gruppe, Seite %2$d"
diff --git a/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po
index 6af511ae6..3b3419d5a 100644
--- a/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/es/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Mensajes populares en el grupo %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Mensajes populares en el grupo %1$s, página %2$d"
diff --git a/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po
index 9cfb10efc..3facce573 100644
--- a/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/fr/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Messages populaires dans le groupe %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Messages populaires dans le groupe %1$s, page %2$d"
diff --git a/plugins/GroupFavorited/locale/gl/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/gl/LC_MESSAGES/GroupFavorited.po
new file mode 100644
index 000000000..f1739e3f2
--- /dev/null
+++ b/plugins/GroupFavorited/locale/gl/LC_MESSAGES/GroupFavorited.po
@@ -0,0 +1,53 @@
+# Translation of StatusNet - GroupFavorited to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - GroupFavorited\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:12+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:41:58+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: %s is a group name.
+#: groupfavoritedaction.php:48
+#, php-format
+msgid "Popular posts in %s group"
+msgstr ""
+
+#. TRANS: %1$s is a group name, %2$s is a group number.
+#: groupfavoritedaction.php:51
+#, php-format
+msgid "Popular posts in %1$s group, page %2$d"
+msgstr ""
+
+#. TRANS: Menu item in the group navigation page.
+#: GroupFavoritedPlugin.php:72
+msgctxt "MENU"
+msgid "Popular"
+msgstr "Populares"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: GroupFavoritedPlugin.php:75
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Popular notices in %s group"
+msgstr ""
+
+#. TRANS: Plugin description.
+#: GroupFavoritedPlugin.php:99
+msgid "This plugin adds a menu item for popular notices in groups."
+msgstr ""
diff --git a/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po
index 03eb3e3da..f1e424cd1 100644
--- a/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/ia/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Messages popular in gruppo %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Messages popular in gruppo %1$s, pagina %2$d"
diff --git a/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po
index 1d1a43a0d..5aada9eca 100644
--- a/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/mk/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Популарни објави во групата %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Популарни објави во групата %1$s, страница %2$d"
diff --git a/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po
index 1d8a2b57e..bf5669877 100644
--- a/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/nl/LC_MESSAGES/GroupFavorited.po
@@ -10,26 +10,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Populaire berichten in de groep %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Populaire berichten in de groep %1$s, pagina %2$d"
diff --git a/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po
index 63e84c453..1cb4433d8 100644
--- a/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/ru/LC_MESSAGES/GroupFavorited.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
@@ -23,13 +23,13 @@ msgstr ""
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Популярные сообщения в группе %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr ""
diff --git a/plugins/GroupFavorited/locale/te/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/te/LC_MESSAGES/GroupFavorited.po
new file mode 100644
index 000000000..d1a5cac0d
--- /dev/null
+++ b/plugins/GroupFavorited/locale/te/LC_MESSAGES/GroupFavorited.po
@@ -0,0 +1,53 @@
+# Translation of StatusNet - GroupFavorited to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - GroupFavorited\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:06+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:30:12+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: %s is a group name.
+#: groupfavoritedaction.php:48
+#, php-format
+msgid "Popular posts in %s group"
+msgstr "%s గుంపులో జనరంజకమైన టపాలు"
+
+#. TRANS: %1$s is a group name, %2$s is a group number.
+#: groupfavoritedaction.php:51
+#, php-format
+msgid "Popular posts in %1$s group, page %2$d"
+msgstr "%1$s గుంపులో జనరంజకమైన టపాలు, %2$dవ పుట"
+
+#. TRANS: Menu item in the group navigation page.
+#: GroupFavoritedPlugin.php:72
+msgctxt "MENU"
+msgid "Popular"
+msgstr "ప్రాచుర్యం"
+
+#. TRANS: Tooltip for menu item in the group navigation page.
+#. TRANS: %s is the nickname of the group.
+#: GroupFavoritedPlugin.php:75
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Popular notices in %s group"
+msgstr "%s గుంపులో జనరంజకమైన టపాలు"
+
+#. TRANS: Plugin description.
+#: GroupFavoritedPlugin.php:99
+msgid "This plugin adds a menu item for popular notices in groups."
+msgstr ""
diff --git a/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po
index 31a1077bd..4091155de 100644
--- a/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/tl/LC_MESSAGES/GroupFavorited.po
@@ -9,26 +9,26 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Tanyag na mga pagpapaskila sa loob ng pangkat na %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Tanyag na mga pagpapaskila sa loob ng pangkat na %1$s, pahina %2$d"
diff --git a/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po b/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po
index d0a44340a..143c0cae8 100644
--- a/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po
+++ b/plugins/GroupFavorited/locale/uk/LC_MESSAGES/GroupFavorited.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - GroupFavorited\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:41+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:28+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:53+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-groupfavorited\n"
@@ -23,13 +23,13 @@ msgstr ""
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
#. TRANS: %s is a group name.
-#: groupfavoritedaction.php:53
+#: groupfavoritedaction.php:48
#, php-format
msgid "Popular posts in %s group"
msgstr "Популярні повідомлення спільноти %s"
#. TRANS: %1$s is a group name, %2$s is a group number.
-#: groupfavoritedaction.php:56
+#: groupfavoritedaction.php:51
#, php-format
msgid "Popular posts in %1$s group, page %2$d"
msgstr "Популярні повідомлення спільноти %1$s, сторінка %2$d"
diff --git a/plugins/Imap/locale/br/LC_MESSAGES/Imap.po b/plugins/Imap/locale/br/LC_MESSAGES/Imap.po
new file mode 100644
index 000000000..392ee0126
--- /dev/null
+++ b/plugins/Imap/locale/br/LC_MESSAGES/Imap.po
@@ -0,0 +1,54 @@
+# Translation of StatusNet - Imap to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Imap\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:07+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:48+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-imap\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: imapmailhandler.php:30
+msgid "Error"
+msgstr "Fazi"
+
+#: imapmanager.php:51
+msgid ""
+"ImapManager should be created using its constructor, not the using the "
+"static get method."
+msgstr ""
+
+#: ImapPlugin.php:54
+msgid "A mailbox must be specified."
+msgstr "Ur boest lizhiri a rank bezañ spisaet."
+
+#: ImapPlugin.php:57
+msgid "A user must be specified."
+msgstr "Un anv-implijer a rank bezañ spisaet."
+
+#: ImapPlugin.php:60
+msgid "A password must be specified."
+msgstr "Ur ger-tremen a rank bezañ spisaet."
+
+#: ImapPlugin.php:63
+msgid "A poll_frequency must be specified."
+msgstr ""
+
+#: ImapPlugin.php:103
+msgid ""
+"The IMAP plugin allows for StatusNet to check a POP or IMAP mailbox for "
+"incoming mail containing user posts."
+msgstr ""
diff --git a/plugins/LilUrl/locale/de/LC_MESSAGES/LilUrl.po b/plugins/LilUrl/locale/de/LC_MESSAGES/LilUrl.po
new file mode 100644
index 000000000..c1cee1ae4
--- /dev/null
+++ b/plugins/LilUrl/locale/de/LC_MESSAGES/LilUrl.po
@@ -0,0 +1,31 @@
+# Translation of StatusNet - LilUrl to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LilUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:21+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-lilurl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: LilUrlPlugin.php:43
+msgid "A serviceUrl must be specified."
+msgstr "Eine „serviceUrl“ muss angegeben werden."
+
+#: LilUrlPlugin.php:68
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr "Benutzung des <a href=\"http://%1$s/\">%1$s</a>-URL-Kürzungsdienstes."
diff --git a/plugins/LinkPreview/LinkPreviewPlugin.php b/plugins/LinkPreview/LinkPreviewPlugin.php
new file mode 100644
index 000000000..39d2c9bf3
--- /dev/null
+++ b/plugins/LinkPreview/LinkPreviewPlugin.php
@@ -0,0 +1,101 @@
+<?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')) {
+ exit(1);
+}
+
+/**
+ * Some UI extras for now...
+ *
+ * @package LinkPreviewPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+class LinkPreviewPlugin extends Plugin
+{
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'LinkPreview',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => 'http://status.net/wiki/Plugin:LinkPreview',
+ 'rawdescription' =>
+ _m('UI extensions previewing thumbnails from links.'));
+
+ return true;
+ }
+
+ /**
+ * Load JS at runtime if we're logged in.
+ *
+ * @param Action $action
+ * @return boolean hook result
+ */
+ function onEndShowScripts($action)
+ {
+ $user = common_current_user();
+ if ($user && common_config('attachments', 'process_links')) {
+ $action->script('plugins/LinkPreview/linkpreview.js');
+ $data = json_encode(array(
+ 'api' => common_local_url('oembedproxy'),
+ 'width' => common_config('attachments', 'thumbwidth'),
+ 'height' => common_config('attachments', 'thumbheight'),
+ ));
+ $action->inlineScript('$(function() {SN.Init.LinkPreview && SN.Init.LinkPreview('.$data.');})');
+ }
+ return true;
+ }
+
+ /**
+ * Autoloader
+ *
+ * Loads our classes if they're requested.
+ *
+ * @param string $cls Class requested
+ *
+ * @return boolean hook return
+ */
+ function onAutoload($cls)
+ {
+ $lower = strtolower($cls);
+ switch ($lower)
+ {
+ case 'oembedproxyaction':
+ require_once dirname(__FILE__) . '/' . $lower . '.php';
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /**
+ * Hook for RouterInitialized event.
+ *
+ * @param Net_URL_Mapper $m URL mapper
+ *
+ * @return boolean hook return
+ */
+ function onStartInitializeRouter($m)
+ {
+ $m->connect('main/oembed/proxy',
+ array('action' => 'oembedproxy'));
+
+ return true;
+ }
+}
diff --git a/plugins/LinkPreview/linkpreview.js b/plugins/LinkPreview/linkpreview.js
new file mode 100644
index 000000000..0c0eb734e
--- /dev/null
+++ b/plugins/LinkPreview/linkpreview.js
@@ -0,0 +1,194 @@
+/**
+ * (c) 2010 StatusNet, Inc.
+ */
+
+(function() {
+ var oEmbed = {
+ api: 'http://oohembed.com/oohembed',
+ width: 100,
+ height: 75,
+ cache: {},
+ callbacks: {},
+
+ /**
+ * Do a cached oEmbed lookup for the given URL.
+ *
+ * @param {String} url
+ * @param {function} callback
+ */
+ lookup: function(url, callback)
+ {
+ if (typeof oEmbed.cache[url] == "object") {
+ // We already have a successful lookup.
+ callback(oEmbed.cache[url]);
+ } else if (typeof oEmbed.callbacks[url] == "undefined") {
+ // No lookup yet... Start it!
+ oEmbed.callbacks[url] = [callback];
+
+ oEmbed.rawLookup(url, function(data) {
+ oEmbed.cache[url] = data;
+ var callbacks = oEmbed.callbacks[url];
+ oEmbed.callbacks[url] = undefined;
+ for (var i = 0; i < callbacks.length; i++) {
+ callbacks[i](data);
+ }
+ });
+ } else {
+ // A lookup is in progress.
+ oEmbed.callbacks[url].push(callback);
+ }
+ },
+
+ /**
+ * Do an oEmbed lookup for the given URL.
+ *
+ * @fixme proxy through ourselves if possible?
+ * @fixme use the global thumbnail size settings
+ *
+ * @param {String} url
+ * @param {function} callback
+ */
+ rawLookup: function(url, callback)
+ {
+ var params = {
+ url: url,
+ format: 'json',
+ maxwidth: oEmbed.width,
+ maxheight: oEmbed.height,
+ token: $('#token').val()
+ };
+ $.get(oEmbed.api, params, function(data, xhr) {
+ callback(data);
+ }, 'json');
+ }
+ };
+
+ var LinkPreview = {
+ links: [],
+
+ /**
+ * Find URL links from the source text that may be interesting.
+ *
+ * @param {String} text
+ * @return {Array} list of URLs
+ */
+ findLinks: function (text)
+ {
+ // @fixme match this to core code
+ var re = /(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg;
+ var links = [];
+ var matches;
+ while ((matches = re.exec(text)) !== null) {
+ links.push(matches[1]);
+ }
+ return links;
+ },
+
+ /**
+ * Start looking up info for a link preview...
+ * May start async data loads.
+ *
+ * @param {String} id
+ * @param {String} url
+ */
+ prepLinkPreview: function(id, url)
+ {
+ oEmbed.lookup(url, function(data) {
+ var thumb = null;
+ var width = 100;
+ if (typeof data.thumbnail_url == "string") {
+ thumb = data.thumbnail_url;
+ if (typeof data.thumbnail_width !== "undefined") {
+ if (data.thumbnail_width < width) {
+ width = data.thumbnail_width;
+ }
+ }
+ } else if (data.type == 'photo' && typeof data.url == "string") {
+ thumb = data.url;
+ if (typeof data.width !== "undefined") {
+ if (data.width < width) {
+ width = data.width;
+ }
+ }
+ }
+ if (thumb) {
+ var link = $('<span class="inline-attachment"><a><img/></a></span>');
+ link.find('a')
+ .attr('href', url)
+ .attr('target', '_blank')
+ .last()
+ .find('img')
+ .attr('src', thumb)
+ .attr('width', width)
+ .attr('title', data.title || data.url || url);
+ $('#' + id).append(link);
+ }
+ });
+ },
+
+ /**
+ * Update the live preview section with links found in the given text.
+ * May start async data loads.
+ *
+ * @param {String} text: free-form input text
+ */
+ previewLinks: function(text)
+ {
+ var old = LinkPreview.links;
+ var links = LinkPreview.findLinks(text);
+
+ // Check for existing common elements...
+ for (var i = 0; i < old.length && i < links.length; i++) {
+ if (links[i] != old[i]) {
+ // Change an existing entry!
+ var id = 'link-preview-' + i;
+ $('#' + id).html('');
+ LinkPreview.prepLinkPreview(id, links[i]);
+ }
+ }
+ if (links.length > old.length) {
+ // Adding new entries, whee!
+ for (var i = old.length; i < links.length; i++) {
+ var id = 'link-preview-' + i;
+ $('#link-preview').append('<span id="' + id + '"></span>');
+ LinkPreview.prepLinkPreview(id, links[i]);
+ }
+ } else if (old.length > links.length) {
+ // Remove preview entries for links that have been removed.
+ for (var i = links.length; i < old.length; i++) {
+ var id = 'link-preview-' + i;
+ $('#' + id).remove();
+ }
+ }
+
+ LinkPreview.links = links;
+ },
+
+ /**
+ * Clear out any link preview data.
+ */
+ clear: function() {
+ LinkPreview.links = [];
+ $('#link-preview').empty();
+ }
+ };
+
+ SN.Init.LinkPreview = function(params) {
+ if (params.api) oEmbed.api = params.api;
+ if (params.width) oEmbed.width = params.width;
+ if (params.height) oEmbed.height = params.height;
+
+ $('#form_notice')
+ .append('<div id="link-preview" class="thumbnails"></div>')
+ .bind('reset', function() {
+ LinkPreview.clear();
+ });
+
+ // Piggyback on the counter update...
+ var origCounter = SN.U.Counter;
+ SN.U.Counter = function(form) {
+ LinkPreview.previewLinks($('#notice_data-text').val());
+ return origCounter(form);
+ }
+ }
+})();
diff --git a/plugins/LinkPreview/locale/LinkPreview.pot b/plugins/LinkPreview/locale/LinkPreview.pot
new file mode 100644
index 000000000..202060391
--- /dev/null
+++ b/plugins/LinkPreview/locale/LinkPreview.pot
@@ -0,0 +1,21 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: LinkPreviewPlugin.php:39
+msgid "UI extensions previewing thumbnails from links."
+msgstr ""
diff --git a/plugins/LinkPreview/locale/fr/LC_MESSAGES/LinkPreview.po b/plugins/LinkPreview/locale/fr/LC_MESSAGES/LinkPreview.po
new file mode 100644
index 000000000..30ad1b676
--- /dev/null
+++ b/plugins/LinkPreview/locale/fr/LC_MESSAGES/LinkPreview.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - LinkPreview to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LinkPreview\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:34+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-linkpreview\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: LinkPreviewPlugin.php:39
+msgid "UI extensions previewing thumbnails from links."
+msgstr ""
+"Extensions d’interface utilisateur pour prévisualiser des vignettes depuis "
+"les liens."
diff --git a/plugins/LinkPreview/locale/mk/LC_MESSAGES/LinkPreview.po b/plugins/LinkPreview/locale/mk/LC_MESSAGES/LinkPreview.po
new file mode 100644
index 000000000..72de65a42
--- /dev/null
+++ b/plugins/LinkPreview/locale/mk/LC_MESSAGES/LinkPreview.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - LinkPreview to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LinkPreview\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:34+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-linkpreview\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#: LinkPreviewPlugin.php:39
+msgid "UI extensions previewing thumbnails from links."
+msgstr ""
+"Додатоци за корисничкиот посредник што даваат преглед на минијатури од врски."
diff --git a/plugins/LinkPreview/locale/nl/LC_MESSAGES/LinkPreview.po b/plugins/LinkPreview/locale/nl/LC_MESSAGES/LinkPreview.po
new file mode 100644
index 000000000..371d63614
--- /dev/null
+++ b/plugins/LinkPreview/locale/nl/LC_MESSAGES/LinkPreview.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - LinkPreview to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LinkPreview\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:34+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-linkpreview\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: LinkPreviewPlugin.php:39
+msgid "UI extensions previewing thumbnails from links."
+msgstr ""
+"Gebruikersinterfaceuitbreiding voor het weergeven van miniaturen voor "
+"verwijzingen."
diff --git a/plugins/LinkPreview/oembedproxyaction.php b/plugins/LinkPreview/oembedproxyaction.php
new file mode 100644
index 000000000..470f78073
--- /dev/null
+++ b/plugins/LinkPreview/oembedproxyaction.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * StatusNet-only extensions to the Twitter-like API
+ *
+ * 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/>.
+ *
+ * @package StatusNet
+ * @author Brion Vibber <brion@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);
+}
+
+/**
+ * Oembed proxy implementation
+ *
+ * This class provides an interface for our JS-side code to pull info on
+ * links from other sites, using either native oEmbed, our own custom
+ * handlers, or the oohEmbed.com offsite proxy service as configured.
+ *
+ * @category oEmbed
+ * @package StatusNet
+ * @author Brion Vibber <brion@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/
+ */
+
+class OembedproxyAction extends OembedAction
+{
+
+ function handle($args)
+ {
+ // We're not a general oEmbed proxy service; limit to valid sessions.
+ $token = $this->trimmed('token');
+ if (!$token || $token != common_session_token()) {
+ $this->clientError(_('There was a problem with your session token. '.
+ 'Try again, please.'));
+ }
+
+ $format = $this->arg('format');
+ if ($format && $format != 'json') {
+ throw new ClientException('Invalid format; only JSON supported.');
+ }
+
+ $url = $this->arg('url');
+ if (!common_valid_http_url($url)) {
+ throw new ClientException('Invalid URL.');
+ }
+
+ $params = array();
+ if ($this->arg('maxwidth')) {
+ $params['maxwidth'] = $this->arg('maxwidth');
+ }
+ if ($this->arg('maxheight')) {
+ $params['maxheight'] = $this->arg('maxheight');
+ }
+
+ $data = oEmbedHelper::getObject($url, $params);
+
+ $this->init_document('json');
+ print json_encode($data);
+ }
+
+}
diff --git a/plugins/LogFilter/LogFilterPlugin.php b/plugins/LogFilter/LogFilterPlugin.php
new file mode 100644
index 000000000..e2153e959
--- /dev/null
+++ b/plugins/LogFilter/LogFilterPlugin.php
@@ -0,0 +1,94 @@
+<?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')) {
+ exit(1);
+}
+
+/**
+ * Example to disable all debug messages and those containing 'About to push':
+ * addPlugin('LogFilter', array(
+ * 'priority' => array(LOG_DEBUG => false),
+ * 'regex' => array('/About to push/' => false)
+ * ));
+ *
+ * @todo add an admin panel
+ *
+ * @package LogFilterPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+class LogFilterPlugin extends Plugin
+{
+ public $default = true; // Set to false to require opting things in
+ public $priority = array(); // override by priority: array(LOG_ERR => true, LOG_DEBUG => false)
+ public $regex = array(); // override by regex match of message: array('/twitter/i' => false)
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'LogFilter',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => 'http://status.net/wiki/Plugin:LogFilter',
+ 'rawdescription' =>
+ _m('Provides server-side setting to filter log output by type or keyword.'));
+
+ return true;
+ }
+
+ /**
+ * Hook for the StartLog event in common_log().
+ * If a message doesn't pass our filters, we'll abort it.
+ *
+ * @param string $priority
+ * @param string $msg
+ * @param string $filename
+ * @return boolean hook result code
+ */
+ function onStartLog(&$priority, &$msg, &$filename)
+ {
+ if ($this->filter($priority, $msg)) {
+ // Let it through
+ return true;
+ } else {
+ // Abort -- this line will go to /dev/null :)
+ return false;
+ }
+ }
+
+ /**
+ * Do the filtering...
+ *
+ * @param string $priority
+ * @param string $msg
+ * @return boolean true to let the log message be processed
+ */
+ function filter($priority, $msg)
+ {
+ $state = $this->default;
+ if (array_key_exists($priority, $this->priority)) {
+ $state = $this->priority[$priority];
+ }
+ foreach ($this->regex as $regex => $override) {
+ if (preg_match($regex, $msg)) {
+ $state = $override;
+ }
+ }
+ return $state;
+ }
+}
diff --git a/plugins/LogFilter/locale/LogFilter.pot b/plugins/LogFilter/locale/LogFilter.pot
new file mode 100644
index 000000000..5e75144e0
--- /dev/null
+++ b/plugins/LogFilter/locale/LogFilter.pot
@@ -0,0 +1,21 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: LogFilterPlugin.php:49
+msgid "Provides server-side setting to filter log output by type or keyword."
+msgstr ""
diff --git a/plugins/LogFilter/locale/fr/LC_MESSAGES/LogFilter.po b/plugins/LogFilter/locale/fr/LC_MESSAGES/LogFilter.po
new file mode 100644
index 000000000..e80766b87
--- /dev/null
+++ b/plugins/LogFilter/locale/fr/LC_MESSAGES/LogFilter.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - LogFilter to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LogFilter\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:35+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:50+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-logfilter\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: LogFilterPlugin.php:49
+msgid "Provides server-side setting to filter log output by type or keyword."
+msgstr ""
+"Fournit une configuration côté serveur pour filtrer la sortie du journal "
+"d’activité par type ou par mot-clé."
diff --git a/plugins/LogFilter/locale/mk/LC_MESSAGES/LogFilter.po b/plugins/LogFilter/locale/mk/LC_MESSAGES/LogFilter.po
new file mode 100644
index 000000000..3dcd8b888
--- /dev/null
+++ b/plugins/LogFilter/locale/mk/LC_MESSAGES/LogFilter.po
@@ -0,0 +1,28 @@
+# Translation of StatusNet - LogFilter to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LogFilter\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:35+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:50+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-logfilter\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#: LogFilterPlugin.php:49
+msgid "Provides server-side setting to filter log output by type or keyword."
+msgstr ""
+"Овозможува поставка кај опслужувачот за филтрирање на дневничките изводи по "
+"тип или клучен збор."
diff --git a/plugins/LogFilter/locale/nl/LC_MESSAGES/LogFilter.po b/plugins/LogFilter/locale/nl/LC_MESSAGES/LogFilter.po
new file mode 100644
index 000000000..4fe9d9c5c
--- /dev/null
+++ b/plugins/LogFilter/locale/nl/LC_MESSAGES/LogFilter.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - LogFilter to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - LogFilter\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:35+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:50+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-logfilter\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: LogFilterPlugin.php:49
+msgid "Provides server-side setting to filter log output by type or keyword."
+msgstr ""
+"Biedt serverinstellingen om logboekuitvoer te filteren op type of trefwoord."
diff --git a/plugins/Mapstraction/MapstractionPlugin.php b/plugins/Mapstraction/MapstractionPlugin.php
index d5261d8bc..5ad25763e 100644
--- a/plugins/Mapstraction/MapstractionPlugin.php
+++ b/plugins/Mapstraction/MapstractionPlugin.php
@@ -67,10 +67,10 @@ class MapstractionPlugin extends Plugin
{
$m->connect(':nickname/all/map',
array('action' => 'allmap'),
- array('nickname' => '['.NICKNAME_FMT.']{1,64}'));
+ array('nickname' => Nickname::DISPLAY_FMT));
$m->connect(':nickname/map',
array('action' => 'usermap'),
- array('nickname' => '['.NICKNAME_FMT.']{1,64}'));
+ array('nickname' => Nickname::DISPLAY_FMT));
return true;
}
diff --git a/plugins/Mapstraction/allmap.php b/plugins/Mapstraction/allmap.php
index 6e2e1d122..62d8d0445 100644
--- a/plugins/Mapstraction/allmap.php
+++ b/plugins/Mapstraction/allmap.php
@@ -61,12 +61,7 @@ class AllmapAction extends MapAction
function title()
{
- if (!empty($this->profile->fullname)) {
- // @todo FIXME: Bad i18n. Should be "%1$s (%2$s)".
- $base = $this->profile->fullname . ' (' . $this->user->nickname . ') ';
- } else {
- $base = $this->user->nickname;
- }
+ $base = $this->profile->getFancyName();
if ($this->page == 1) {
// TRANS: Page title.
diff --git a/plugins/Mapstraction/locale/Mapstraction.pot b/plugins/Mapstraction/locale/Mapstraction.pot
index 292a541c0..ba15f7044 100644
--- a/plugins/Mapstraction/locale/Mapstraction.pot
+++ b/plugins/Mapstraction/locale/Mapstraction.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,16 +16,16 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr ""
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr ""
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -41,19 +41,19 @@ msgstr ""
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr ""
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr ""
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr ""
diff --git a/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po
index 6552915b9..64150e661 100644
--- a/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/br/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:46+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Kartenn"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr ""
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -46,19 +46,19 @@ msgstr "An implijer-mañ n'eus profil ebet dezhañ."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Kartenn mignoned %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, fuzzy, php-format
msgid "%1$s friends map, page %2$d"
msgstr "%s gartenn, pajenn %d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "%s gartenn, pajenn %d"
diff --git a/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po
index 0299a5d15..d5d69e6df 100644
--- a/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/de/LC_MESSAGES/Mapstraction.po
@@ -10,28 +10,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:46+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Karte"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "in voller Größe"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -49,19 +49,19 @@ msgstr "Benutzer hat kein Profil."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Karte der Freunde von %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Karte der Freunde von %1$s, Seite %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "%s-Karte, Seite %d"
diff --git a/plugins/Mapstraction/locale/es/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/es/LC_MESSAGES/Mapstraction.po
new file mode 100644
index 000000000..3b1ab9e91
--- /dev/null
+++ b/plugins/Mapstraction/locale/es/LC_MESSAGES/Mapstraction.po
@@ -0,0 +1,65 @@
+# Translation of StatusNet - Mapstraction to Spanish (Español)
+# Expored from translatewiki.net
+#
+# Author: Locos epraix
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Mapstraction\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:18+0000\n"
+"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:16+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: es\n"
+"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MapstractionPlugin.php:179
+msgid "Map"
+msgstr "Mapa"
+
+#. TRANS: Clickable item to allow opening the map in full size.
+#: MapstractionPlugin.php:191
+msgid "Full size"
+msgstr ""
+
+#: MapstractionPlugin.php:203
+msgid ""
+"Show maps of users' and friends' notices with <a href=\"http://www."
+"mapstraction.com/\">Mapstraction</a>."
+msgstr ""
+
+#: map.php:72
+msgid "No such user."
+msgstr ""
+
+#: map.php:79
+msgid "User has no profile."
+msgstr "Usuario no tiene perfil."
+
+#. TRANS: Page title.
+#. TRANS: %s is a user nickname.
+#: allmap.php:69
+#, php-format
+msgid "%s friends map"
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %1$s is a user nickname, %2$d is a page number.
+#: allmap.php:75
+#, php-format
+msgid "%1$s friends map, page %2$d"
+msgstr ""
+
+#: usermap.php:68
+#, php-format
+msgid "%s map, page %d"
+msgstr ""
diff --git a/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po
index 8e6007152..f7edafd26 100644
--- a/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/fi/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Kartta"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Täysi koko"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -46,19 +46,19 @@ msgstr "Käyttäjällä ei ole profiilia."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Kartta käyttäjän %s ystävistä"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, fuzzy, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Kartta käyttäjän %s ystävistä"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr ""
diff --git a/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po
index a75da34ec..29553119a 100644
--- a/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/fr/LC_MESSAGES/Mapstraction.po
@@ -10,28 +10,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Cartographie"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Pleine taille"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -49,19 +49,19 @@ msgstr "Aucun profil ne correspond à cet utilisateur."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Carte des amis de %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Carte des amis de %1$s, page %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "Carte %s, page %d"
diff --git a/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po
index 5df0d1404..5cbed8711 100644
--- a/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/gl/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: gl\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Mapa"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Tamaño completo"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -46,19 +46,19 @@ msgstr "O usuario non ten perfil."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr ""
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr ""
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr ""
diff --git a/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po
index 72249a654..4f0b76a3d 100644
--- a/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/ia/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Mappa"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Dimension complete"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -48,19 +48,19 @@ msgstr "Le usator non ha un profilo."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Mappa del amicos de %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Mappa de amicos de %1$s, pagina %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "Mappa de %s, pagina %d"
diff --git a/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po
index cf7be70ab..7b5e5d61d 100644
--- a/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/mk/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Карта"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Полна големина"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -48,19 +48,19 @@ msgstr "Корисникот нема профил."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Карта на пријатели на %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Карта на пријатели на %1$s, страница %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "Карта на %s, стр. %d"
diff --git a/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po
index b478de888..aac4b3087 100644
--- a/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/nb/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Kart"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Full størrelse"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -48,19 +48,19 @@ msgstr "Bruker har ingen profil."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "%s vennekart"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "%1$s vennekart, side %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "%s kart, side %d"
diff --git a/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po
index fdc68490e..e46f581ff 100644
--- a/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/nl/LC_MESSAGES/Mapstraction.po
@@ -10,28 +10,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:25+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Kaart"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Groter"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -49,19 +49,19 @@ msgstr "Deze gebruiker heeft geen profiel."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Kaart van %s en vrienden"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Kaart van vrienden van %1$s, pagina %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "Kaart van %s, pagina %d"
diff --git a/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po
index 93ad72cc3..8fe7dc8f0 100644
--- a/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/ru/LC_MESSAGES/Mapstraction.po
@@ -9,29 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\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"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Карта"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Полный размер"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -47,19 +47,19 @@ msgstr "У пользователя нет профиля."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Карта друзей: %s"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, fuzzy, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Карта друзей: %s"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr ""
diff --git a/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po
index 301117348..b6b98ad46 100644
--- a/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/ta/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: Tamil <http://translatewiki.net/wiki/Portal:ta>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ta\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "வரைபடம்"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "முழு அளவு"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -46,19 +46,19 @@ msgstr ""
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr ""
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr ""
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr ""
diff --git a/plugins/Mapstraction/locale/te/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/te/LC_MESSAGES/Mapstraction.po
new file mode 100644
index 000000000..e9e6b6313
--- /dev/null
+++ b/plugins/Mapstraction/locale/te/LC_MESSAGES/Mapstraction.po
@@ -0,0 +1,64 @@
+# Translation of StatusNet - Mapstraction to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Mapstraction\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:19+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:16+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MapstractionPlugin.php:179
+msgid "Map"
+msgstr "పటం"
+
+#. TRANS: Clickable item to allow opening the map in full size.
+#: MapstractionPlugin.php:191
+msgid "Full size"
+msgstr "పూర్తి పరిమాణం"
+
+#: MapstractionPlugin.php:203
+msgid ""
+"Show maps of users' and friends' notices with <a href=\"http://www."
+"mapstraction.com/\">Mapstraction</a>."
+msgstr ""
+
+#: map.php:72
+msgid "No such user."
+msgstr ""
+
+#: map.php:79
+msgid "User has no profile."
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %s is a user nickname.
+#: allmap.php:69
+#, php-format
+msgid "%s friends map"
+msgstr ""
+
+#. TRANS: Page title.
+#. TRANS: %1$s is a user nickname, %2$d is a page number.
+#: allmap.php:75
+#, php-format
+msgid "%1$s friends map, page %2$d"
+msgstr ""
+
+#: usermap.php:68
+#, php-format
+msgid "%s map, page %d"
+msgstr ""
diff --git a/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po
index 49d27836b..c1977a7d5 100644
--- a/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/tl/LC_MESSAGES/Mapstraction.po
@@ -9,28 +9,28 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Mapa"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Buong sukat"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -48,19 +48,19 @@ msgstr "Walang balangkas ang tagagamit."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "%s na mapa ng mga kaibigan"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr " %1$s mapa ng mga kaibigan, pahina %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "%s na mapa, pahina %d"
diff --git a/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po
index 9a43d791e..4e8bcd463 100644
--- a/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/uk/LC_MESSAGES/Mapstraction.po
@@ -9,29 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\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"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "Мапа"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "Повний розмір"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -49,19 +49,19 @@ msgstr "Користувач не має профілю."
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "Мапа друзів %s."
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "Мапа друзів %1$s, сторінка %2$d"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "Мапа друзів %s, сторінка %d"
diff --git a/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po b/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po
index 47f07d159..e9c2fba78 100644
--- a/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po
+++ b/plugins/Mapstraction/locale/zh_CN/LC_MESSAGES/Mapstraction.po
@@ -9,29 +9,29 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Mapstraction\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
"hans>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:29:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:30:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: #out-statusnet-plugin-mapstraction\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: MapstractionPlugin.php:178
+#: MapstractionPlugin.php:179
msgid "Map"
msgstr "地图"
#. TRANS: Clickable item to allow opening the map in full size.
-#: MapstractionPlugin.php:190
+#: MapstractionPlugin.php:191
msgid "Full size"
msgstr "完整尺寸"
-#: MapstractionPlugin.php:202
+#: MapstractionPlugin.php:203
msgid ""
"Show maps of users' and friends' notices with <a href=\"http://www."
"mapstraction.com/\">Mapstraction</a>."
@@ -49,19 +49,19 @@ msgstr "用户没有个人信息。"
#. TRANS: Page title.
#. TRANS: %s is a user nickname.
-#: allmap.php:74
+#: allmap.php:69
#, php-format
msgid "%s friends map"
msgstr "%s 好友地图"
#. TRANS: Page title.
#. TRANS: %1$s is a user nickname, %2$d is a page number.
-#: allmap.php:80
+#: allmap.php:75
#, php-format
msgid "%1$s friends map, page %2$d"
msgstr "%1$s 好友地图,第 %2$d 页。"
-#: usermap.php:73
+#: usermap.php:68
#, php-format
msgid "%s map, page %d"
msgstr "%s 地图,第 %d 页"
diff --git a/plugins/Mapstraction/map.php b/plugins/Mapstraction/map.php
index 50ff82b67..dbba4edd0 100644
--- a/plugins/Mapstraction/map.php
+++ b/plugins/Mapstraction/map.php
@@ -53,7 +53,7 @@ class MapAction extends OwnerDesignAction
parent::prepare($args);
$nickname_arg = $this->arg('nickname');
- $nickname = common_canonical_nickname($nickname_arg);
+ $nickname = Nickname::normalize($nickname_arg);
// Permanent redirect on non-canonical nickname
diff --git a/plugins/Mapstraction/usermap.php b/plugins/Mapstraction/usermap.php
index 0ee956159..54412146e 100644
--- a/plugins/Mapstraction/usermap.php
+++ b/plugins/Mapstraction/usermap.php
@@ -58,12 +58,7 @@ class UsermapAction extends MapAction
function title()
{
- if (!empty($this->profile->fullname)) {
- // @todo FIXME: Bad i18n. Should be '%1$s (%2$s)'
- $base = $this->profile->fullname . ' (' . $this->user->nickname . ')';
- } else {
- $base = $this->user->nickname;
- }
+ $base = $this->profile->getFancyName();
if ($this->page == 1) {
// @todo CHECKME: inconsisten with paged variant below. " map" missing.
diff --git a/plugins/Memcache/locale/de/LC_MESSAGES/Memcache.po b/plugins/Memcache/locale/de/LC_MESSAGES/Memcache.po
index 2b8a4bbb9..c590f0f2b 100644
--- a/plugins/Memcache/locale/de/LC_MESSAGES/Memcache.po
+++ b/plugins/Memcache/locale/de/LC_MESSAGES/Memcache.po
@@ -2,6 +2,7 @@
# Expored from translatewiki.net
#
# Author: Apmon
+# Author: The Evil IP address
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -9,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Memcache\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:47+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:26+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:57:05+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:12:53+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-memcache\n"
@@ -25,5 +26,5 @@ msgstr ""
msgid ""
"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
msgstr ""
-"Verwende <a href=\"http://memcached.org/\">Memcached</a> um Anfragen "
-"zwischenzuspeichern"
+"Verwendung von <a href=\"http://memcached.org/\">Memcached</a> zur "
+"Zwischenspeicherung von Anfragen"
diff --git a/plugins/Memcached/locale/de/LC_MESSAGES/Memcached.po b/plugins/Memcached/locale/de/LC_MESSAGES/Memcached.po
new file mode 100644
index 000000000..8dec70860
--- /dev/null
+++ b/plugins/Memcached/locale/de/LC_MESSAGES/Memcached.po
@@ -0,0 +1,29 @@
+# Translation of StatusNet - Memcached to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Memcached\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:30+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:35:21+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-memcached\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MemcachedPlugin.php:218
+msgid ""
+"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
+msgstr ""
+"Verwendung von <a href=\"http://memcached.org/\">Memcached</a> zur "
+"Zwischenspeicherung von Anfragen"
diff --git a/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po b/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po
new file mode 100644
index 000000000..fea6080bc
--- /dev/null
+++ b/plugins/Memcached/locale/ja/LC_MESSAGES/Memcached.po
@@ -0,0 +1,29 @@
+# Translation of StatusNet - Memcached to Japanese (日本語)
+# Expored from translatewiki.net
+#
+# Author: Iwai.masaharu
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Memcached\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:31+0000\n"
+"Language-Team: Japanese <http://translatewiki.net/wiki/Portal:ja>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:53+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ja\n"
+"X-Message-Group: #out-statusnet-plugin-memcached\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: MemcachedPlugin.php:218
+msgid ""
+"Use <a href=\"http://memcached.org/\">Memcached</a> to cache query results."
+msgstr ""
+"クエリー結果のキャッシュに <a href=\"http://memcached.org/\">Memcached</a> を"
+"使う"
diff --git a/plugins/Meteor/MeteorPlugin.php b/plugins/Meteor/MeteorPlugin.php
index a48c52b56..1bdccae7a 100644
--- a/plugins/Meteor/MeteorPlugin.php
+++ b/plugins/Meteor/MeteorPlugin.php
@@ -89,7 +89,7 @@ class MeteorPlugin extends RealtimePlugin
{
$scripts = parent::_getScripts();
$scripts[] = 'http://'.$this->webserver.(($this->webport == 80) ? '':':'.$this->webport).'/meteor.js';
- $scripts[] = common_path('plugins/Meteor/meteorupdater.js');
+ $scripts[] = common_path('plugins/Meteor/meteorupdater.min.js');
return $scripts;
}
diff --git a/plugins/Meteor/locale/br/LC_MESSAGES/Meteor.po b/plugins/Meteor/locale/br/LC_MESSAGES/Meteor.po
new file mode 100644
index 000000000..3a18c2f91
--- /dev/null
+++ b/plugins/Meteor/locale/br/LC_MESSAGES/Meteor.po
@@ -0,0 +1,38 @@
+# Translation of StatusNet - Meteor to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Meteor\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:21+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:18+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-meteor\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Exception. %1$s is the control server, %2$s is the control port.
+#: MeteorPlugin.php:115
+#, php-format
+msgid "Couldn't connect to %1$s on %2$s."
+msgstr "Dibosupl eo kevreañ ouzh %1$s war %2$s."
+
+#. TRANS: Exception. %s is the Meteor message that could not be added.
+#: MeteorPlugin.php:128
+#, php-format
+msgid "Error adding meteor message \"%s\""
+msgstr ""
+
+#: MeteorPlugin.php:158
+msgid "Plugin to do \"real time\" updates using Comet/Bayeux."
+msgstr ""
diff --git a/plugins/Meteor/locale/de/LC_MESSAGES/Meteor.po b/plugins/Meteor/locale/de/LC_MESSAGES/Meteor.po
new file mode 100644
index 000000000..1eeb0372c
--- /dev/null
+++ b/plugins/Meteor/locale/de/LC_MESSAGES/Meteor.po
@@ -0,0 +1,38 @@
+# Translation of StatusNet - Meteor to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Meteor\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:33+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:12:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-meteor\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Exception. %1$s is the control server, %2$s is the control port.
+#: MeteorPlugin.php:115
+#, php-format
+msgid "Couldn't connect to %1$s on %2$s."
+msgstr "Konnte nicht mit %1$s auf %2$s verbinden."
+
+#. TRANS: Exception. %s is the Meteor message that could not be added.
+#: MeteorPlugin.php:128
+#, php-format
+msgid "Error adding meteor message \"%s\""
+msgstr "Fehler beim Hinzufügen der Meteor-Nachricht „%s“"
+
+#: MeteorPlugin.php:158
+msgid "Plugin to do \"real time\" updates using Comet/Bayeux."
+msgstr "Plugin für Echtzeit-Aktualisierungen mit Comet/Bayeux."
diff --git a/plugins/Meteor/meteorupdater.min.js b/plugins/Meteor/meteorupdater.min.js
new file mode 100644
index 000000000..61928ab4f
--- /dev/null
+++ b/plugins/Meteor/meteorupdater.min.js
@@ -0,0 +1 @@
+var MeteorUpdater=function(){return{init:function(c,a,b){Meteor.callbacks.process=function(d){RealtimeUpdate.receive(JSON.parse(d))};Meteor.host=c;Meteor.port=a;Meteor.joinChannel(b,0);Meteor.connect()}}}(); \ No newline at end of file
diff --git a/plugins/MobileProfile/locale/es/LC_MESSAGES/MobileProfile.po b/plugins/MobileProfile/locale/es/LC_MESSAGES/MobileProfile.po
new file mode 100644
index 000000000..68091bd5b
--- /dev/null
+++ b/plugins/MobileProfile/locale/es/LC_MESSAGES/MobileProfile.po
@@ -0,0 +1,78 @@
+# Translation of StatusNet - MobileProfile to Spanish (Español)
+# Expored from translatewiki.net
+#
+# Author: Locos epraix
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - MobileProfile\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:23+0000\n"
+"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:19+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: es\n"
+"X-Message-Group: #out-statusnet-plugin-mobileprofile\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MobileProfilePlugin.php:193
+msgid "This page is not available in a media type you accept."
+msgstr ""
+
+#: MobileProfilePlugin.php:310
+msgid "Home"
+msgstr ""
+
+#: MobileProfilePlugin.php:312
+msgid "Account"
+msgstr "Cuenta"
+
+#: MobileProfilePlugin.php:314
+msgid "Connect"
+msgstr "Conectar"
+
+#: MobileProfilePlugin.php:317
+msgid "Admin"
+msgstr ""
+
+#: MobileProfilePlugin.php:317
+msgid "Change site configuration"
+msgstr ""
+
+#: MobileProfilePlugin.php:321
+msgid "Invite"
+msgstr "Invitar"
+
+#: MobileProfilePlugin.php:324
+msgid "Logout"
+msgstr "Cerrar sesión"
+
+#: MobileProfilePlugin.php:328
+msgid "Register"
+msgstr ""
+
+#: MobileProfilePlugin.php:331
+msgid "Login"
+msgstr ""
+
+#: MobileProfilePlugin.php:335
+msgid "Search"
+msgstr ""
+
+#: MobileProfilePlugin.php:361
+msgid "Attach"
+msgstr ""
+
+#: MobileProfilePlugin.php:365
+msgid "Attach a file"
+msgstr ""
+
+#: MobileProfilePlugin.php:417
+msgid "XHTML MobileProfile output for supporting user agents."
+msgstr ""
diff --git a/plugins/MobileProfile/locale/ps/LC_MESSAGES/MobileProfile.po b/plugins/MobileProfile/locale/ps/LC_MESSAGES/MobileProfile.po
new file mode 100644
index 000000000..28d74d481
--- /dev/null
+++ b/plugins/MobileProfile/locale/ps/LC_MESSAGES/MobileProfile.po
@@ -0,0 +1,78 @@
+# Translation of StatusNet - MobileProfile to Pashto (پښتو)
+# Expored from translatewiki.net
+#
+# Author: Ahmed-Najib-Biabani-Ibrahimkhel
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - MobileProfile\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:23+0000\n"
+"Language-Team: Pashto <http://translatewiki.net/wiki/Portal:ps>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:19+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ps\n"
+"X-Message-Group: #out-statusnet-plugin-mobileprofile\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MobileProfilePlugin.php:193
+msgid "This page is not available in a media type you accept."
+msgstr ""
+
+#: MobileProfilePlugin.php:310
+msgid "Home"
+msgstr "کور"
+
+#: MobileProfilePlugin.php:312
+msgid "Account"
+msgstr ""
+
+#: MobileProfilePlugin.php:314
+msgid "Connect"
+msgstr ""
+
+#: MobileProfilePlugin.php:317
+msgid "Admin"
+msgstr ""
+
+#: MobileProfilePlugin.php:317
+msgid "Change site configuration"
+msgstr ""
+
+#: MobileProfilePlugin.php:321
+msgid "Invite"
+msgstr ""
+
+#: MobileProfilePlugin.php:324
+msgid "Logout"
+msgstr "وتل"
+
+#: MobileProfilePlugin.php:328
+msgid "Register"
+msgstr ""
+
+#: MobileProfilePlugin.php:331
+msgid "Login"
+msgstr "ننوتل"
+
+#: MobileProfilePlugin.php:335
+msgid "Search"
+msgstr "پلټل"
+
+#: MobileProfilePlugin.php:361
+msgid "Attach"
+msgstr ""
+
+#: MobileProfilePlugin.php:365
+msgid "Attach a file"
+msgstr ""
+
+#: MobileProfilePlugin.php:417
+msgid "XHTML MobileProfile output for supporting user agents."
+msgstr ""
diff --git a/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po b/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po
new file mode 100644
index 000000000..e42e36be8
--- /dev/null
+++ b/plugins/MobileProfile/locale/te/LC_MESSAGES/MobileProfile.po
@@ -0,0 +1,78 @@
+# Translation of StatusNet - MobileProfile to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - MobileProfile\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:36+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:50+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-mobileprofile\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: MobileProfilePlugin.php:193
+msgid "This page is not available in a media type you accept."
+msgstr ""
+
+#: MobileProfilePlugin.php:310
+msgid "Home"
+msgstr "ముంగిలి"
+
+#: MobileProfilePlugin.php:312
+msgid "Account"
+msgstr "ఖాతా"
+
+#: MobileProfilePlugin.php:314
+msgid "Connect"
+msgstr ""
+
+#: MobileProfilePlugin.php:317
+msgid "Admin"
+msgstr ""
+
+#: MobileProfilePlugin.php:317
+msgid "Change site configuration"
+msgstr ""
+
+#: MobileProfilePlugin.php:321
+msgid "Invite"
+msgstr "ఆహ్వానించు"
+
+#: MobileProfilePlugin.php:324
+msgid "Logout"
+msgstr "నిష్క్రమించండి"
+
+#: MobileProfilePlugin.php:328
+msgid "Register"
+msgstr "నమోదవ్వండి"
+
+#: MobileProfilePlugin.php:331
+msgid "Login"
+msgstr "ప్రవేశించండి"
+
+#: MobileProfilePlugin.php:335
+msgid "Search"
+msgstr "వెతుకు"
+
+#: MobileProfilePlugin.php:361
+msgid "Attach"
+msgstr ""
+
+#: MobileProfilePlugin.php:365
+msgid "Attach a file"
+msgstr ""
+
+#: MobileProfilePlugin.php:417
+msgid "XHTML MobileProfile output for supporting user agents."
+msgstr ""
diff --git a/plugins/ModHelper/locale/es/LC_MESSAGES/ModHelper.po b/plugins/ModHelper/locale/es/LC_MESSAGES/ModHelper.po
new file mode 100644
index 000000000..fc9306762
--- /dev/null
+++ b/plugins/ModHelper/locale/es/LC_MESSAGES/ModHelper.po
@@ -0,0 +1,29 @@
+# Translation of StatusNet - ModHelper to Spanish (Español)
+# Expored from translatewiki.net
+#
+# Author: Locos epraix
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ModHelper\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:37+0000\n"
+"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: es\n"
+"X-Message-Group: #out-statusnet-plugin-modhelper\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ModHelperPlugin.php:37
+msgid ""
+"Lets users who have been manually marked as \"modhelper\"s silence accounts."
+msgstr ""
+"Permite a los usuarios que han sido marcados manualmente como \"modhelper\" "
+"silenciar cuentas."
diff --git a/plugins/ModPlus/locale/ModPlus.pot b/plugins/ModPlus/locale/ModPlus.pot
new file mode 100644
index 000000000..025b521a0
--- /dev/null
+++ b/plugins/ModPlus/locale/ModPlus.pot
@@ -0,0 +1,43 @@
+# 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-11-29 15:37+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ModPlusPlugin.php:39
+msgid "UI extensions for profile moderation actions."
+msgstr ""
+
+#: ModPlusPlugin.php:110
+msgid "Remote profile options..."
+msgstr ""
+
+#: remoteprofileaction.php:51
+#, php-format
+msgid "%s on %s"
+msgstr ""
+
+#: remoteprofileaction.php:62
+#, php-format
+msgid ""
+"This remote profile is registered on another site; see [%s's original "
+"profile page on %s](%s)."
+msgstr ""
+
+#: remoteprofileaction.php:70
+msgid ""
+"Site moderators have silenced this profile, which prevents delivery of new "
+"messages to any users on this site."
+msgstr ""
diff --git a/plugins/ModPlus/locale/fr/LC_MESSAGES/ModPlus.po b/plugins/ModPlus/locale/fr/LC_MESSAGES/ModPlus.po
new file mode 100644
index 000000000..5cf777ed6
--- /dev/null
+++ b/plugins/ModPlus/locale/fr/LC_MESSAGES/ModPlus.po
@@ -0,0 +1,54 @@
+# Translation of StatusNet - ModPlus to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ModPlus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:41+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-modplus\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: ModPlusPlugin.php:39
+msgid "UI extensions for profile moderation actions."
+msgstr ""
+"Extensions d’interface utilisateur pour les actions de modération des "
+"profils."
+
+#: ModPlusPlugin.php:110
+msgid "Remote profile options..."
+msgstr "Options de profil distantes..."
+
+#: remoteprofileaction.php:51
+#, php-format
+msgid "%s on %s"
+msgstr "%s sur %s"
+
+#: remoteprofileaction.php:62
+#, php-format
+msgid ""
+"This remote profile is registered on another site; see [%s's original "
+"profile page on %s](%s)."
+msgstr ""
+"Ce profil distant est enregistré sur un autre site ; voir [la page de profil "
+"originale de %s sur %s] (%s)."
+
+#: remoteprofileaction.php:70
+msgid ""
+"Site moderators have silenced this profile, which prevents delivery of new "
+"messages to any users on this site."
+msgstr ""
+"Les modérateurs du site ont réduit ce profil au silence, ce qui empêche "
+"l’envoi de nouveaux messages aux utilisateurs de ce site."
diff --git a/plugins/ModPlus/locale/mk/LC_MESSAGES/ModPlus.po b/plugins/ModPlus/locale/mk/LC_MESSAGES/ModPlus.po
new file mode 100644
index 000000000..d14db652a
--- /dev/null
+++ b/plugins/ModPlus/locale/mk/LC_MESSAGES/ModPlus.po
@@ -0,0 +1,54 @@
+# Translation of StatusNet - ModPlus to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ModPlus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:41+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-modplus\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#: ModPlusPlugin.php:39
+msgid "UI extensions for profile moderation actions."
+msgstr ""
+"Додатоци за кориснички посредник наменети за постапки за административна "
+"контрола на профили."
+
+#: ModPlusPlugin.php:110
+msgid "Remote profile options..."
+msgstr "Нагодувања на далечински профил..."
+
+#: remoteprofileaction.php:51
+#, php-format
+msgid "%s on %s"
+msgstr "%s на %s"
+
+#: remoteprofileaction.php:62
+#, php-format
+msgid ""
+"This remote profile is registered on another site; see [%s's original "
+"profile page on %s](%s)."
+msgstr ""
+"Овој далечински профил е регистриран на друго мреж. место. Погледајте ја [%"
+"s's изворната профилна страница на %s](%s)."
+
+#: remoteprofileaction.php:70
+msgid ""
+"Site moderators have silenced this profile, which prevents delivery of new "
+"messages to any users on this site."
+msgstr ""
+"Администраторите го замолчиле овој профил, што оневозможува праќање нови "
+"пораки на било кој корисник на мрежното место."
diff --git a/plugins/ModPlus/locale/nl/LC_MESSAGES/ModPlus.po b/plugins/ModPlus/locale/nl/LC_MESSAGES/ModPlus.po
new file mode 100644
index 000000000..2cc8b5b4d
--- /dev/null
+++ b/plugins/ModPlus/locale/nl/LC_MESSAGES/ModPlus.po
@@ -0,0 +1,54 @@
+# Translation of StatusNet - ModPlus to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ModPlus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:57:41+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 20:20:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-modplus\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ModPlusPlugin.php:39
+msgid "UI extensions for profile moderation actions."
+msgstr ""
+"Uitbreiding van de gebruikersinterface voor handelingen ten aanzien van "
+"profielmoderatie."
+
+#: ModPlusPlugin.php:110
+msgid "Remote profile options..."
+msgstr "Instellingen voor profiel op andere server..."
+
+#: remoteprofileaction.php:51
+#, php-format
+msgid "%s on %s"
+msgstr "%s op %s"
+
+#: remoteprofileaction.php:62
+#, php-format
+msgid ""
+"This remote profile is registered on another site; see [%s's original "
+"profile page on %s](%s)."
+msgstr ""
+"Dit profiel op een andere server is geregistreerd bij een andere site. Zie "
+"[de originele profielpagina van %s op %s](%s)."
+
+#: remoteprofileaction.php:70
+msgid ""
+"Site moderators have silenced this profile, which prevents delivery of new "
+"messages to any users on this site."
+msgstr ""
+"Moderatoren van de site hebben dit profiel het zwijgen opgeleverd waardoor "
+"nieuwe berichten zenden aan gebruikers van deze site niet mogelijk is."
diff --git a/plugins/NoticeTitle/NoticeTitlePlugin.php b/plugins/NoticeTitle/NoticeTitlePlugin.php
index a3b4489f2..054c3d3e4 100644
--- a/plugins/NoticeTitle/NoticeTitlePlugin.php
+++ b/plugins/NoticeTitle/NoticeTitlePlugin.php
@@ -259,12 +259,17 @@ class NoticeTitlePlugin extends Plugin
* @return boolean hook value
*/
- function onStartActivityTitle(&$notice, &$xs, &$output)
+ function onEndNoticeAsActivity($notice, &$activity)
{
$title = Notice_title::fromNotice($notice);
if (!empty($title)) {
- $output = $title;
+ foreach ($activity->objects as $obj) {
+ if ($obj->id == $notice->uri) {
+ $obj->title = $title;
+ break;
+ }
+ }
}
return true;
diff --git a/plugins/NoticeTitle/locale/ar/LC_MESSAGES/NoticeTitle.po b/plugins/NoticeTitle/locale/ar/LC_MESSAGES/NoticeTitle.po
new file mode 100644
index 000000000..546a08de3
--- /dev/null
+++ b/plugins/NoticeTitle/locale/ar/LC_MESSAGES/NoticeTitle.po
@@ -0,0 +1,34 @@
+# Translation of StatusNet - NoticeTitle to Arabic (العربية)
+# Expored from translatewiki.net
+#
+# Author: OsamaK
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - NoticeTitle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:38+0000\n"
+"Language-Team: Arabic <http://translatewiki.net/wiki/Portal:ar>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ar\n"
+"X-Message-Group: #out-statusnet-plugin-noticetitle\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"
+
+#: NoticeTitlePlugin.php:132
+msgid "Adds optional titles to notices."
+msgstr "يضيف عناوين اختيارية إلى الإشعارات."
+
+#. TRANS: Page title. %1$s is the title, %2$s is the site name.
+#: NoticeTitlePlugin.php:309
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s - %2$s"
diff --git a/plugins/NoticeTitle/locale/de/LC_MESSAGES/NoticeTitle.po b/plugins/NoticeTitle/locale/de/LC_MESSAGES/NoticeTitle.po
new file mode 100644
index 000000000..363480494
--- /dev/null
+++ b/plugins/NoticeTitle/locale/de/LC_MESSAGES/NoticeTitle.po
@@ -0,0 +1,32 @@
+# Translation of StatusNet - NoticeTitle to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - NoticeTitle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:38+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-noticetitle\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: NoticeTitlePlugin.php:132
+msgid "Adds optional titles to notices."
+msgstr "Fügt Nachrichten optionale Titel hinzu."
+
+#. TRANS: Page title. %1$s is the title, %2$s is the site name.
+#: NoticeTitlePlugin.php:309
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s – %2$s"
diff --git a/plugins/NoticeTitle/locale/ne/LC_MESSAGES/NoticeTitle.po b/plugins/NoticeTitle/locale/ne/LC_MESSAGES/NoticeTitle.po
new file mode 100644
index 000000000..670be0a6f
--- /dev/null
+++ b/plugins/NoticeTitle/locale/ne/LC_MESSAGES/NoticeTitle.po
@@ -0,0 +1,32 @@
+# Translation of StatusNet - NoticeTitle to Nepali (नेपाली)
+# Expored from translatewiki.net
+#
+# Author: Bhawani Gautam Rhk
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - NoticeTitle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:39+0000\n"
+"Language-Team: Nepali <http://translatewiki.net/wiki/Portal:ne>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:26+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ne\n"
+"X-Message-Group: #out-statusnet-plugin-noticetitle\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: NoticeTitlePlugin.php:132
+msgid "Adds optional titles to notices."
+msgstr "सूचनाकोलागि वैकल्पिक शीर्षकहरु जोड्छ"
+
+#. TRANS: Page title. %1$s is the title, %2$s is the site name.
+#: NoticeTitlePlugin.php:309
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s - %2$s"
diff --git a/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po b/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po
new file mode 100644
index 000000000..64b208fa5
--- /dev/null
+++ b/plugins/NoticeTitle/locale/pl/LC_MESSAGES/NoticeTitle.po
@@ -0,0 +1,33 @@
+# Translation of StatusNet - NoticeTitle to Polish (Polski)
+# Expored from translatewiki.net
+#
+# Author: Raven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - NoticeTitle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:28:38+0000\n"
+"Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:51+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: pl\n"
+"X-Message-Group: #out-statusnet-plugin-noticetitle\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
+"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
+
+#: NoticeTitlePlugin.php:132
+msgid "Adds optional titles to notices."
+msgstr ""
+
+#. TRANS: Page title. %1$s is the title, %2$s is the site name.
+#: NoticeTitlePlugin.php:309
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s - %2$s"
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index 4ab2023cb..d0b64e876 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -52,10 +52,6 @@ class OStatusPlugin extends Plugin
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',
@@ -1011,4 +1007,44 @@ class OStatusPlugin extends Plugin
return true;
}
+
+ function onEndXrdActionLinks(&$xrd, $user)
+ {
+ $xrd->links[] = array('rel' => Discovery::UPDATESFROM,
+ 'href' => common_local_url('ApiTimelineUser',
+ array('id' => $user->id,
+ 'format' => 'atom')),
+ 'type' => 'application/atom+xml');
+
+ // Salmon
+ $salmon_url = common_local_url('usersalmon',
+ array('id' => $user->id));
+
+ $xrd->links[] = array('rel' => Salmon::REL_SALMON,
+ 'href' => $salmon_url);
+ // XXX : Deprecated - to be removed.
+ $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', $user->id);
+ if (!$magickey) {
+ // No keypair yet, let's generate one.
+ $magickey = new Magicsig();
+ $magickey->generate($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 );
+
+ return true;
+ }
}
diff --git a/plugins/OStatus/actions/hostmeta.php b/plugins/OStatus/actions/hostmeta.php
deleted file mode 100644
index 14f69ac19..000000000
--- a/plugins/OStatus/actions/hostmeta.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package OStatusPlugin
- * @maintainer James Walker <james@status.net>
- */
-
-if (!defined('STATUSNET')) {
- 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->host = $domain;
- $xrd->links[] = array('rel' => Discovery::LRDD_REL,
- 'template' => $url,
- 'title' => array('Resource Descriptor'));
-
- header('Content-type: application/xrd+xml');
- print $xrd->toXML();
- }
-}
diff --git a/plugins/OStatus/actions/userxrd.php b/plugins/OStatus/actions/userxrd.php
deleted file mode 100644
index 575a07c40..000000000
--- a/plugins/OStatus/actions/userxrd.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-if (!defined('STATUSNET')) {
- exit(1);
-}
-
-/**
- * @package OStatusPlugin
- * @maintainer James Walker <james@status.net>
- */
-class UserxrdAction extends XrdAction
-{
- function prepare($args)
- {
- parent::prepare($args);
-
- $this->uri = $this->trimmed('uri');
- $this->uri = Discovery::normalize($this->uri);
-
- if (Discovery::isWebfinger($this->uri)) {
- $parts = explode('@', substr(urldecode($this->uri), 5));
- if (count($parts) == 2) {
- list($nick, $domain) = $parts;
- // @fixme confirm the domain too
- // @fixme if domain checking is added, ensure that it will not
- // cause problems with sites that have changed domains!
- $nick = common_canonical_nickname($nick);
- $this->user = User::staticGet('nickname', $nick);
- }
- } else {
- $this->user = User::staticGet('uri', $this->uri);
- if (empty($this->user)) {
- // try and get it by profile url
- $profile = Profile::staticGet('profileurl', $this->uri);
- if (!empty($profile)) {
- $this->user = User::staticGet('id', $profile->id);
- }
- }
- }
-
- if (!$this->user) {
- $this->clientError(_m('No such user.'), 404);
- return false;
- }
-
- return true;
- }
-}
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index 03fcb71df..b43a2b5f1 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -188,10 +188,10 @@ class Ostatus_profile extends Memcached_DataObject
} else if ($this->group_id && !$this->profile_id) {
return true;
} else if ($this->group_id && $this->profile_id) {
- // TRANS: Server exception.
+ // TRANS: Server exception. %s is a URI.
throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs set for %s.'),$this->uri));
} else {
- // TRANS: Server exception.
+ // TRANS: Server exception. %s is a URI.
throw new ServerException(sprintf(_m('Invalid ostatus_profile state: both group and profile IDs empty for %s.'),$this->uri));
}
}
@@ -405,6 +405,7 @@ class Ostatus_profile extends Memcached_DataObject
} else if ($feed->localName == 'rss') { // @fixme check namespace
$this->processRssFeed($feed, $source);
} else {
+ // TRANS: Exception.
throw new Exception(_m('Unknown feed format.'));
}
}
@@ -428,6 +429,7 @@ class Ostatus_profile extends Memcached_DataObject
$channels = $rss->getElementsByTagName('channel');
if ($channels->length == 0) {
+ // TRANS: Exception.
throw new Exception(_m('RSS feed without a channel.'));
} else if ($channels->length > 1) {
common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed");
@@ -555,7 +557,7 @@ class Ostatus_profile extends Memcached_DataObject
$sourceContent = $note->title;
} else {
// @fixme fetch from $sourceUrl?
- // TRANS: Client exception. %s is a source URL.
+ // TRANS: Client exception. %s is a source URI.
throw new ClientException(sprintf(_m('No content for notice %s.'),$sourceUri));
}
@@ -588,7 +590,9 @@ class Ostatus_profile extends Memcached_DataObject
// We mark up the attachment link specially for the HTML output
// so we can fold-out the full version inline.
- // TRANS: Shown when a notice is longer than supported and/or when attachments are present.
+ // @fixme I18N this tooltip will be saved with the site's default language
+ // TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+ // TRANS: this will usually be replaced with localised text from StatusNet core messages.
$showMoreText = _m('Show more');
$attachUrl = common_local_url('attachment',
array('attachment' => $attachment->id));
@@ -839,7 +843,7 @@ class Ostatus_profile extends Memcached_DataObject
return self::ensureFeedURL($feedurl, $hints);
}
- // TRANS: Exception.
+ // TRANS: Exception. %s is a URL.
throw new Exception(sprintf(_m('Could not find a feed URL for profile page %s.'),$finalUrl));
}
@@ -977,6 +981,7 @@ class Ostatus_profile extends Memcached_DataObject
}
// XXX: make some educated guesses here
+ // TRANS: Feed sub exception.
throw new FeedSubException(_m('Can\'t find enough profile information to make a feed.'));
}
@@ -1036,6 +1041,7 @@ class Ostatus_profile extends Memcached_DataObject
return;
}
if (!common_valid_http_url($url)) {
+ // TRANS: Server exception. %s is a URL.
throw new ServerException(sprintf(_m("Invalid avatar URL %s."), $url));
}
@@ -1046,6 +1052,7 @@ class Ostatus_profile extends Memcached_DataObject
}
if (!$self) {
throw new ServerException(sprintf(
+ // TRANS: Server exception. %s is a URI.
_m("Tried to update avatar for unsaved remote profile %s."),
$this->uri));
}
@@ -1055,6 +1062,7 @@ class Ostatus_profile extends Memcached_DataObject
$temp_filename = tempnam(sys_get_temp_dir(), 'listener_avatar');
try {
if (!copy($url, $temp_filename)) {
+ // TRANS: Server exception. %s is a URL.
throw new ServerException(sprintf(_m("Unable to fetch avatar from %s."), $url));
}
@@ -1337,7 +1345,7 @@ class Ostatus_profile extends Memcached_DataObject
$oprofile->profile_id = $profile->insert();
if (!$oprofile->profile_id) {
- // TRANS: Exception.
+ // TRANS: Server exception.
throw new ServerException(_m('Can\'t save local profile.'));
}
} else {
@@ -1348,7 +1356,7 @@ class Ostatus_profile extends Memcached_DataObject
$oprofile->group_id = $group->insert();
if (!$oprofile->group_id) {
- // TRANS: Exception.
+ // TRANS: Server exception.
throw new ServerException(_m('Can\'t save local profile.'));
}
}
@@ -1356,7 +1364,7 @@ class Ostatus_profile extends Memcached_DataObject
$ok = $oprofile->insert();
if (!$ok) {
- // TRANS: Exception.
+ // TRANS: Server exception.
throw new ServerException(_m('Can\'t save OStatus profile.'));
}
@@ -1795,6 +1803,7 @@ class Ostatus_profile extends Memcached_DataObject
if ($file_id === false) {
common_log_db_error($file, "INSERT", __FILE__);
+ // TRANS: Server exception.
throw new ServerException(_m('Could not store HTML content of long post as file.'));
}
diff --git a/plugins/OStatus/lib/xrd.php b/plugins/OStatus/lib/xrd.php
deleted file mode 100644
index c8cffed9c..000000000
--- a/plugins/OStatus/lib/xrd.php
+++ /dev/null
@@ -1,172 +0,0 @@
-<?php
-/**
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * A sample module to show best practices for StatusNet plugins
- *
- * PHP version 5
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- * @package StatusNet
- * @author James Walker <james@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0
- * @link http://status.net/
- */
-
-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();
-
- // Don't spew XML warnings to output
- $old = error_reporting();
- error_reporting($old & ~E_WARNING);
- $ok = $dom->loadXML($xml);
- error_reporting($old);
-
- if (!$ok) {
- // TRANS: Exception.
- throw new Exception(_m('Invalid XML.'));
- }
- $xrd_element = $dom->getElementsByTagName('XRD')->item(0);
- if (!$xrd_element) {
- // TRANS: Exception.
- throw new Exception(_m('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()
- {
- $xs = new XMLStringer();
-
- $xs->startXML();
- $xs->elementStart('XRD', array('xmlns' => XRD::XRD_NS));
-
- if ($this->host) {
- $xs->element('hm:Host', array('xmlns:hm' => XRD::HOST_META_NS), $this->host);
- }
-
- if ($this->expires) {
- $xs->element('Expires', null, $this->expires);
- }
-
- if ($this->subject) {
- $xs->element('Subject', null, $this->subject);
- }
-
- foreach ($this->alias as $alias) {
- $xs->element('Alias', null, $alias);
- }
-
- foreach ($this->links as $link) {
- $titles = array();
- if (isset($link['title'])) {
- $titles = $link['title'];
- unset($link['title']);
- }
- $xs->elementStart('Link', $link);
- foreach ($titles as $title) {
- $xs->element('Title', null, $title);
- }
- $xs->elementEnd('Link');
- }
-
- $xs->elementEnd('XRD');
-
- return $xs->getString();
- }
-
- 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;
- }
-}
diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php
deleted file mode 100644
index 371c11080..000000000
--- a/plugins/OStatus/lib/xrdaction.php
+++ /dev/null
@@ -1,127 +0,0 @@
-<?php
-/*
- * StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2010, StatusNet, Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * @package OStatusPlugin
- * @maintainer James Walker <james@status.net>
- */
-
-if (!defined('STATUSNET')) {
- exit(1);
-}
-
-class XrdAction extends Action
-{
- public $uri;
-
- public $user;
-
- public $xrd;
-
- function handle()
- {
- $nick = $this->user->nickname;
- $profile = $this->user->getProfile();
-
- if (empty($this->xrd)) {
- $xrd = new XRD();
- } else {
- $xrd = $this->xrd;
- }
-
- if (empty($xrd->subject)) {
- $xrd->subject = Discovery::normalize($this->uri);
- }
-
- // Possible aliases for the user
-
- $uris = array($this->user->uri, $profile->profileurl);
-
- // FIXME: Webfinger generation code should live somewhere on its own
-
- $path = common_config('site', 'path');
-
- if (empty($path)) {
- $uris[] = sprintf('acct:%s@%s', $nick, common_config('site', 'server'));
- }
-
- foreach ($uris as $uri) {
- if ($uri != $xrd->subject) {
- $xrd->alias[] = $uri;
- }
- }
-
- $xrd->links[] = array('rel' => Discovery::PROFILEPAGE,
- 'type' => 'text/html',
- 'href' => $profile->profileurl);
-
- $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' => $profile->profileurl);
- // 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::REL_SALMON,
- 'href' => $salmon_url);
- // XXX : Deprecated - to be removed.
- $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: application/xrd+xml');
- print $xrd->toXML();
- }
-}
diff --git a/plugins/OStatus/locale/OStatus.pot b/plugins/OStatus/locale/OStatus.pot
index 2473e730f..1a95a43bf 100644
--- a/plugins/OStatus/locale/OStatus.pot
+++ b/plugins/OStatus/locale/OStatus.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+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"
@@ -18,94 +18,94 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr ""
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr ""
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr ""
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr ""
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr ""
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr ""
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr ""
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr ""
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr ""
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr ""
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr ""
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr ""
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr ""
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr ""
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr ""
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr ""
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -119,13 +119,13 @@ msgstr ""
msgid "Attempting to end PuSH subscription for feed with no hub."
msgstr ""
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
msgstr ""
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -145,105 +145,113 @@ msgid ""
"Activity entry."
msgstr ""
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr ""
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr ""
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr ""
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr ""
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr ""
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr ""
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr ""
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr ""
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr ""
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr ""
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr ""
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr ""
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr ""
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr ""
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr ""
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr ""
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr ""
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr ""
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr ""
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr ""
@@ -336,16 +344,6 @@ msgid "Unable to find services for %s."
msgstr ""
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr ""
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr ""
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr ""
@@ -415,7 +413,7 @@ msgstr ""
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr ""
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr ""
diff --git a/plugins/OStatus/locale/br/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/br/LC_MESSAGES/OStatus.po
new file mode 100644
index 000000000..924e4039e
--- /dev/null
+++ b/plugins/OStatus/locale/br/LC_MESSAGES/OStatus.po
@@ -0,0 +1,756 @@
+# Translation of StatusNet - OStatus to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OStatus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:02+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-ostatus\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Link description for link to subscribe to a remote user.
+#. TRANS: Link text for a user to subscribe to an OStatus user.
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
+msgid "Subscribe"
+msgstr "Koumanantiñ"
+
+#. TRANS: Link description for link to join a remote group.
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
+msgid "Join"
+msgstr "Stagañ"
+
+#. TRANSLATE: %s is a domain.
+#: OStatusPlugin.php:457
+#, php-format
+msgid "Sent from %s via OStatus"
+msgstr "Kaset adalek %s dre OStatus"
+
+#. TRANS: Exception.
+#: OStatusPlugin.php:529
+msgid "Could not set up remote subscription."
+msgstr ""
+
+#: OStatusPlugin.php:603
+msgid "Unfollow"
+msgstr "Chom hep heuliañ"
+
+#. TRANS: Success message for unsubscribe from user attempt through OStatus.
+#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
+#: OStatusPlugin.php:606
+#, php-format
+msgid "%1$s stopped following %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:634
+msgid "Could not set up remote group membership."
+msgstr ""
+
+#. TRANS: Success message for subscribe to group attempt through OStatus.
+#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
+#: OStatusPlugin.php:656
+#, php-format
+msgid "%1$s has joined group %2$s."
+msgstr ""
+
+#. TRANS: Exception.
+#: OStatusPlugin.php:665
+msgid "Failed joining remote group."
+msgstr ""
+
+#: OStatusPlugin.php:705
+msgid "Leave"
+msgstr "Kuitaat"
+
+#. TRANS: Success message for unsubscribe from group attempt through OStatus.
+#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
+#: OStatusPlugin.php:708
+#, php-format
+msgid "%1$s has left group %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:783
+msgid "Disfavor"
+msgstr ""
+
+#. TRANS: Success message for remove a favorite notice through OStatus.
+#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
+#: OStatusPlugin.php:786
+#, php-format
+msgid "%1$s marked notice %2$s as no longer a favorite."
+msgstr ""
+
+#. TRANS: Link text for link to remote subscribe.
+#: OStatusPlugin.php:862
+msgid "Remote"
+msgstr ""
+
+#. TRANS: Title for activity.
+#: OStatusPlugin.php:902
+msgid "Profile update"
+msgstr ""
+
+#. TRANS: Ping text for remote profile update through OStatus.
+#. TRANS: %s is user that updated their profile.
+#: OStatusPlugin.php:905
+#, php-format
+msgid "%s has updated their profile page."
+msgstr ""
+
+#. TRANS: Plugin description.
+#: OStatusPlugin.php:950
+msgid ""
+"Follow people across social networks that implement <a href=\"http://ostatus."
+"org/\">OStatus</a>."
+msgstr ""
+
+#: classes/FeedSub.php:252
+msgid "Attempting to start PuSH subscription for feed with no hub."
+msgstr ""
+
+#: classes/FeedSub.php:282
+msgid "Attempting to end PuSH subscription for feed with no hub."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:192
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:195
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
+msgstr ""
+
+#. TRANS: Server exception.
+#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type.
+#: classes/Ostatus_profile.php:285
+#, php-format
+msgid "Invalid actor passed to %1$s: %2$s."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:378
+msgid ""
+"Invalid type passed to Ostatus_profile::notify. It must be XML string or "
+"Activity entry."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
+msgid "Unknown feed format."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
+msgid "RSS feed without a channel."
+msgstr ""
+
+#. TRANS: Client exception.
+#: classes/Ostatus_profile.php:478
+msgid "Can't handle that kind of post."
+msgstr ""
+
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
+#, php-format
+msgid "No content for notice %s."
+msgstr ""
+
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
+msgid "Show more"
+msgstr "Diskouez muioc'h"
+
+#. TRANS: Exception. %s is a profile URL.
+#: classes/Ostatus_profile.php:789
+#, php-format
+msgid "Could not reach profile page %s."
+msgstr ""
+
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
+#, php-format
+msgid "Could not find a feed URL for profile page %s."
+msgstr ""
+
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
+msgid "Can't find enough profile information to make a feed."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
+#, php-format
+msgid "Invalid avatar URL %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
+#, php-format
+msgid "Tried to update avatar for unsaved remote profile %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
+#, php-format
+msgid "Unable to fetch avatar from %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1292
+msgid "Local user can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1297
+msgid "Local group can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
+msgid "Can't save local profile."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
+msgid "Can't save OStatus profile."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
+msgid "Not a valid webfinger address."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1737
+#, php-format
+msgid "Couldn't save profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1756
+#, php-format
+msgid "Couldn't save ostatus_profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1764
+#, php-format
+msgid "Couldn't find a valid profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
+msgid "Could not store HTML content of long post as file."
+msgstr ""
+
+#. TRANS: Client exception. %s is a HTTP status code.
+#: classes/HubSub.php:212
+#, php-format
+msgid "Hub subscriber verification returned HTTP %s."
+msgstr ""
+
+#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response.
+#: classes/HubSub.php:359
+#, php-format
+msgid "Callback returned status: %1$s. Body: %2$s"
+msgstr ""
+
+#. TRANS: Client error. POST is a HTTP command. It should not be translated.
+#: lib/salmonaction.php:42
+msgid "This method requires a POST."
+msgstr ""
+
+#. TRANS: Client error. Do not translate "application/magic-envelope+xml"
+#: lib/salmonaction.php:47
+msgid "Salmon requires \"application/magic-envelope+xml\"."
+msgstr ""
+
+#. TRANS: Client error.
+#: lib/salmonaction.php:57
+msgid "Salmon signature verification failed."
+msgstr ""
+
+#. TRANS: Client error.
+#: lib/salmonaction.php:69
+msgid "Salmon post must be an Atom entry."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:118
+msgid "Unrecognized activity type."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:127
+msgid "This target doesn't understand posts."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:133
+msgid "This target doesn't understand follows."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:139
+msgid "This target doesn't understand unfollows."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:145
+msgid "This target doesn't understand favorites."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:151
+msgid "This target doesn't understand unfavorites."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:157
+msgid "This target doesn't understand share events."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:163
+msgid "This target doesn't understand joins."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:169
+msgid "This target doesn't understand leave events."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/salmonaction.php:197
+msgid "Received a salmon slap from unidentified actor."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/discovery.php:110
+#, php-format
+msgid "Unable to find services for %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/magicenvelope.php:80
+msgid "Unable to locate signer public key."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/salmon.php:93
+msgid "Salmon invalid actor for signing."
+msgstr ""
+
+#: tests/gettext-speedtest.php:57
+msgid "Feeds"
+msgstr "Lanvioù"
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:70
+msgid "Publishing outside feeds not supported."
+msgstr ""
+
+#. TRANS: Client exception. %s is a mode.
+#: actions/pushhub.php:73
+#, php-format
+msgid "Unrecognized mode \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %s is a topic.
+#: actions/pushhub.php:93
+#, php-format
+msgid ""
+"Unsupported hub.topic %s this hub only serves local user and group Atom "
+"feeds."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:99
+#, php-format
+msgid "Invalid hub.verify \"%s\". It must be sync or async."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:105
+#, php-format
+msgid "Invalid hub.lease \"%s\". It must be empty or positive integer."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:113
+#, php-format
+msgid "Invalid hub.secret \"%s\". It must be under 200 bytes."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:165
+#, php-format
+msgid "Invalid hub.topic \"%s\". User doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:174
+#, php-format
+msgid "Invalid hub.topic \"%s\". Group doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL.
+#: actions/pushhub.php:199
+#, php-format
+msgid "Invalid URL passed for %1$s: \"%2$s\""
+msgstr ""
+
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
+msgid "No such user."
+msgstr "N'eus ket eus an implijer-se."
+
+#. TRANS: Client error.
+#: actions/usersalmon.php:37 actions/groupsalmon.php:40
+msgid "No ID."
+msgstr "ID ebet"
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:81
+msgid "In reply to unknown notice."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:86
+msgid "In reply to a notice not by this user and not mentioning this user."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:163
+msgid "Could not save new favorite."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:195
+msgid "Can't favorite/unfavorite without an object."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:207
+msgid "Can't handle that kind of object for liking/faving."
+msgstr ""
+
+#. TRANS: Client exception. %s is an object ID.
+#: actions/usersalmon.php:214
+#, php-format
+msgid "Notice with ID %s unknown."
+msgstr ""
+
+#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID.
+#: actions/usersalmon.php:219
+#, php-format
+msgid "Notice with ID %1$s not posted by %2$s."
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/ostatusgroup.php:78
+msgid "Join group"
+msgstr "Mont er strollad"
+
+#. TRANS: Tooltip for field label "Join group".
+#: actions/ostatusgroup.php:81
+msgid "OStatus group's address, like http://example.net/group/nickname."
+msgstr ""
+
+#. TRANS: Button text.
+#: actions/ostatusgroup.php:86 actions/ostatussub.php:75
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr "Kenderc'hel"
+
+#: actions/ostatusgroup.php:105
+msgid "You are already a member of this group."
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:140
+msgid "Already a member!"
+msgstr "Ezel oc'h dija !"
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:151
+msgid "Remote group join failed!"
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:155
+msgid "Remote group join aborted!"
+msgstr ""
+
+#. TRANS: Page title for OStatus remote group join form
+#: actions/ostatusgroup.php:167
+msgid "Confirm joining remote group"
+msgstr ""
+
+#. TRANS: Instructions.
+#: actions/ostatusgroup.php:178
+msgid ""
+"You can subscribe to groups from other supported sites. Paste the group's "
+"profile URI below:"
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:47
+msgid "No such group."
+msgstr "N'eus ket eus ar strollad-se."
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:53
+msgid "Can't accept remote posts for a remote group."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:127
+msgid "Can't read profile to set up group membership."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:131 actions/groupsalmon.php:174
+msgid "Groups can't join groups."
+msgstr ""
+
+#: actions/groupsalmon.php:144
+msgid "You have been blocked from that group by the admin."
+msgstr ""
+
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:159
+#, php-format
+msgid "Could not join remote user %1$s to group %2$s."
+msgstr ""
+
+#: actions/groupsalmon.php:171
+msgid "Can't read profile to cancel group membership."
+msgstr ""
+
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:188
+#, php-format
+msgid "Could not remove remote user %1$s from group %2$s."
+msgstr ""
+
+#. TRANS: Field label for a field that takes an OStatus user address.
+#: actions/ostatussub.php:68
+msgid "Subscribe to"
+msgstr "Koumanantiñ da"
+
+#. TRANS: Tooltip for field label "Subscribe to".
+#: actions/ostatussub.php:71
+msgid ""
+"OStatus user's address, like nickname@example.com or http://example.net/"
+"nickname"
+msgstr ""
+
+#. TRANS: Button text.
+#. TRANS: Tooltip for button "Join".
+#: actions/ostatussub.php:112
+msgctxt "BUTTON"
+msgid "Join this group"
+msgstr "Mont er strollad-se"
+
+#. TRANS: Button text.
+#: actions/ostatussub.php:115
+msgctxt "BUTTON"
+msgid "Confirm"
+msgstr "Kadarnaat"
+
+#. TRANS: Tooltip for button "Confirm".
+#: actions/ostatussub.php:117
+msgid "Subscribe to this user"
+msgstr ""
+
+#: actions/ostatussub.php:138
+msgid "You are already subscribed to this user."
+msgstr ""
+
+#: actions/ostatussub.php:167
+msgid "Photo"
+msgstr "Skeudenn"
+
+#: actions/ostatussub.php:178
+msgid "Nickname"
+msgstr "Lesanv"
+
+#: actions/ostatussub.php:199
+msgid "Location"
+msgstr "Lec'hiadur"
+
+#: actions/ostatussub.php:208
+msgid "URL"
+msgstr "URL"
+
+#: actions/ostatussub.php:220
+msgid "Note"
+msgstr "Notenn"
+
+#. TRANS: Error text.
+#: actions/ostatussub.php:256 actions/ostatussub.php:263
+#: actions/ostatussub.php:288
+msgid ""
+"Sorry, we could not reach that address. Please make sure that the OStatus "
+"address is like nickname@example.com or http://example.net/nickname."
+msgstr ""
+
+#. TRANS: Error text.
+#: actions/ostatussub.php:267 actions/ostatussub.php:271
+#: actions/ostatussub.php:275 actions/ostatussub.php:279
+#: actions/ostatussub.php:283
+msgid ""
+"Sorry, we could not reach that feed. Please try that OStatus address again "
+"later."
+msgstr ""
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:317
+msgid "Already subscribed!"
+msgstr "Koumanantet dija !"
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:322
+msgid "Remote subscription failed!"
+msgstr ""
+
+#: actions/ostatussub.php:369 actions/ostatusinit.php:64
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#. TRANS: Form title.
+#: actions/ostatussub.php:397 actions/ostatusinit.php:83
+msgid "Subscribe to user"
+msgstr "En em goumanantiñ d'un implijer"
+
+#. TRANS: Page title for OStatus remote subscription form
+#: actions/ostatussub.php:417
+msgid "Confirm"
+msgstr "Kadarnaat"
+
+#. TRANS: Instructions.
+#: actions/ostatussub.php:429
+msgid ""
+"You can subscribe to users from other supported sites. Paste their address "
+"or profile URI below:"
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:42
+msgid "You can use the local subscription!"
+msgstr ""
+
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:98
+#, php-format
+msgid "Join group %s"
+msgstr "Mont er strollad %s"
+
+#. TRANS: Button text.
+#: actions/ostatusinit.php:100
+msgctxt "BUTTON"
+msgid "Join"
+msgstr "Stagañ"
+
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:103
+#, php-format
+msgid "Subscribe to %s"
+msgstr "Koumanantiñ da %s"
+
+#. TRANS: Button text.
+#: actions/ostatusinit.php:105
+msgctxt "BUTTON"
+msgid "Subscribe"
+msgstr "Koumanantiñ"
+
+#. TRANS: Field label.
+#: actions/ostatusinit.php:118
+msgid "User nickname"
+msgstr "Lesanv an implijer"
+
+#: actions/ostatusinit.php:119
+msgid "Nickname of the user you want to follow."
+msgstr "Lesanv an implijer ho peus c'hoant heuliañ."
+
+#. TRANS: Field label.
+#: actions/ostatusinit.php:124
+msgid "Profile Account"
+msgstr "Kont profil"
+
+#. TRANS: Tooltip for field label "Profile Account".
+#: actions/ostatusinit.php:126
+msgid "Your account id (e.g. user@identi.ca)."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:148
+msgid "Must provide a remote profile."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:160
+msgid "Couldn't look up OStatus account profile."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:173
+msgid "Couldn't confirm remote profile address."
+msgstr ""
+
+#. TRANS: Page title.
+#: actions/ostatusinit.php:218
+msgid "OStatus Connect"
+msgstr ""
+
+#: actions/pushcallback.php:50
+msgid "Empty or invalid feed id."
+msgstr ""
+
+#. TRANS: Server exception. %s is a feed ID.
+#: actions/pushcallback.php:56
+#, php-format
+msgid "Unknown PuSH feed id %s"
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid feed name.
+#: actions/pushcallback.php:96
+#, php-format
+msgid "Bad hub.topic feed \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given.
+#: actions/pushcallback.php:101
+#, php-format
+msgid "Bad hub.verify_token %1$s for %2$s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:108
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:113
+#, php-format
+msgid "Unexpected unsubscribe request for %s."
+msgstr ""
diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
index b0ef34b6b..b48ea90c6 100644
--- a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OStatus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:14+0000\n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:58:00+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:35+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:45:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-ostatus\n"
@@ -24,94 +24,94 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr "S'abonner"
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr "Rejoindre"
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr "Envoyé depuis %s via OStatus"
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr "Impossible de mettre en place l’abonnement distant."
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr "Ne plus suivre"
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr "%1$s a cessé de suivre %2$s."
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr "Impossible de mettre en place l’appartenance au groupe distant."
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr "%1$s a rejoint le groupe %2$s."
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr "Échec lors de l’adhésion au groupe distant."
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr "Sortir"
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr "%1$s a quitté le groupe %2$s."
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr "Retirer des favoris"
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr "%1$s a retiré l’avis %2$s de ses favoris."
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr "À distance"
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr "Mise à jour du profil"
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr "%s a mis à jour sa page de profil."
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -131,7 +131,7 @@ msgstr ""
"Tente d’arrêter l’inscription PuSH à un flux d’information sans "
"concentrateur."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
@@ -139,7 +139,7 @@ msgstr ""
"État invalide du profil OStatus : identifiants à la fois de groupe et de "
"profil définis pour « %s »."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -163,111 +163,119 @@ msgstr ""
"Type invalide passé à la méthode « Ostatus_profile::notify ». Ce doit être "
"une chaîne XML ou une entrée « Activity »."
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr "Format de flux d’information inconnu."
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr "Flux RSS sans canal."
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr "Impossible de gérer cette sorte de publication."
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr "Aucun contenu dans l’avis « %s »."
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr "Voir davantage"
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr "Impossible d’atteindre la page de profil « %s »."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr ""
"Impossible de trouver une adresse URL de flux d’information pour la page de "
"profil « %s »."
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr ""
"Impossible de trouver assez d’informations de profil pour créer un flux "
"d’information."
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr "Adresse URL d’avatar « %s » invalide."
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr ""
"Tente de mettre à jour l’avatar associé au profil distant non sauvegardé « %s "
"»."
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr "Impossible de récupérer l’avatar depuis « %s »."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr "L’utilisateur local ne peut être référencé comme distant."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr "Le groupe local ne peut être référencé comme distant."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr "Impossible de sauvegarder le profil local."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr "Impossible de sauvegarder le profil OStatus."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr "Ce n’est pas une adresse « webfinger » valide."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr "Impossible de sauvegarder le profil pour « %s »."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr "Impossible d’enregistrer le profil OStatus pour « %s »."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr "Impossible de trouver un profil valide pour « %s »."
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr ""
"Impossible de stocker le contenu HTML d’une longue publication en un fichier."
@@ -363,16 +371,6 @@ msgid "Unable to find services for %s."
msgstr "Impossible de trouver des services pour « %s »."
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr "XML invalide."
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr "XML invalide, racine XRD manquante."
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr "Impossible de trouver la clé publique du signataire."
@@ -451,7 +449,7 @@ msgstr "Le sujet de concentrateur « %s » est invalide. Le groupe n’existe pa
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr "URL invalide passée à la méthode « %1$s » : « %2$s »"
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr "Utilisateur inexistant."
diff --git a/plugins/OStatus/locale/gl/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/gl/LC_MESSAGES/OStatus.po
new file mode 100644
index 000000000..48874e907
--- /dev/null
+++ b/plugins/OStatus/locale/gl/LC_MESSAGES/OStatus.po
@@ -0,0 +1,756 @@
+# Translation of StatusNet - OStatus to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OStatus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:02+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-ostatus\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Link description for link to subscribe to a remote user.
+#. TRANS: Link text for a user to subscribe to an OStatus user.
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
+msgid "Subscribe"
+msgstr "Subscribirse"
+
+#. TRANS: Link description for link to join a remote group.
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
+msgid "Join"
+msgstr "Unirse"
+
+#. TRANSLATE: %s is a domain.
+#: OStatusPlugin.php:457
+#, php-format
+msgid "Sent from %s via OStatus"
+msgstr ""
+
+#. TRANS: Exception.
+#: OStatusPlugin.php:529
+msgid "Could not set up remote subscription."
+msgstr ""
+
+#: OStatusPlugin.php:603
+msgid "Unfollow"
+msgstr ""
+
+#. TRANS: Success message for unsubscribe from user attempt through OStatus.
+#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
+#: OStatusPlugin.php:606
+#, php-format
+msgid "%1$s stopped following %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:634
+msgid "Could not set up remote group membership."
+msgstr ""
+
+#. TRANS: Success message for subscribe to group attempt through OStatus.
+#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
+#: OStatusPlugin.php:656
+#, php-format
+msgid "%1$s has joined group %2$s."
+msgstr ""
+
+#. TRANS: Exception.
+#: OStatusPlugin.php:665
+msgid "Failed joining remote group."
+msgstr ""
+
+#: OStatusPlugin.php:705
+msgid "Leave"
+msgstr "Deixar"
+
+#. TRANS: Success message for unsubscribe from group attempt through OStatus.
+#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
+#: OStatusPlugin.php:708
+#, php-format
+msgid "%1$s has left group %2$s."
+msgstr ""
+
+#: OStatusPlugin.php:783
+msgid "Disfavor"
+msgstr ""
+
+#. TRANS: Success message for remove a favorite notice through OStatus.
+#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
+#: OStatusPlugin.php:786
+#, php-format
+msgid "%1$s marked notice %2$s as no longer a favorite."
+msgstr ""
+
+#. TRANS: Link text for link to remote subscribe.
+#: OStatusPlugin.php:862
+msgid "Remote"
+msgstr ""
+
+#. TRANS: Title for activity.
+#: OStatusPlugin.php:902
+msgid "Profile update"
+msgstr "Actualización do perfil"
+
+#. TRANS: Ping text for remote profile update through OStatus.
+#. TRANS: %s is user that updated their profile.
+#: OStatusPlugin.php:905
+#, php-format
+msgid "%s has updated their profile page."
+msgstr ""
+
+#. TRANS: Plugin description.
+#: OStatusPlugin.php:950
+msgid ""
+"Follow people across social networks that implement <a href=\"http://ostatus."
+"org/\">OStatus</a>."
+msgstr ""
+
+#: classes/FeedSub.php:252
+msgid "Attempting to start PuSH subscription for feed with no hub."
+msgstr ""
+
+#: classes/FeedSub.php:282
+msgid "Attempting to end PuSH subscription for feed with no hub."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:192
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:195
+#, php-format
+msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
+msgstr ""
+
+#. TRANS: Server exception.
+#. TRANS: %1$s is the method name the exception occured in, %2$s is the actor type.
+#: classes/Ostatus_profile.php:285
+#, php-format
+msgid "Invalid actor passed to %1$s: %2$s."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:378
+msgid ""
+"Invalid type passed to Ostatus_profile::notify. It must be XML string or "
+"Activity entry."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
+msgid "Unknown feed format."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
+msgid "RSS feed without a channel."
+msgstr ""
+
+#. TRANS: Client exception.
+#: classes/Ostatus_profile.php:478
+msgid "Can't handle that kind of post."
+msgstr ""
+
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
+#, php-format
+msgid "No content for notice %s."
+msgstr ""
+
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
+msgid "Show more"
+msgstr "Mostrar máis"
+
+#. TRANS: Exception. %s is a profile URL.
+#: classes/Ostatus_profile.php:789
+#, php-format
+msgid "Could not reach profile page %s."
+msgstr ""
+
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
+#, php-format
+msgid "Could not find a feed URL for profile page %s."
+msgstr ""
+
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
+msgid "Can't find enough profile information to make a feed."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
+#, php-format
+msgid "Invalid avatar URL %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
+#, php-format
+msgid "Tried to update avatar for unsaved remote profile %s."
+msgstr ""
+
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
+#, php-format
+msgid "Unable to fetch avatar from %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1292
+msgid "Local user can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1297
+msgid "Local group can't be referenced as remote."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
+msgid "Can't save local profile."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
+msgid "Can't save OStatus profile."
+msgstr ""
+
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
+msgid "Not a valid webfinger address."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1737
+#, php-format
+msgid "Couldn't save profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1756
+#, php-format
+msgid "Couldn't save ostatus_profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Exception. %s is a webfinger address.
+#: classes/Ostatus_profile.php:1764
+#, php-format
+msgid "Couldn't find a valid profile for \"%s\"."
+msgstr ""
+
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
+msgid "Could not store HTML content of long post as file."
+msgstr ""
+
+#. TRANS: Client exception. %s is a HTTP status code.
+#: classes/HubSub.php:212
+#, php-format
+msgid "Hub subscriber verification returned HTTP %s."
+msgstr ""
+
+#. TRANS: Exception. %1$s is a response status code, %2$s is the body of the response.
+#: classes/HubSub.php:359
+#, php-format
+msgid "Callback returned status: %1$s. Body: %2$s"
+msgstr ""
+
+#. TRANS: Client error. POST is a HTTP command. It should not be translated.
+#: lib/salmonaction.php:42
+msgid "This method requires a POST."
+msgstr ""
+
+#. TRANS: Client error. Do not translate "application/magic-envelope+xml"
+#: lib/salmonaction.php:47
+msgid "Salmon requires \"application/magic-envelope+xml\"."
+msgstr ""
+
+#. TRANS: Client error.
+#: lib/salmonaction.php:57
+msgid "Salmon signature verification failed."
+msgstr ""
+
+#. TRANS: Client error.
+#: lib/salmonaction.php:69
+msgid "Salmon post must be an Atom entry."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:118
+msgid "Unrecognized activity type."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:127
+msgid "This target doesn't understand posts."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:133
+msgid "This target doesn't understand follows."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:139
+msgid "This target doesn't understand unfollows."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:145
+msgid "This target doesn't understand favorites."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:151
+msgid "This target doesn't understand unfavorites."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:157
+msgid "This target doesn't understand share events."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:163
+msgid "This target doesn't understand joins."
+msgstr ""
+
+#. TRANS: Client exception.
+#: lib/salmonaction.php:169
+msgid "This target doesn't understand leave events."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/salmonaction.php:197
+msgid "Received a salmon slap from unidentified actor."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/discovery.php:110
+#, php-format
+msgid "Unable to find services for %s."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/magicenvelope.php:80
+msgid "Unable to locate signer public key."
+msgstr ""
+
+#. TRANS: Exception.
+#: lib/salmon.php:93
+msgid "Salmon invalid actor for signing."
+msgstr ""
+
+#: tests/gettext-speedtest.php:57
+msgid "Feeds"
+msgstr "Fontes de novas"
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:70
+msgid "Publishing outside feeds not supported."
+msgstr ""
+
+#. TRANS: Client exception. %s is a mode.
+#: actions/pushhub.php:73
+#, php-format
+msgid "Unrecognized mode \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %s is a topic.
+#: actions/pushhub.php:93
+#, php-format
+msgid ""
+"Unsupported hub.topic %s this hub only serves local user and group Atom "
+"feeds."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:99
+#, php-format
+msgid "Invalid hub.verify \"%s\". It must be sync or async."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:105
+#, php-format
+msgid "Invalid hub.lease \"%s\". It must be empty or positive integer."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:113
+#, php-format
+msgid "Invalid hub.secret \"%s\". It must be under 200 bytes."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:165
+#, php-format
+msgid "Invalid hub.topic \"%s\". User doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/pushhub.php:174
+#, php-format
+msgid "Invalid hub.topic \"%s\". Group doesn't exist."
+msgstr ""
+
+#. TRANS: Client exception.
+#. TRANS: %1$s is this argument to the method this exception occurs in, %2$s is a URL.
+#: actions/pushhub.php:199
+#, php-format
+msgid "Invalid URL passed for %1$s: \"%2$s\""
+msgstr ""
+
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
+msgid "No such user."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/usersalmon.php:37 actions/groupsalmon.php:40
+msgid "No ID."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:81
+msgid "In reply to unknown notice."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:86
+msgid "In reply to a notice not by this user and not mentioning this user."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:163
+msgid "Could not save new favorite."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:195
+msgid "Can't favorite/unfavorite without an object."
+msgstr ""
+
+#. TRANS: Client exception.
+#: actions/usersalmon.php:207
+msgid "Can't handle that kind of object for liking/faving."
+msgstr ""
+
+#. TRANS: Client exception. %s is an object ID.
+#: actions/usersalmon.php:214
+#, php-format
+msgid "Notice with ID %s unknown."
+msgstr ""
+
+#. TRANS: Client exception. %1$s is a notice ID, %2$s is a user ID.
+#: actions/usersalmon.php:219
+#, php-format
+msgid "Notice with ID %1$s not posted by %2$s."
+msgstr ""
+
+#. TRANS: Field label.
+#: actions/ostatusgroup.php:78
+msgid "Join group"
+msgstr "Unirse ao grupo"
+
+#. TRANS: Tooltip for field label "Join group".
+#: actions/ostatusgroup.php:81
+msgid "OStatus group's address, like http://example.net/group/nickname."
+msgstr ""
+
+#. TRANS: Button text.
+#: actions/ostatusgroup.php:86 actions/ostatussub.php:75
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr ""
+
+#: actions/ostatusgroup.php:105
+msgid "You are already a member of this group."
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:140
+msgid "Already a member!"
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:151
+msgid "Remote group join failed!"
+msgstr ""
+
+#. TRANS: OStatus remote group subscription dialog error.
+#: actions/ostatusgroup.php:155
+msgid "Remote group join aborted!"
+msgstr ""
+
+#. TRANS: Page title for OStatus remote group join form
+#: actions/ostatusgroup.php:167
+msgid "Confirm joining remote group"
+msgstr ""
+
+#. TRANS: Instructions.
+#: actions/ostatusgroup.php:178
+msgid ""
+"You can subscribe to groups from other supported sites. Paste the group's "
+"profile URI below:"
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:47
+msgid "No such group."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:53
+msgid "Can't accept remote posts for a remote group."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:127
+msgid "Can't read profile to set up group membership."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/groupsalmon.php:131 actions/groupsalmon.php:174
+msgid "Groups can't join groups."
+msgstr ""
+
+#: actions/groupsalmon.php:144
+msgid "You have been blocked from that group by the admin."
+msgstr ""
+
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:159
+#, php-format
+msgid "Could not join remote user %1$s to group %2$s."
+msgstr ""
+
+#: actions/groupsalmon.php:171
+msgid "Can't read profile to cancel group membership."
+msgstr ""
+
+#. TRANS: Server error. %1$s is a profile URI, %2$s is a group nickname.
+#: actions/groupsalmon.php:188
+#, php-format
+msgid "Could not remove remote user %1$s from group %2$s."
+msgstr ""
+
+#. TRANS: Field label for a field that takes an OStatus user address.
+#: actions/ostatussub.php:68
+msgid "Subscribe to"
+msgstr "Subscribirse a"
+
+#. TRANS: Tooltip for field label "Subscribe to".
+#: actions/ostatussub.php:71
+msgid ""
+"OStatus user's address, like nickname@example.com or http://example.net/"
+"nickname"
+msgstr ""
+
+#. TRANS: Button text.
+#. TRANS: Tooltip for button "Join".
+#: actions/ostatussub.php:112
+msgctxt "BUTTON"
+msgid "Join this group"
+msgstr "Unirse a este grupo"
+
+#. TRANS: Button text.
+#: actions/ostatussub.php:115
+msgctxt "BUTTON"
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. TRANS: Tooltip for button "Confirm".
+#: actions/ostatussub.php:117
+msgid "Subscribe to this user"
+msgstr "Subscribirse a este usuario"
+
+#: actions/ostatussub.php:138
+msgid "You are already subscribed to this user."
+msgstr "Xa está subscrito a este usuario."
+
+#: actions/ostatussub.php:167
+msgid "Photo"
+msgstr "Foto"
+
+#: actions/ostatussub.php:178
+msgid "Nickname"
+msgstr "Alcume"
+
+#: actions/ostatussub.php:199
+msgid "Location"
+msgstr "Localización"
+
+#: actions/ostatussub.php:208
+msgid "URL"
+msgstr "URL"
+
+#: actions/ostatussub.php:220
+msgid "Note"
+msgstr "Nota"
+
+#. TRANS: Error text.
+#: actions/ostatussub.php:256 actions/ostatussub.php:263
+#: actions/ostatussub.php:288
+msgid ""
+"Sorry, we could not reach that address. Please make sure that the OStatus "
+"address is like nickname@example.com or http://example.net/nickname."
+msgstr ""
+
+#. TRANS: Error text.
+#: actions/ostatussub.php:267 actions/ostatussub.php:271
+#: actions/ostatussub.php:275 actions/ostatussub.php:279
+#: actions/ostatussub.php:283
+msgid ""
+"Sorry, we could not reach that feed. Please try that OStatus address again "
+"later."
+msgstr ""
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:317
+msgid "Already subscribed!"
+msgstr "Xa está subscrito!"
+
+#. TRANS: OStatus remote subscription dialog error.
+#: actions/ostatussub.php:322
+msgid "Remote subscription failed!"
+msgstr ""
+
+#: actions/ostatussub.php:369 actions/ostatusinit.php:64
+msgid "There was a problem with your session token. Try again, please."
+msgstr "Houbo un erro co seu pase. Inténteo de novo."
+
+#. TRANS: Form title.
+#: actions/ostatussub.php:397 actions/ostatusinit.php:83
+msgid "Subscribe to user"
+msgstr "Subscribirse ao usuario"
+
+#. TRANS: Page title for OStatus remote subscription form
+#: actions/ostatussub.php:417
+msgid "Confirm"
+msgstr "Confirmar"
+
+#. TRANS: Instructions.
+#: actions/ostatussub.php:429
+msgid ""
+"You can subscribe to users from other supported sites. Paste their address "
+"or profile URI below:"
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:42
+msgid "You can use the local subscription!"
+msgstr "Pode usar a subscrición local!"
+
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:98
+#, php-format
+msgid "Join group %s"
+msgstr "Unirse ao grupo \"%s\""
+
+#. TRANS: Button text.
+#: actions/ostatusinit.php:100
+msgctxt "BUTTON"
+msgid "Join"
+msgstr "Unirse"
+
+#. TRANS: Form legend.
+#: actions/ostatusinit.php:103
+#, php-format
+msgid "Subscribe to %s"
+msgstr "Subscribirse a %s"
+
+#. TRANS: Button text.
+#: actions/ostatusinit.php:105
+msgctxt "BUTTON"
+msgid "Subscribe"
+msgstr "Subscribirse"
+
+#. TRANS: Field label.
+#: actions/ostatusinit.php:118
+msgid "User nickname"
+msgstr "Alcume do usuario"
+
+#: actions/ostatusinit.php:119
+msgid "Nickname of the user you want to follow."
+msgstr "Alcume do usuario ao que quere seguir."
+
+#. TRANS: Field label.
+#: actions/ostatusinit.php:124
+msgid "Profile Account"
+msgstr "Conta de perfil"
+
+#. TRANS: Tooltip for field label "Profile Account".
+#: actions/ostatusinit.php:126
+msgid "Your account id (e.g. user@identi.ca)."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:148
+msgid "Must provide a remote profile."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:160
+msgid "Couldn't look up OStatus account profile."
+msgstr ""
+
+#. TRANS: Client error.
+#: actions/ostatusinit.php:173
+msgid "Couldn't confirm remote profile address."
+msgstr ""
+
+#. TRANS: Page title.
+#: actions/ostatusinit.php:218
+msgid "OStatus Connect"
+msgstr ""
+
+#: actions/pushcallback.php:50
+msgid "Empty or invalid feed id."
+msgstr ""
+
+#. TRANS: Server exception. %s is a feed ID.
+#: actions/pushcallback.php:56
+#, php-format
+msgid "Unknown PuSH feed id %s"
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid feed name.
+#: actions/pushcallback.php:96
+#, php-format
+msgid "Bad hub.topic feed \"%s\"."
+msgstr ""
+
+#. TRANS: Client exception. %1$s the invalid token, %2$s is the topic for which the invalid token was given.
+#: actions/pushcallback.php:101
+#, php-format
+msgid "Bad hub.verify_token %1$s for %2$s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:108
+#, php-format
+msgid "Unexpected subscribe request for %s."
+msgstr ""
+
+#. TRANS: Client exception. %s is an invalid topic.
+#: actions/pushcallback.php:113
+#, php-format
+msgid "Unexpected unsubscribe request for %s."
+msgstr ""
diff --git a/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po
index fdeba50c2..7a6f4c6b1 100644
--- a/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OStatus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:15+0000\n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:58:00+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:35+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:45:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-ostatus\n"
@@ -23,94 +23,94 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr "Subscriber"
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr "Inscriber"
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr "Inviate de %s via OStatus"
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr "Non poteva configurar le subscription remote."
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr "Non plus sequer"
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr "%1$s cessava de sequer %2$s."
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr "Non poteva configurar le membrato del gruppo remote."
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr "%1$s se ha jungite al gruppo %2$s."
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr "Falleva de facer se membro del gruppo remote."
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr "Quitar"
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr "%1$s ha quitate le gruppo %2$s."
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr "Disfavorir"
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr "%1$s marcava le nota %2$s como non plus favorite."
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr "Remote"
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr "Actualisation de profilo"
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr "%s ha actualisate su pagina de profilo."
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -126,14 +126,14 @@ msgstr "Tentativa de comenciar subscription PuSH pro syndication sin centro."
msgid "Attempting to end PuSH subscription for feed with no hub."
msgstr "Tentativa de terminar subscription PuSH pro syndication sin centro."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
msgstr ""
"Stato ostatus_profile invalide: IDs e de gruppo e de profilo definite pro %s."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -156,106 +156,114 @@ msgstr ""
"Typo invalide passate a Ostatos_profile::notify. Illo debe esser catena XML "
"o entrata Activity."
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr "Formato de syndication incognite."
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr "Syndication RSS sin canal."
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr "Non pote tractar iste typo de message."
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr "Nulle contento pro nota %s."
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr "Monstrar plus"
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr "Non poteva attinger pagina de profilo %s."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr "Non poteva trovar un URL de syndication pro pagina de profilo %s."
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr ""
"Non pote trovar satis de information de profilo pro facer un syndication."
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr "URL de avatar %s invalide."
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr "Tentava actualisar avatar pro profilo remote non salveguardate %s."
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr "Incapace de obtener avatar ab %s."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr "Usator local non pote esser referentiate como remote."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr "Gruppo local non pote esser referentiate como remote."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr "Non pote salveguardar profilo local."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr "Non pote salveguardar profilo OStatus."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr "Adresse webfinger invalide."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr "Non poteva salveguardar profilo pro \"%s\"."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr "Non poteva salveguardar osatus_profile pro %s."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr "Non poteva trovar un profilo valide pro \"%s\"."
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr "Non poteva immagazinar contento HTML de longe message como file."
@@ -348,16 +356,6 @@ msgid "Unable to find services for %s."
msgstr "Incapace de trovar servicios pro %s."
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr "XML invalide."
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr "XML invalide, radice XRD mancante."
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr "Incapace de localisar le clave public del signator."
@@ -430,7 +428,7 @@ msgstr "Invalide hub.topic \"%s\". Gruppo non existe."
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr "Invalide URL passate pro %1$s: \"%2$s\""
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr "Iste usator non existe."
diff --git a/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po
index 44baf29ee..4512fe5cb 100644
--- a/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OStatus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:15+0000\n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:58:00+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:35+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:45:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-ostatus\n"
@@ -23,94 +23,94 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr "Претплати се"
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr "Зачлени се"
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr "Испратено од %s преку OStatus"
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr "Не можев да ја поставам далечинската претплата."
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr "Престани со следење"
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr "%1$s престана да го/ја следи %2$s."
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr "Не можев да го поставам членството во далечинската група."
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr "%1$s се зачлени во групата %2$s."
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr "Не успеав да Ве зачленам во далечинската група."
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr "Напушти"
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr "%1$s ја напушти групата %2$s."
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr "Откажи бендисана"
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr "%1$s повеќе не ја бендисува забелешката %2$s."
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr "Далечински"
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr "Поднова на профил"
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr "%s ја поднови својата профилна страница."
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -127,7 +127,7 @@ msgid "Attempting to end PuSH subscription for feed with no hub."
msgstr ""
"Се обидувам да ставам крај на PuSH-претплатата за емитување без средиште."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
@@ -135,7 +135,7 @@ msgstr ""
"Неважечка ostatus_profile-состојба: назнаките (ID) на групата и профилот се "
"наместени за %s."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -159,106 +159,114 @@ msgstr ""
"На Ostatus_profile::notify е пренесен неважечки тип. Мора да биде XML-низа "
"или ставка во Activity."
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr "Непознат формат на каналско емитување."
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr "RSS-емитување без канал."
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr "Не можам да работам со таква објава."
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr "Нема содржина за забелешката %s."
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr "Повеќе"
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr "Не можев да ја добијам профилната страница %s."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr "Не можев да пронајдам каналска URL-адреса за профилната страница %s."
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr "Не можев да најдам доволно профилни податоци за да направам канал."
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr "Неважечка URL-адреса за аватарот: %s."
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr ""
"Се обидов да го подновам аватарот за незачуваниот далечински профил %s."
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr "Не можам да го добијам аватарот од %s."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr "Локалниот корисник не може да се наведе како далечински."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr "Локалната група не може да се наведе како далечинска."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr "Не можам да го зачувам локалниот профил."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr "Не можам да го зачувам профилот од OStatus."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr "Ова не е важечка Webfinger-адреса"
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr "Не можам да го зачувам профилот за „%s“."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr "Не можам да го зачувам ostatus_profile за „%s“."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr "Не можев да пронајдам важечки профил за „%s“."
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr ""
"Не можам да ја складирам HTML-содржината на долгата објава како податотека."
@@ -352,16 +360,6 @@ msgid "Unable to find services for %s."
msgstr "Не можев да најдам служби за %s."
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr "Неважечко XML."
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr "Неважечко XML. Нема XRD-основа."
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr "Не можам да го пронајдам јавниот клуч на потписникот."
@@ -433,7 +431,7 @@ msgstr "Неважечки hub.topic „%s“. Групата не постои.
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr "Добив неважечка URL-адреса за %1$s: „%2$s“"
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr "Нема таков корисник."
diff --git a/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po
index 7ffad8df9..7762aed33 100644
--- a/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OStatus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:16+0000\n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:58:00+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:35+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:45:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-ostatus\n"
@@ -24,39 +24,39 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr "Abonneren"
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr "Toetreden"
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr "Verzonden vanaf %s via OStatus"
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr ""
"Het was niet mogelijk het abonnement via een andere dienst in te stellen."
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr "Niet langer volgen"
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr "%1$s volgt %2$s niet langer."
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr ""
"Het was niet mogelijk het groepslidmaatschap via een andere dienst in te "
@@ -64,58 +64,58 @@ msgstr ""
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr "%1$s is lid geworden van de groep %2$s."
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr ""
"Het was niet mogelijk toe te streden to de groep van een andere dienst."
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr "Verlaten"
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr "%1$s heeft de groep %2$s verlaten"
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr "Uit favorieten verwijderen"
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr "%1$s heeft de mededeling %2$s als favoriet verwijderd."
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr "Via andere dienst"
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr "Profielupdate"
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr "Het profiel van %s is bijgewerkt."
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -133,7 +133,7 @@ msgid "Attempting to end PuSH subscription for feed with no hub."
msgstr ""
"Aan het proberen een PuSH-abonnement te verwijderen voor een feed zonder hub."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
@@ -141,7 +141,7 @@ msgstr ""
"Ongeldige ostatus_profile status: het ID voor zowel de groep als het profiel "
"voor %s is ingesteld."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -165,112 +165,120 @@ msgstr ""
"Ongeldig type doorgegeven aan Ostatus_profile::notify. Het moet een XML-"
"string of Activity zijn."
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr "Onbekend feedformaat"
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr "RSS-feed zonder kanaal."
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr "Dat type post kan niet verwerkt worden."
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr "Geen inhoud voor mededeling %s."
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr "Meer weergeven"
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr "Het was niet mogelijk de profielpagina %s te bereiken."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr "Het was niet mogelijk de feed-URL voor de profielpagina %s te vinden."
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr ""
"Het was niet mogelijk voldoende profielinformatie te vinden om een feed te "
"maken."
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr "Ongeldige avatar-URL %s."
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr ""
"Geprobeerd om een avatar bij te werken voor het niet opgeslagen profiel %s."
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr "Het was niet mogelijk de avatar op te halen van %s."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr ""
"Naar een lokale gebruiker kan niet verwezen worden alsof die zich bij een "
"andere dienst bevindt."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr ""
"Naar een lokale groep kan niet verwezen worden alsof die zich bij een andere "
"dienst bevindt."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr "Het was niet mogelijk het lokale profiel op te slaan."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr "Het was niet mogelijk het Ostatusprofiel op te slaan."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr "Geen geldig webfingeradres."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr "Het was niet mogelijk het profiel voor \"%s\" op te slaan."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr "Het was niet mogelijk het ostatus_profile voor \"%s\" op te slaan."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr "Er is geen geldig profiel voor \"%s\" gevonden."
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr ""
"Het was niet mogelijk de HTML-inhoud van het lange bericht als bestand op te "
@@ -365,16 +373,6 @@ msgid "Unable to find services for %s."
msgstr "Het was niet mogelijk diensten te vinden voor %s."
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr "Ongeldige XML."
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr "Ongeldige XML. De XRD-root mist."
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr ""
@@ -451,7 +449,7 @@ msgstr "Ongeldig hub.topic \"%s\". De groep bestaat niet."
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr "Er is een ongeldige URL doorgegeven voor %1$s: \"%2$s\""
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr "Onbekende gebruiker."
diff --git a/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po
index 7d3ffb80f..98f3a4fe7 100644
--- a/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OStatus\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:17+0000\n"
+"POT-Creation-Date: 2010-11-30 16:54+0000\n"
+"PO-Revision-Date: 2010-11-30 16:58:00+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:35+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:45:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77474); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-ostatus\n"
@@ -24,94 +24,94 @@ msgstr ""
#. TRANS: Link description for link to subscribe to a remote user.
#. TRANS: Link text for a user to subscribe to an OStatus user.
-#: OStatusPlugin.php:229 OStatusPlugin.php:939
+#: OStatusPlugin.php:225 OStatusPlugin.php:935
msgid "Subscribe"
msgstr "Підписатись"
#. TRANS: Link description for link to join a remote group.
-#: OStatusPlugin.php:248 OStatusPlugin.php:657 actions/ostatussub.php:109
+#: OStatusPlugin.php:244 OStatusPlugin.php:653 actions/ostatussub.php:109
msgid "Join"
msgstr "Приєднатися"
#. TRANSLATE: %s is a domain.
-#: OStatusPlugin.php:461
+#: OStatusPlugin.php:457
#, php-format
msgid "Sent from %s via OStatus"
msgstr "Надіслано з %s через OStatus"
#. TRANS: Exception.
-#: OStatusPlugin.php:533
+#: OStatusPlugin.php:529
msgid "Could not set up remote subscription."
msgstr "Не вдалося створити віддалену підписку."
-#: OStatusPlugin.php:607
+#: OStatusPlugin.php:603
msgid "Unfollow"
msgstr "Не читати"
#. TRANS: Success message for unsubscribe from user attempt through OStatus.
#. TRANS: %1$s is the unsubscriber's name, %2$s is the unsubscribed user's name.
-#: OStatusPlugin.php:610
+#: OStatusPlugin.php:606
#, php-format
msgid "%1$s stopped following %2$s."
msgstr "%1$s припинив читати ваші дописи %2$s."
-#: OStatusPlugin.php:638
+#: OStatusPlugin.php:634
msgid "Could not set up remote group membership."
msgstr "Не вдалося приєднатися до віддаленої спільноти."
#. TRANS: Success message for subscribe to group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the subscribed group's name.
-#: OStatusPlugin.php:660
+#: OStatusPlugin.php:656
#, php-format
msgid "%1$s has joined group %2$s."
msgstr "%1$s приєднався до спільноти %2$s."
#. TRANS: Exception.
-#: OStatusPlugin.php:669
+#: OStatusPlugin.php:665
msgid "Failed joining remote group."
msgstr "Помилка приєднання до віддаленої спільноти."
-#: OStatusPlugin.php:709
+#: OStatusPlugin.php:705
msgid "Leave"
msgstr "Залишити"
#. TRANS: Success message for unsubscribe from group attempt through OStatus.
#. TRANS: %1$s is the member name, %2$s is the unsubscribed group's name.
-#: OStatusPlugin.php:712
+#: OStatusPlugin.php:708
#, php-format
msgid "%1$s has left group %2$s."
msgstr "%1$s залишив спільноту %2$s."
-#: OStatusPlugin.php:787
+#: OStatusPlugin.php:783
msgid "Disfavor"
msgstr "Не обраний"
#. TRANS: Success message for remove a favorite notice through OStatus.
#. TRANS: %1$s is the unfavoring user's name, %2$s is URI to the no longer favored notice.
-#: OStatusPlugin.php:790
+#: OStatusPlugin.php:786
#, php-format
msgid "%1$s marked notice %2$s as no longer a favorite."
msgstr "%1$s позначив допис %2$s, як такий, що більше не є обраним."
#. TRANS: Link text for link to remote subscribe.
-#: OStatusPlugin.php:866
+#: OStatusPlugin.php:862
msgid "Remote"
msgstr "Віддалено"
#. TRANS: Title for activity.
-#: OStatusPlugin.php:906
+#: OStatusPlugin.php:902
msgid "Profile update"
msgstr "Оновлення профілю"
#. TRANS: Ping text for remote profile update through OStatus.
#. TRANS: %s is user that updated their profile.
-#: OStatusPlugin.php:909
+#: OStatusPlugin.php:905
#, php-format
msgid "%s has updated their profile page."
msgstr "%s оновив сторінку свого профілю."
#. TRANS: Plugin description.
-#: OStatusPlugin.php:954
+#: OStatusPlugin.php:950
msgid ""
"Follow people across social networks that implement <a href=\"http://ostatus."
"org/\">OStatus</a>."
@@ -130,7 +130,7 @@ msgstr ""
"Спроба скасувати підписку за допомогою PuSH до веб-стрічки, котра не має "
"вузла."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:192
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs set for %s."
@@ -138,7 +138,7 @@ msgstr ""
"Невірний стан параметру ostatus_profile: як групові, так і персональні "
"ідентифікатори встановлено для %s."
-#. TRANS: Server exception.
+#. TRANS: Server exception. %s is a URI.
#: classes/Ostatus_profile.php:195
#, php-format
msgid "Invalid ostatus_profile state: both group and profile IDs empty for %s."
@@ -162,106 +162,114 @@ msgstr ""
"До параметру Ostatus_profile::notify передано невірний тип. Це має бути або "
"рядок у форматі XML, або запис активності."
-#: classes/Ostatus_profile.php:408
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:409
msgid "Unknown feed format."
msgstr "Невідомий формат веб-стрічки."
-#: classes/Ostatus_profile.php:431
+#. TRANS: Exception.
+#: classes/Ostatus_profile.php:433
msgid "RSS feed without a channel."
msgstr "RSS-стрічка не має каналу."
#. TRANS: Client exception.
-#: classes/Ostatus_profile.php:476
+#: classes/Ostatus_profile.php:478
msgid "Can't handle that kind of post."
msgstr "Не вдається обробити такий тип допису."
-#. TRANS: Client exception. %s is a source URL.
-#: classes/Ostatus_profile.php:559
+#. TRANS: Client exception. %s is a source URI.
+#: classes/Ostatus_profile.php:561
#, php-format
msgid "No content for notice %s."
msgstr "Допис %s не має змісту."
-#. TRANS: Shown when a notice is longer than supported and/or when attachments are present.
-#: classes/Ostatus_profile.php:592
+#. TRANS: Shown when a notice is longer than supported and/or when attachments are present. At runtime
+#. TRANS: this will usually be replaced with localised text from StatusNet core messages.
+#: classes/Ostatus_profile.php:596
msgid "Show more"
msgstr "Розгорнути"
#. TRANS: Exception. %s is a profile URL.
-#: classes/Ostatus_profile.php:785
+#: classes/Ostatus_profile.php:789
#, php-format
msgid "Could not reach profile page %s."
msgstr "Не вдалося досягти сторінки профілю %s."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:843
+#. TRANS: Exception. %s is a URL.
+#: classes/Ostatus_profile.php:847
#, php-format
msgid "Could not find a feed URL for profile page %s."
msgstr "Не вдалося знайти URL веб-стрічки для сторінки профілю %s."
-#: classes/Ostatus_profile.php:980
+#. TRANS: Feed sub exception.
+#: classes/Ostatus_profile.php:985
msgid "Can't find enough profile information to make a feed."
msgstr ""
"Не можу знайти достатньо інформації про профіль, аби сформувати веб-стрічку."
-#: classes/Ostatus_profile.php:1039
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1045
#, php-format
msgid "Invalid avatar URL %s."
msgstr "Невірна URL-адреса аватари %s."
-#: classes/Ostatus_profile.php:1049
+#. TRANS: Server exception. %s is a URI.
+#: classes/Ostatus_profile.php:1056
#, php-format
msgid "Tried to update avatar for unsaved remote profile %s."
msgstr "Намагаюся оновити аватару для не збереженого віддаленого профілю %s."
-#: classes/Ostatus_profile.php:1058
+#. TRANS: Server exception. %s is a URL.
+#: classes/Ostatus_profile.php:1066
#, php-format
msgid "Unable to fetch avatar from %s."
msgstr "Неможливо завантажити аватару з %s."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1284
+#: classes/Ostatus_profile.php:1292
msgid "Local user can't be referenced as remote."
msgstr "Місцевий користувач не може бути зазначеним у якості віддаленого."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1289
+#: classes/Ostatus_profile.php:1297
msgid "Local group can't be referenced as remote."
msgstr "Локальну спільноту не можна зазначити у якості віддаленої."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1341 classes/Ostatus_profile.php:1352
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1349 classes/Ostatus_profile.php:1360
msgid "Can't save local profile."
msgstr "Не вдається зберегти місцевий профіль."
-#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1360
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1368
msgid "Can't save OStatus profile."
msgstr "Не вдається зберегти профіль OStatus."
#. TRANS: Exception.
-#: classes/Ostatus_profile.php:1619 classes/Ostatus_profile.php:1647
+#: classes/Ostatus_profile.php:1627 classes/Ostatus_profile.php:1655
msgid "Not a valid webfinger address."
msgstr "Це недійсна адреса для протоколу WebFinger."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1729
+#: classes/Ostatus_profile.php:1737
#, php-format
msgid "Couldn't save profile for \"%s\"."
msgstr "Не можу зберегти профіль для «%s»."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1748
+#: classes/Ostatus_profile.php:1756
#, php-format
msgid "Couldn't save ostatus_profile for \"%s\"."
msgstr "Не можу зберегти профіль OStatus для «%s»."
#. TRANS: Exception. %s is a webfinger address.
-#: classes/Ostatus_profile.php:1756
+#: classes/Ostatus_profile.php:1764
#, php-format
msgid "Couldn't find a valid profile for \"%s\"."
msgstr "не можу знайти відповідний й профіль для «%s»."
-#: classes/Ostatus_profile.php:1798
+#. TRANS: Server exception.
+#: classes/Ostatus_profile.php:1807
msgid "Could not store HTML content of long post as file."
msgstr "Не можу зберегти HTML місткого допису у якості файлу."
@@ -354,16 +362,6 @@ msgid "Unable to find services for %s."
msgstr "Не вдається знайти сервіси для %s."
#. TRANS: Exception.
-#: lib/xrd.php:64
-msgid "Invalid XML."
-msgstr "Невірний XML."
-
-#. TRANS: Exception.
-#: lib/xrd.php:69
-msgid "Invalid XML, missing XRD root."
-msgstr "Невірний XML, корінь XRD відсутній."
-
-#. TRANS: Exception.
#: lib/magicenvelope.php:80
msgid "Unable to locate signer public key."
msgstr "Не вдалося знайти публічного ключа підписанта."
@@ -437,7 +435,7 @@ msgstr "hub.topic «%s» невірний. Спільноти не існує."
msgid "Invalid URL passed for %1$s: \"%2$s\""
msgstr "Для %1$s передано невірний URL: «%2$s»"
-#: actions/userxrd.php:59 actions/ownerxrd.php:39 actions/usersalmon.php:43
+#: actions/ownerxrd.php:39 actions/usersalmon.php:43
msgid "No such user."
msgstr "Такого користувача немає."
diff --git a/plugins/OpenExternalLinkTarget/locale/es/LC_MESSAGES/OpenExternalLinkTarget.po b/plugins/OpenExternalLinkTarget/locale/es/LC_MESSAGES/OpenExternalLinkTarget.po
index 256a7ebc1..27fa20b08 100644
--- a/plugins/OpenExternalLinkTarget/locale/es/LC_MESSAGES/OpenExternalLinkTarget.po
+++ b/plugins/OpenExternalLinkTarget/locale/es/LC_MESSAGES/OpenExternalLinkTarget.po
@@ -1,6 +1,7 @@
# Translation of StatusNet - OpenExternalLinkTarget to Spanish (Español)
# Expored from translatewiki.net
#
+# Author: Locos epraix
# Author: Translationista
# --
# This file is distributed under the same license as the StatusNet package.
@@ -9,21 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenExternalLinkTarget\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-18 18:35+0000\n"
-"PO-Revision-Date: 2010-10-18 18:43:21+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:40+0000\n"
"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-09 14:36:34+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r74952); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:13:52+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: #out-statusnet-plugin-openexternallinktarget\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: OpenExternalLinkTargetPlugin.php:59
-#, fuzzy
msgid "Opens external links (i.e. with rel=external) on a new window or tab."
msgstr ""
-"Abre vínculos externos (por ejemplo, con rel=external) en una nueva ventana "
-"o pestaña."
+"Abre enlaces externos (por ejemplo, con rel=external) en una nueva ventana o "
+"pestaña."
diff --git a/plugins/OpenExternalLinkTarget/locale/ru/LC_MESSAGES/OpenExternalLinkTarget.po b/plugins/OpenExternalLinkTarget/locale/ru/LC_MESSAGES/OpenExternalLinkTarget.po
index 8a43460f4..cdc42bd13 100644
--- a/plugins/OpenExternalLinkTarget/locale/ru/LC_MESSAGES/OpenExternalLinkTarget.po
+++ b/plugins/OpenExternalLinkTarget/locale/ru/LC_MESSAGES/OpenExternalLinkTarget.po
@@ -2,6 +2,7 @@
# Expored from translatewiki.net
#
# Author: Eleferen
+# Author: Александр Сигачёв
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -9,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenExternalLinkTarget\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-18 18:35+0000\n"
-"PO-Revision-Date: 2010-10-18 18:43:21+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:40+0000\n"
"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-09 14:36:34+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r74952); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:13:52+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: #out-statusnet-plugin-openexternallinktarget\n"
@@ -23,8 +24,6 @@ msgstr ""
"2 && n%10 <= 4 && (n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
#: OpenExternalLinkTargetPlugin.php:59
-#, fuzzy
msgid "Opens external links (i.e. with rel=external) on a new window or tab."
msgstr ""
-"Возможность открыть внешние ссылки (например, rel=внешние) в новом окне или "
-"вкладке."
+"Открывать внешние ссылки (например, rel=external) в новом окне или вкладке."
diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php
index cdaabbbf7..d5a8c1bf0 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -735,4 +735,29 @@ class OpenIDPlugin extends Plugin
return true;
}
+
+ /**
+ * Add link in user's XRD file to allow OpenID login.
+ *
+ * This link in the XRD should let users log in with their
+ * Webfinger identity to services that support it. See
+ * http://webfinger.org/login for an example.
+ *
+ * @param XRD &$xrd Currently-displaying XRD object
+ * @param User $user The user that it's for
+ *
+ * @return boolean hook value (always true)
+ */
+
+ function onEndXrdActionLinks(&$xrd, $user)
+ {
+ $profile = $user->getProfile();
+
+ if (!empty($profile)) {
+ $xrd->links[] = array('rel' => 'http://specs.openid.net/auth/2.0/provider',
+ 'href' => $profile->profileurl);
+ }
+
+ return true;
+ }
}
diff --git a/plugins/OpenID/finishopenidlogin.php b/plugins/OpenID/finishopenidlogin.php
index 01dd61edb..0053a7f1d 100644
--- a/plugins/OpenID/finishopenidlogin.php
+++ b/plugins/OpenID/finishopenidlogin.php
@@ -100,8 +100,15 @@ class FinishopenidloginAction extends Action
return;
}
+ // We don't recognize this OpenID, so we're going to give the user
+ // two options, each in its own mini-form.
+ //
+ // First, they can create a new account using their OpenID auth
+ // info. The profile will be pre-populated with whatever name,
+ // email, and location we can get from the OpenID provider, so
+ // all we ask for is the license confirmation.
$this->elementStart('form', array('method' => 'post',
- 'id' => 'account_connect',
+ 'id' => 'account_create',
'class' => 'form_settings',
'action' => common_local_url('finishopenidlogin')));
$this->hidden('token', common_session_token());
@@ -141,7 +148,15 @@ class FinishopenidloginAction extends Action
// TRANS: Button label in form in which to create a new user on the site for an OpenID.
$this->submit('create', _m('BUTTON', 'Create'));
$this->elementEnd('fieldset');
+ $this->elementEnd('form');
+ // The second option is to attach this OpenID to an existing account
+ // on the local system, which they need to provide a password for.
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'account_connect',
+ 'class' => 'form_settings',
+ 'action' => common_local_url('finishopenidlogin')));
+ $this->hidden('token', common_session_token());
$this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
$this->element('legend', null,
// TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
@@ -272,13 +287,10 @@ class FinishopenidloginAction extends Action
}
}
- $nickname = $this->trimmed('newname');
-
- if (!Validate::string($nickname, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
- // TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
- $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
+ try {
+ $nickname = Nickname::normalize($this->trimmed('newname'));
+ } catch (NicknameException $e) {
+ $this->showForm($e->getMessage());
return;
}
@@ -463,9 +475,7 @@ class FinishopenidloginAction extends Action
function isNewNickname($str)
{
- if (!Validate::string($str, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
+ if (!Nickname::isValid($str)) {
return false;
}
if (!User::allowed_nickname($str)) {
diff --git a/plugins/OpenID/locale/OpenID.pot b/plugins/OpenID/locale/OpenID.pot
index 6975dbaea..90c0ccebc 100644
--- a/plugins/OpenID/locale/OpenID.pot
+++ b/plugins/OpenID/locale/OpenID.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+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"
@@ -456,39 +456,34 @@ msgstr ""
msgid "Not a valid invitation code."
msgstr ""
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr ""
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr ""
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr ""
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr ""
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr ""
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr ""
diff --git a/plugins/OpenID/locale/ar/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/ar/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..03a104d2d
--- /dev/null
+++ b/plugins/OpenID/locale/ar/LC_MESSAGES/OpenID.po
@@ -0,0 +1,589 @@
+# Translation of StatusNet - OpenID to Arabic (العربية)
+# Expored from translatewiki.net
+#
+# Author: OsamaK
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:34+0000\n"
+"Language-Team: Arabic <http://translatewiki.net/wiki/Portal:ar>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ar\n"
+"X-Message-Group: #out-statusnet-plugin-openid\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"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr "إعدادات الهوية المفتوحة"
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+"تمكنك [الهوية المفتوحة](%%doc.openid%%) من الولوج إلى مواقع كثيرة بنفس حساب "
+"المستخدم. أدر هوياتك المفتوحة هنا."
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr "أضف هوية مفتوحة"
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+"إذا أردت إضافة هوية مفتوحة إلى حسابك، أدخلها إلى الصندوق أدناه وانقر \"أضف\"."
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr "مسار الهوية المفتوحة"
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr "أضف"
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr "أزل الهوية المفتوحة"
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+"إن حذف هويتك المفتوحة الوحيدة سيجعل من المستحيل الولوج! إذا أردت إضافة هذه "
+"فأضف هوية مفتوحة أخرى أولا."
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr "يمكنك إزالة هوية مفتوحة من حسابك بنفر الزر المُعلّم \"أزل\"."
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr "أزل"
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr "مواقع الهوية المفتوحة الموثوقة"
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+"يسمح للمواقع التالية بالوصول إلى هويتك والولوج بها. يمكنك إزالة موقع من "
+"القائمة لمنعه من الوصول إلى هويتك المفتوحة."
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr "لا هوية مفتوحة كهذه."
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr "تلك الهوية المفتوحة ليست لك."
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr "أزيلت الهوية المفتوحة."
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr "الهوية المفتوحة"
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr "مسار المزود غير صالح. أقصى طول 255 حرف."
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr "اسم فريق غير صالح. أقصى طول 255 حرف."
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr "مزود موثوق"
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr ""
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr ""
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr ""
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr "ساعدني!"
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr ""
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr ""
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr "استمر"
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr "أدخل اسم مستخدمك."
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr ""
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "أنشئ حسابًا جديدًا"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr ""
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr ""
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr ""
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "كلمة السر"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr ""
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "تذكرني"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr ""
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "استمر"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "ألغِ"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr "لست والجًا."
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr ""
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr ""
diff --git a/plugins/OpenID/locale/br/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/br/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..c17aab71c
--- /dev/null
+++ b/plugins/OpenID/locale/br/LC_MESSAGES/OpenID.po
@@ -0,0 +1,582 @@
+# Translation of StatusNet - OpenID to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-openid\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr "Ouzhpennañ OpenID"
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr ""
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr "Ouzhpennañ"
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr "Dilemel"
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr ""
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr ""
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr "OpenID"
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr ""
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr "Skipailh ret"
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr "Dibarzhioù"
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr "Ur fazi 'zo bet pa veze enrollet ar profil."
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr "Ur fazi 'zo bet pa veze enrollet an implijer."
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr "Kevreañ d'al lec'hienn"
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr "Kevreañ"
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr "Sikour din !"
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr "Skoazell"
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr "Klask tud pe un tamm testenn"
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr "Klask"
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr "OpenID"
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr "Kefluniadur OpenID"
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr "Kenderc'hel"
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr "Ebarzhit hoc'h anv implijer"
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr "Kevreet oc'h dija."
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+"Rankout a rit bezañ a-du gant termenoù an aotre-implijout evit krouiñ ur "
+"gont."
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr "Ur gudenn dizanv a zo bet."
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "Krouiñ ur gont nevez"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr "Krouiñ un implijer nevez gant al lesanv-se."
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr "Lesanv nevez"
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Krouiñ"
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr ""
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr "Lesanv a zo dioutañ"
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "Ger-tremen"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Kevreañ"
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr "N'eo ket aotreet krouiñ kontoù."
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr "N'eo ket reizh ar c'hod pedadenn."
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr "Implijet eo dija al lesanv-se. Klaskit unan all."
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr "Kevreañ gant ur gont [OpenID](%%doc.openid%%)."
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "Derc'hel soñj ac'hanon"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr "Kevreañ"
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "Kenderc'hel"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "Nullañ"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr "Nann-kevreet."
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr ""
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr ""
diff --git a/plugins/OpenID/locale/ca/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/ca/LC_MESSAGES/OpenID.po
index 52c847155..754338e56 100644
--- a/plugins/OpenID/locale/ca/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/ca/LC_MESSAGES/OpenID.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:59+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
"Language-Team: Catalan <http://translatewiki.net/wiki/Portal:ca>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -472,41 +472,35 @@ msgstr "No es permet el registre."
msgid "Not a valid invitation code."
msgstr "No és un codi d'invitació vàlid."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"El sobrenom ha de contenir només lletres minúscules i nombres, i cap espai."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "No es permet el sobrenom."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "El sobrenom ja és en ús. Proveu-ne un altre."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "No s'ha trobat la connexió OpenID emmagatzemada."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr ""
"S'està creant un compte nou per a una connexió OpenID que ja té un usuari."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "El nom d'usuari o la contrasenya no són vàlids."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "S'ha produït un error en connectar l'usuari amb la connexió OpenID."
@@ -604,3 +598,8 @@ msgstr "S'ha produït un error en connectar l'usuari"
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "S'ha produït un error en actualitzar el perfil"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "El sobrenom ha de contenir només lletres minúscules i nombres, i cap "
+#~ "espai."
diff --git a/plugins/OpenID/locale/de/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/de/LC_MESSAGES/OpenID.po
index ff53e5bd0..7210ff77f 100644
--- a/plugins/OpenID/locale/de/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/de/LC_MESSAGES/OpenID.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:59+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -340,7 +340,6 @@ msgstr ""
#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
#: OpenIDPlugin.php:641
-#, fuzzy
msgctxt "BUTTON"
msgid "Continue"
msgstr "Weiter"
@@ -499,41 +498,34 @@ msgstr "Registrierung nicht erlaubt."
msgid "Not a valid invitation code."
msgstr "Kein gültiger Einladungscode."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Der Benutzername darf nur aus Kleinbuchstaben und Zahlen bestehen. "
-"Leerzeichen sind nicht erlaubt."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Benutzername nicht erlaubt."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Benutzername wird bereits verwendet. Suche dir einen anderen aus."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr ""
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr ""
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Benutzername oder Passwort falsch."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr ""
@@ -628,3 +620,8 @@ msgstr ""
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Der Benutzername darf nur aus Kleinbuchstaben und Zahlen bestehen. "
+#~ "Leerzeichen sind nicht erlaubt."
diff --git a/plugins/OpenID/locale/fr/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/fr/LC_MESSAGES/OpenID.po
index d20835cbf..e098843f3 100644
--- a/plugins/OpenID/locale/fr/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/fr/LC_MESSAGES/OpenID.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:46:59+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -508,41 +508,34 @@ msgstr "Inscription non autorisée."
msgid "Not a valid invitation code."
msgstr "Le code d’invitation n’est pas valide."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
-"chiffres, sans espaces."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Pseudonyme non autorisé."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Pseudonyme déjà utilisé. Essayez-en un autre."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "OpenID stocké non trouvé."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr "Créer un nouveau compte pour OpenID qui a déjà un utilisateur."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Nom d’utilisateur ou mot de passe incorrect."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "Erreur de connexion de l’utilisateur à OpenID."
@@ -641,3 +634,8 @@ msgstr "Erreur lors de la connexion de l’utilisateur à OpenID."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Erreur lors de la mise à jour du profil utilisateur"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
+#~ "chiffres, sans espaces."
diff --git a/plugins/OpenID/locale/gl/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/gl/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..f19e25af7
--- /dev/null
+++ b/plugins/OpenID/locale/gl/LC_MESSAGES/OpenID.po
@@ -0,0 +1,582 @@
+# Translation of StatusNet - OpenID to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-openid\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr ""
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr ""
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr "Engadir"
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr "Eliminar"
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr ""
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr ""
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr "OpenID"
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr ""
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr ""
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr "Opcións"
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr ""
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr "Identificarse no sitio"
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr "Rexistro"
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr "Axuda!"
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr "Axuda"
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr "Buscar persoas ou palabras"
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr "Procurar"
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr "OpenID"
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr "Configuración do OpenID"
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr "Xa se identificou."
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr ""
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "Crear unha conta nova"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr "Crear un novo usuario con este alcume."
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr "Novo alcume"
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+"Entre 1 e 64 letras minúsculas ou números, sen signos de puntuación, "
+"espazos, tiles ou eñes"
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Crear"
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr ""
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "Contrasinal"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Conectarse"
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr "O nome de usuario ou contrasinal non son correctos."
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "Lembrádeme"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr "Acceder ao sistema"
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "Continuar"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr "Non iniciou sesión."
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr ""
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr ""
diff --git a/plugins/OpenID/locale/ia/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/ia/LC_MESSAGES/OpenID.po
index 68e4e32e2..eeddda783 100644
--- a/plugins/OpenID/locale/ia/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/ia/LC_MESSAGES/OpenID.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:00+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -498,39 +498,34 @@ msgstr "Creation de conto non permittite."
msgid "Not a valid invitation code."
msgstr "Le codice de invitation es invalide."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Pseudonymo non permittite."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Pseudonymo ja in uso. Proba un altere."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "Le OpenID immagazinate non esseva trovate."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr "Tentativa de crear un nove conto pro un OpenID que ha jam un usator."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Nomine de usator o contrasigno invalide."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "Error durante le connexion del usator a OpenID."
@@ -628,3 +623,7 @@ msgstr "Error durante le connexion del usator."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Error durante le actualisation del profilo"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
diff --git a/plugins/OpenID/locale/mk/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/mk/LC_MESSAGES/OpenID.po
index 851239175..e0eb77175 100644
--- a/plugins/OpenID/locale/mk/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/mk/LC_MESSAGES/OpenID.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:00+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:35+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -494,39 +494,34 @@ msgstr "Регистрацијата не е дозволена."
msgid "Not a valid invitation code."
msgstr "Ова не е важечки код за покана."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "Прекарот мора да има само мали букви и бројки и да нема празни места."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Прекарот не е дозволен."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Прекарот е зафатен. Одберете друг."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "Складираниот OpenID не е пронајден."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr "Создавање на сметка за OpenID што веќе има корисник."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Неважечко корисничко име или лозинка."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "Грешка при поврзувањето на корисникот со OpenID."
@@ -623,3 +618,7 @@ msgstr "Грешка при поврзувањето на корисникот."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Грешка при подновувањето на профилот"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Прекарот мора да има само мали букви и бројки и да нема празни места."
diff --git a/plugins/OpenID/locale/nb/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/nb/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..c99c9fb67
--- /dev/null
+++ b/plugins/OpenID/locale/nb/LC_MESSAGES/OpenID.po
@@ -0,0 +1,580 @@
+# Translation of StatusNet - OpenID to Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+# Expored from translatewiki.net
+#
+# Author: Nghtwlkr
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:36+0000\n"
+"Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: no\n"
+"X-Message-Group: #out-statusnet-plugin-openid\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr "Legg til OpenID"
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr "OpenID-adresse"
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr "Legg til"
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr "Fjern OpenID"
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr "Fjern"
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr ""
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr "Ingen slik OpenID."
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr "OpenID fjernet."
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr "OpenID"
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr ""
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr ""
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr ""
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr ""
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr "Hjelp meg."
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr "Hjelp"
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr "Søk etter personer eller tekst"
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr "Søk"
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr "OpenID"
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr ""
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr "Skriv inn brukernavnet ditt."
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr "Allerede innlogget."
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr ""
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "Opprett ny konto"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr "Opprett en ny bruker med dette kallenavnet."
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr "Nytt kallenavn"
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr "1-64 små bokstaver eller tall, ingen punktum eller mellomrom"
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Opprett"
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr ""
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "Passord"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Koble til"
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "Husk meg"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr ""
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "Fortsett"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "Avbryt"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr ""
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr ""
diff --git a/plugins/OpenID/locale/nl/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/nl/LC_MESSAGES/OpenID.po
index d2bf563cd..09940c2c3 100644
--- a/plugins/OpenID/locale/nl/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/nl/LC_MESSAGES/OpenID.po
@@ -10,16 +10,16 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:00+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:36+0000\n"
"Last-Translator: Siebrand Mazeland <s.mazeland@xs4all.nl>\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -500,41 +500,34 @@ msgstr "Registreren is niet mogelijk."
msgid "Not a valid invitation code."
msgstr "De uitnodigingscode is niet geldig."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"De gebruikersnaam mag alleen uit kleine letters en cijfers bestaan, en geen "
-"spaties bevatten."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Deze gebruikersnaam is niet toegestaan."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Deze gebruikersnaam wordt al gebruikt. Kies een andere."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "Het opgeslagen OpenID is niet aangetroffen."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr "Poging tot aanmaken van een OpenID-account dat al een gebruiker heeft."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Ongeldige gebruikersnaam of wachtwoord."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "Fout bij het koppelen met OpenID."
@@ -632,3 +625,8 @@ msgstr "Fout bij het verbinden met de gebruiker."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Fout bij het bijwerken van het profiel."
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "De gebruikersnaam mag alleen uit kleine letters en cijfers bestaan, en "
+#~ "geen spaties bevatten."
diff --git a/plugins/OpenID/locale/pt_BR/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/pt_BR/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..0c0f04f9e
--- /dev/null
+++ b/plugins/OpenID/locale/pt_BR/LC_MESSAGES/OpenID.po
@@ -0,0 +1,586 @@
+# Translation of StatusNet - OpenID to Brazilian Portuguese (Português do Brasil)
+# Expored from translatewiki.net
+#
+# Author: Luckas Blade
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:36+0000\n"
+"Language-Team: Brazilian Portuguese <http://translatewiki.net/wiki/Portal:pt-"
+"br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: pt-br\n"
+"X-Message-Group: #out-statusnet-plugin-openid\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr ""
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr ""
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr "Adicionar"
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr "Remover"
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr ""
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr ""
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr "OpenID"
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr ""
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr ""
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr "Opções"
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr "Não foi possível redirecionar para o servidor: %s"
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr "Erro ao salvar o perfil."
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr "Erro ao salvar o usuário."
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr "Entrar"
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr ""
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr "Ajuda"
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr ""
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr "Pesquisar"
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr "Adicionar ou remover OpenIDs"
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr ""
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr "Introduza seu nome de usuário."
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr "Você não pode se registrar se não aceitar a licença."
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr "Ocorreu um erro desconhecido."
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "Criar nova conta"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr "Novo nome"
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Criar"
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr ""
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr ""
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "Senha"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Conectar"
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr ""
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr "O código de convite é inválido."
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr "Nome não permitido."
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr "Este nome já está em uso. Tente outro."
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr "Nome de usuário e/ou senha inválido(s)."
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "Lembrar-me"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr "Entrar"
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr ""
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "Continuar"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "Cancelar"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr ""
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr ""
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr ""
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "O nome deve conter apenas letras minúsculas e números e não pode ter "
+#~ "espaços."
diff --git a/plugins/OpenID/locale/tl/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/tl/LC_MESSAGES/OpenID.po
index e820e9514..c3ee0e652 100644
--- a/plugins/OpenID/locale/tl/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/tl/LC_MESSAGES/OpenID.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:00+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:36+0000\n"
"Language-Team: Tagalog <http://translatewiki.net/wiki/Portal:tl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tl\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -511,42 +511,35 @@ msgstr "Hindi pinayagan ang pagpapatala."
msgid "Not a valid invitation code."
msgstr "Hindi isang tanggap na kodigo ng paanyaya."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Ang palayaw ay dapat lamang na may maliliit ng mga titik at mga bilang at "
-"walang mga patlang."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Hindi pinayagan ang palayaw."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Ginagamit na ang palayaw. Sumubok ng iba."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "Hindi natagpuan ang nakalagak na OpenID."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr ""
"Nililikha ang bagong akawnt para sa OpenID na mayroon nang isang tagagamit."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Hindi tanggap na pangalan ng tagagamit o hudyat."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "May kamalian sa pag-ugnay ng tagagamit sa OpenID."
@@ -644,3 +637,8 @@ msgstr "Kamalian sa pag-ugnay ng tagagamit."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Kamalian sa pagsasapanahon ng balangkas"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Ang palayaw ay dapat lamang na may maliliit ng mga titik at mga bilang at "
+#~ "walang mga patlang."
diff --git a/plugins/OpenID/locale/tr/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/tr/LC_MESSAGES/OpenID.po
new file mode 100644
index 000000000..90d8fbd57
--- /dev/null
+++ b/plugins/OpenID/locale/tr/LC_MESSAGES/OpenID.po
@@ -0,0 +1,594 @@
+# Translation of StatusNet - OpenID to Turkish (Türkçe)
+# Expored from translatewiki.net
+#
+# Author: Maidis
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenID\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:36+0000\n"
+"Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: tr\n"
+"X-Message-Group: #out-statusnet-plugin-openid\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: openidsettings.php:58 openidadminpanel.php:65
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:69
+#, php-format
+msgid ""
+"[OpenID](%%doc.openid%%) lets you log into many sites with the same user "
+"account. Manage your associated OpenIDs from here."
+msgstr ""
+
+#: openidsettings.php:100
+msgid "Add OpenID"
+msgstr ""
+
+#: openidsettings.php:103
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field label.
+#: openidsettings.php:108 OpenIDPlugin.php:681 openidlogin.php:161
+msgid "OpenID URL"
+msgstr ""
+
+#: openidsettings.php:118
+msgid "Add"
+msgstr ""
+
+#: openidsettings.php:130
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:135
+msgid ""
+"Removing your only OpenID would make it impossible to log in! If you need to "
+"remove it, add another OpenID first."
+msgstr ""
+
+#: openidsettings.php:150
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:173 openidsettings.php:214
+msgid "Remove"
+msgstr ""
+
+#: openidsettings.php:187
+msgid "OpenID Trusted Sites"
+msgstr ""
+
+#: openidsettings.php:190
+msgid ""
+"The following sites are allowed to access your identity and log you in. You "
+"can remove a site from this list to deny it access to your OpenID."
+msgstr ""
+
+#. TRANS: Message given when there is a problem with the user's session token.
+#: openidsettings.php:232 finishopenidlogin.php:42 openidlogin.php:51
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidsettings.php:239
+msgid "Can't add new providers."
+msgstr ""
+
+#: openidsettings.php:252
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:276
+msgid "No such OpenID trustroot."
+msgstr ""
+
+#: openidsettings.php:280
+msgid "Trustroots removed"
+msgstr ""
+
+#: openidsettings.php:303
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:308
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:312
+msgid "OpenID removed."
+msgstr ""
+
+#: openidadminpanel.php:54
+msgid "OpenID"
+msgstr ""
+
+#: openidadminpanel.php:147
+msgid "Invalid provider URL. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:153
+msgid "Invalid team name. Max length is 255 characters."
+msgstr ""
+
+#: openidadminpanel.php:210
+msgid "Trusted provider"
+msgstr ""
+
+#: openidadminpanel.php:212
+msgid ""
+"By default, users are allowed to authenticate with any OpenID provider. If "
+"you are using your own OpenID service for shared sign-in, you can restrict "
+"access to only your own users here."
+msgstr ""
+
+#: openidadminpanel.php:220
+msgid "Provider URL"
+msgstr ""
+
+#: openidadminpanel.php:221
+msgid ""
+"All OpenID logins will be sent to this URL; other providers may not be used."
+msgstr ""
+
+#: openidadminpanel.php:228
+msgid "Append a username to base URL"
+msgstr ""
+
+#: openidadminpanel.php:230
+msgid ""
+"Login form will show the base URL and prompt for a username to add at the "
+"end. Use when OpenID provider URL should be the profile page for individual "
+"users."
+msgstr ""
+
+#: openidadminpanel.php:238
+msgid "Required team"
+msgstr ""
+
+#: openidadminpanel.php:239
+msgid "Only allow logins from users in the given team (Launchpad extension)."
+msgstr ""
+
+#: openidadminpanel.php:251
+msgid "Options"
+msgstr ""
+
+#: openidadminpanel.php:258
+msgid "Enable OpenID-only mode"
+msgstr ""
+
+#: openidadminpanel.php:260
+msgid ""
+"Require all users to login via OpenID. Warning: disables password "
+"authentication for all users!"
+msgstr ""
+
+#: openidadminpanel.php:278
+msgid "Save OpenID settings"
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:138
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#. TRANS: OpenID plugin message. Given when an OpenID is not valid.
+#: openid.php:150
+msgid "Not a valid OpenID."
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request fails.
+#. TRANS: %s is the failure message.
+#: openid.php:155
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin server error. Given when the OpenID authentication request cannot be redirected.
+#. TRANS: %s is the failure message.
+#: openid.php:205
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#. TRANS: OpenID plugin user instructions.
+#: openid.php:244
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:280
+msgid "Error saving the profile."
+msgstr ""
+
+#. TRANS: OpenID plugin server error.
+#: openid.php:292
+msgid "Error saving the user."
+msgstr ""
+
+#. TRANS: OpenID plugin client exception (403).
+#: openid.php:322
+msgid "Unauthorized URL used for OpenID login."
+msgstr ""
+
+#. TRANS: Title
+#: openid.php:370
+msgid "OpenID Login Submission"
+msgstr ""
+
+#. TRANS: OpenID plugin message used while requesting authorization user's OpenID login provider.
+#: openid.php:381
+msgid "Requesting authorization from your login provider..."
+msgstr ""
+
+#. TRANS: OpenID plugin message. User instruction while requesting authorization user's OpenID login provider.
+#: openid.php:385
+msgid ""
+"If you are not redirected to your login provider in a few seconds, try "
+"pushing the button below."
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: OpenIDPlugin.php:218
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#. TRANS: Main menu option when not logged in to log in
+#: OpenIDPlugin.php:221
+msgctxt "MENU"
+msgid "Login"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Help"
+#: OpenIDPlugin.php:226
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr ""
+
+#. TRANS: Main menu option for help on the StatusNet site
+#: OpenIDPlugin.php:229
+msgctxt "MENU"
+msgid "Help"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Search"
+#: OpenIDPlugin.php:235
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr ""
+
+#. TRANS: Main menu option when logged in or when the StatusNet instance is not private
+#: OpenIDPlugin.php:238
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: OpenID plugin menu item on site logon page.
+#. TRANS: OpenID plugin menu item on user settings page.
+#. TRANS: OpenID configuration menu item.
+#: OpenIDPlugin.php:295 OpenIDPlugin.php:331 OpenIDPlugin.php:605
+msgctxt "MENU"
+msgid "OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for logon menu item.
+#: OpenIDPlugin.php:297
+msgid "Login or register with OpenID"
+msgstr ""
+
+#. TRANS: OpenID plugin tooltip for user settings menu item.
+#: OpenIDPlugin.php:333
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#. TRANS: Tooltip for OpenID configuration menu item.
+#: OpenIDPlugin.php:607
+msgid "OpenID configuration"
+msgstr ""
+
+#. TRANS: OpenID plugin description.
+#: OpenIDPlugin.php:631
+msgid "Use <a href=\"http://openid.net/\">OpenID</a> to login to the site."
+msgstr ""
+
+#. TRANS: button label for OAuth authorization page when needing OpenID authentication first.
+#: OpenIDPlugin.php:641
+msgctxt "BUTTON"
+msgid "Continue"
+msgstr ""
+
+#. TRANS: OpenID plugin logon form legend.
+#: OpenIDPlugin.php:658 openidlogin.php:140
+msgid "OpenID login"
+msgstr ""
+
+#. TRANS: Field label.
+#: OpenIDPlugin.php:666 openidlogin.php:148
+msgid "OpenID provider"
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:675 openidlogin.php:156
+msgid "Enter your username."
+msgstr ""
+
+#. TRANS: Form guide.
+#: OpenIDPlugin.php:677 openidlogin.php:157
+msgid "You will be sent to the provider's site for authentication."
+msgstr ""
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: OpenIDPlugin.php:684 openidlogin.php:164
+msgid "Your OpenID URL"
+msgstr ""
+
+#. TRANS: OpenID plugin client error given trying to add an unauthorised OpenID to a user (403).
+#: openidserver.php:116
+#, php-format
+msgid "You are not authorized to use the identity %s."
+msgstr ""
+
+#. TRANS: OpenID plugin client error given when not getting a response for a given OpenID provider (500).
+#: openidserver.php:137
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#. TRANS: Client error message trying to log on with OpenID while already logged on.
+#: finishopenidlogin.php:37 openidlogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#. TRANS: Message given if user does not agree with the site's license.
+#: finishopenidlogin.php:48
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#. TRANS: Messag given on an unknown error.
+#: finishopenidlogin.php:57
+msgid "An unknown error has occured."
+msgstr ""
+
+#. TRANS: Instructions given after a first successful logon using OpenID.
+#. TRANS: %s is the site name.
+#: finishopenidlogin.php:73
+#, 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 ""
+
+#. TRANS: Title
+#: finishopenidlogin.php:80
+msgid "OpenID Account Setup"
+msgstr "OpenID Hesap Kurulumu"
+
+#: finishopenidlogin.php:110
+msgid "Create new account"
+msgstr "Yeni hesap oluştur"
+
+#: finishopenidlogin.php:112
+msgid "Create a new user with this nickname."
+msgstr "Bu kullanıcı adıyla yeni bir kullanıcı oluştur."
+
+#: finishopenidlogin.php:115
+msgid "New nickname"
+msgstr "Yeni kullanıcı adı"
+
+#: finishopenidlogin.php:117
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+"1-64 küçük harf veya rakam, noktalama işaretlerine ve boşluklara izin "
+"verilmez"
+
+#. TRANS: Button label in form in which to create a new user on the site for an OpenID.
+#: finishopenidlogin.php:142
+msgctxt "BUTTON"
+msgid "Create"
+msgstr "Oluştur"
+
+#. TRANS: Used as form legend for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:148
+msgid "Connect existing account"
+msgstr "Varolan hesaba bağlan"
+
+#. TRANS: User instructions for form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:151
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+"Halihazırda bir hesabınız varsa, OpenID'nizle bağlantı kurmak için kullanıcı "
+"adı ve parolanızla giriş yapın."
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:155
+msgid "Existing nickname"
+msgstr "Varolan kullanıcı adı"
+
+#. TRANS: Field label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:159
+msgid "Password"
+msgstr "Parola"
+
+#. TRANS: Button label in form in which to connect an OpenID to an existing user on the site.
+#: finishopenidlogin.php:163
+msgctxt "BUTTON"
+msgid "Connect"
+msgstr "Bağlan"
+
+#. TRANS: Status message in case the response from the OpenID provider is that the logon attempt was cancelled.
+#: finishopenidlogin.php:176 finishaddopenid.php:90
+msgid "OpenID authentication cancelled."
+msgstr "OpenID kimlik doğrulaması iptal edildi."
+
+#. TRANS: OpenID authentication failed; display the error message. %s is the error message.
+#. TRANS: OpenID authentication failed; display the error message.
+#. TRANS: %s is the error message.
+#: finishopenidlogin.php:180 finishaddopenid.php:95
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr "OpenID kimlik doğrulaması başarısız oldu: %s"
+
+#: finishopenidlogin.php:200 finishaddopenid.php:111
+msgid ""
+"OpenID authentication aborted: you are not allowed to login to this site."
+msgstr ""
+"OpenID kimlik doğrulaması durduruldu: bu siteye giriş yapmaya izinli "
+"değilsiniz."
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site.
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and none was provided.
+#: finishopenidlogin.php:252 finishopenidlogin.php:262
+msgid "Registration not allowed."
+msgstr "Kayıt yapılmasına izin verilmiyor."
+
+#. TRANS: OpenID plugin message. No new user registration is allowed on the site without an invitation code, and the one provided was not valid.
+#: finishopenidlogin.php:270
+msgid "Not a valid invitation code."
+msgstr "Geçerli bir davet kodu değil."
+
+#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
+#: finishopenidlogin.php:284
+msgid "Nickname not allowed."
+msgstr "Bu kullanıcı adına izin verilmiyor."
+
+#. TRANS: OpenID plugin message. The entered new user name is already used.
+#: finishopenidlogin.php:290
+msgid "Nickname already in use. Try another one."
+msgstr "Kullanıcı adı halihazırda kullanılıyor. Başka bir tane deneyin."
+
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
+#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
+msgid "Stored OpenID not found."
+msgstr "Kayıtlı OpenID bulunamadı."
+
+#. TRANS: OpenID plugin server error.
+#: finishopenidlogin.php:308
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#. TRANS: OpenID plugin message.
+#: finishopenidlogin.php:373
+msgid "Invalid username or password."
+msgstr "Geçersiz kullanıcı adı veya parola."
+
+#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
+#: finishopenidlogin.php:393
+msgid "Error connecting user to OpenID."
+msgstr "OpenID ile kullanıcı bağlanırken hata oluştu."
+
+#. TRANS: OpenID plugin message. Rememberme logins have to reauthenticate before changing any profile settings.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:82
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+"Güvenlik nedeniyle, lütfen ayarlarınızı değiştirmeden önce [OpenID](%%doc."
+"openid%%) ile yeniden giriş yapınız."
+
+#. TRANS: OpenID plugin message.
+#. TRANS: "OpenID" is the display text for a link with URL "(%%doc.openid%%)".
+#: openidlogin.php:88
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr "Bir [OpenID](%%doc.openid%%) hesabı ile giriş yapın."
+
+#. TRANS: OpenID plugin message. Title.
+#. TRANS: Title after getting the status of the OpenID authorisation request.
+#: openidlogin.php:122 finishaddopenid.php:187
+msgid "OpenID Login"
+msgstr "OpenID Giriş"
+
+#. TRANS: OpenID plugin logon form checkbox label for setting to put the OpenID information in a cookie.
+#: openidlogin.php:169
+msgid "Remember me"
+msgstr "Beni hatırla"
+
+#. TRANS: OpenID plugin logon form field instructions.
+#: openidlogin.php:171
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+"Gelecekte otomatik olarak giriş yap; paylaşılan bilgisayarlar için değildir!"
+
+#. TRANS: OpenID plugin logon form button label to start logon with the data provided in the logon form.
+#: openidlogin.php:176
+msgctxt "BUTTON"
+msgid "Login"
+msgstr "Giriş"
+
+#: openidtrust.php:52
+msgid "OpenID Identity Verification"
+msgstr "OpenID Kimlik Doğrulama"
+
+#: openidtrust.php:70
+msgid ""
+"This page should only be reached during OpenID processing, not directly."
+msgstr "Bu sayfa sadece OpenID işleme sırasında ulaşılmalıdır, doğrudan değil."
+
+#: openidtrust.php:118
+#, php-format
+msgid ""
+"%s has asked to verify your identity. Click Continue to verify your "
+"identity and login without creating a new password."
+msgstr ""
+
+#: openidtrust.php:136
+msgid "Continue"
+msgstr "Devam"
+
+#: openidtrust.php:137
+msgid "Cancel"
+msgstr "İptal"
+
+#. TRANS: Client error message
+#: finishaddopenid.php:68
+msgid "Not logged in."
+msgstr "Giriş yapılmadı."
+
+#. TRANS: message in case a user tries to add an OpenID that is already connected to them.
+#: finishaddopenid.php:122
+msgid "You already have this OpenID!"
+msgstr "Zaten bu OpenID'ye sahipsiniz!"
+
+#. TRANS: message in case a user tries to add an OpenID that is already used by another user.
+#: finishaddopenid.php:125
+msgid "Someone else already has this OpenID."
+msgstr "Başka biri bu OpenID'ye sahip."
+
+#. TRANS: message in case the OpenID object cannot be connected to the user.
+#: finishaddopenid.php:138
+msgid "Error connecting user."
+msgstr "Kullanıcı bağlama hatası."
+
+#. TRANS: message in case the user or the user profile cannot be saved in StatusNet.
+#: finishaddopenid.php:145
+msgid "Error updating profile"
+msgstr "Profil güncelleme hatası"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Kullanıcı adı sadece küçük harfler ve rakamlardan oluşabilir, boşluk "
+#~ "kullanılamaz."
diff --git a/plugins/OpenID/locale/uk/LC_MESSAGES/OpenID.po b/plugins/OpenID/locale/uk/LC_MESSAGES/OpenID.po
index 2f13743a3..755d59705 100644
--- a/plugins/OpenID/locale/uk/LC_MESSAGES/OpenID.po
+++ b/plugins/OpenID/locale/uk/LC_MESSAGES/OpenID.po
@@ -10,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - OpenID\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:00+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:19:37+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 18:59:08+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75590); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-29 19:44:23+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-openid\n"
@@ -501,41 +501,34 @@ msgstr "Реєстрацію не дозволено."
msgid "Not a valid invitation code."
msgstr "Це не дійсний код запрошення."
-#. TRANS: OpenID plugin message. The entered new user name did not conform to the requirements.
-#: finishopenidlogin.php:281
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Ім’я користувача повинно складатись з літер нижнього регістру і цифр, ніяких "
-"інтервалів."
-
#. TRANS: OpenID plugin message. The entered new user name is blacklisted.
-#: finishopenidlogin.php:287
+#: finishopenidlogin.php:284
msgid "Nickname not allowed."
msgstr "Нікнейм не допускається."
#. TRANS: OpenID plugin message. The entered new user name is already used.
-#: finishopenidlogin.php:293
+#: finishopenidlogin.php:290
msgid "Nickname already in use. Try another one."
msgstr "Цей нікнейм вже використовується. Спробуйте інший."
#. TRANS: OpenID plugin server error. A stored OpenID cannot be retrieved.
#. TRANS: OpenID plugin server error. A stored OpenID cannot be found.
-#: finishopenidlogin.php:301 finishopenidlogin.php:388
+#: finishopenidlogin.php:298 finishopenidlogin.php:385
msgid "Stored OpenID not found."
msgstr "Збережений OpenID не знайдено."
#. TRANS: OpenID plugin server error.
-#: finishopenidlogin.php:311
+#: finishopenidlogin.php:308
msgid "Creating new account for OpenID that already has a user."
msgstr "Створення нового акаунту для OpenID користувачем, який вже існує."
#. TRANS: OpenID plugin message.
-#: finishopenidlogin.php:376
+#: finishopenidlogin.php:373
msgid "Invalid username or password."
msgstr "Невірне ім’я або пароль."
#. TRANS: OpenID plugin server error. The user or user profile could not be saved.
-#: finishopenidlogin.php:396
+#: finishopenidlogin.php:393
msgid "Error connecting user to OpenID."
msgstr "Помилка при підключенні користувача до OpenID."
@@ -632,3 +625,8 @@ msgstr "Помилка при підключенні користувача."
#: finishaddopenid.php:145
msgid "Error updating profile"
msgstr "Помилка при оновленні профілю"
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Ім’я користувача повинно складатись з літер нижнього регістру і цифр, "
+#~ "ніяких інтервалів."
diff --git a/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po b/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po
new file mode 100644
index 000000000..c0f138fa0
--- /dev/null
+++ b/plugins/OpenX/locale/br/LC_MESSAGES/OpenX.po
@@ -0,0 +1,109 @@
+# Translation of StatusNet - OpenX to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenX\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:45+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:54+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-openx\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Menu item title/tooltip
+#: OpenXPlugin.php:201
+msgid "OpenX configuration"
+msgstr "Kefluniadur OpenX"
+
+#. TRANS: Menu item for site administration
+#: OpenXPlugin.php:203
+msgid "OpenX"
+msgstr "OpenX"
+
+#. TRANS: Plugin description.
+#: OpenXPlugin.php:224
+msgid "Plugin for <a href=\"http://www.openx.org/\">OpenX Ad Server</a>."
+msgstr ""
+
+#. TRANS: Page title for OpenX admin panel.
+#: openxadminpanel.php:53
+msgctxt "TITLE"
+msgid "OpenX"
+msgstr "OpenX"
+
+#. TRANS: Instructions for OpenX admin panel.
+#: openxadminpanel.php:64
+msgid "OpenX settings for this StatusNet site"
+msgstr "Arventennoù OpenX evit al lec'hienn StatusNet-mañ."
+
+#. TRANS: Form label in OpenX admin panel.
+#: openxadminpanel.php:167
+msgid "Ad script URL"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel.
+#: openxadminpanel.php:169
+msgid "Script URL"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:175
+msgid "Medium rectangle"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:177
+msgid "Medium rectangle zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:183
+msgid "Rectangle"
+msgstr "Skouergornek"
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:185
+msgid "Rectangle zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:191
+msgid "Leaderboard"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:193
+msgid "Leaderboard zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:199
+msgid "Skyscraper"
+msgstr "Giton a-serzh"
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:201
+msgid "Wide skyscraper zone"
+msgstr ""
+
+#. TRANS: Submit button text in OpenX admin panel.
+#: openxadminpanel.php:216
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Enrollañ"
+
+#. TRANS: Submit button title in OpenX admin panel.
+#: openxadminpanel.php:220
+msgid "Save OpenX settings"
+msgstr ""
diff --git a/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po b/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po
new file mode 100644
index 000000000..72933073d
--- /dev/null
+++ b/plugins/OpenX/locale/de/LC_MESSAGES/OpenX.po
@@ -0,0 +1,109 @@
+# Translation of StatusNet - OpenX to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - OpenX\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:41:50+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:35:21+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-openx\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Menu item title/tooltip
+#: OpenXPlugin.php:201
+msgid "OpenX configuration"
+msgstr "OpenX-Konfiguration"
+
+#. TRANS: Menu item for site administration
+#: OpenXPlugin.php:203
+msgid "OpenX"
+msgstr "OpenX"
+
+#. TRANS: Plugin description.
+#: OpenXPlugin.php:224
+msgid "Plugin for <a href=\"http://www.openx.org/\">OpenX Ad Server</a>."
+msgstr "Plugin für <a href=\"http://www.openx.org/\">OpenX Ad Server</a>."
+
+#. TRANS: Page title for OpenX admin panel.
+#: openxadminpanel.php:53
+msgctxt "TITLE"
+msgid "OpenX"
+msgstr "OpenX"
+
+#. TRANS: Instructions for OpenX admin panel.
+#: openxadminpanel.php:64
+msgid "OpenX settings for this StatusNet site"
+msgstr "Openx-Einstellungen dieser StatusNet-Website"
+
+#. TRANS: Form label in OpenX admin panel.
+#: openxadminpanel.php:167
+msgid "Ad script URL"
+msgstr "Skript-URL"
+
+#. TRANS: Tooltip for form label in OpenX admin panel.
+#: openxadminpanel.php:169
+msgid "Script URL"
+msgstr "Skript-URL"
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:175
+msgid "Medium rectangle"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:177
+msgid "Medium rectangle zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:183
+msgid "Rectangle"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:185
+msgid "Rectangle zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:191
+msgid "Leaderboard"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:193
+msgid "Leaderboard zone"
+msgstr ""
+
+#. TRANS: Form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:199
+msgid "Skyscraper"
+msgstr ""
+
+#. TRANS: Tooltip for form label in OpenX admin panel. Refers to advertisement format.
+#: openxadminpanel.php:201
+msgid "Wide skyscraper zone"
+msgstr ""
+
+#. TRANS: Submit button text in OpenX admin panel.
+#: openxadminpanel.php:216
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Speichern"
+
+#. TRANS: Submit button title in OpenX admin panel.
+#: openxadminpanel.php:220
+msgid "Save OpenX settings"
+msgstr "OpenX-Einstellungen speichern"
diff --git a/plugins/PiwikAnalytics/locale/de/LC_MESSAGES/PiwikAnalytics.po b/plugins/PiwikAnalytics/locale/de/LC_MESSAGES/PiwikAnalytics.po
new file mode 100644
index 000000000..a82e33656
--- /dev/null
+++ b/plugins/PiwikAnalytics/locale/de/LC_MESSAGES/PiwikAnalytics.po
@@ -0,0 +1,30 @@
+# Translation of StatusNet - PiwikAnalytics to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PiwikAnalytics\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:00+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:55+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-piwikanalytics\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: PiwikAnalyticsPlugin.php:105
+msgid ""
+"Use <a href=\"http://piwik.org/\">Piwik</a> Open Source web analytics "
+"software."
+msgstr ""
+"Benutzung der <a href=\"http://piwik.org/\">Piwik</a>-Open-Source-Web-"
+"Analyse-Software."
diff --git a/plugins/PostDebug/locale/de/LC_MESSAGES/PostDebug.po b/plugins/PostDebug/locale/de/LC_MESSAGES/PostDebug.po
new file mode 100644
index 000000000..c9074bd3a
--- /dev/null
+++ b/plugins/PostDebug/locale/de/LC_MESSAGES/PostDebug.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - PostDebug to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PostDebug\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:01+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-postdebug\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: PostDebugPlugin.php:58
+msgid "Debugging tool to record request details on POST."
+msgstr "Debugging-Werkzeug zur Aufnahme von POST-Anfragedetails."
diff --git a/plugins/PoweredByStatusNet/locale/es/LC_MESSAGES/PoweredByStatusNet.po b/plugins/PoweredByStatusNet/locale/es/LC_MESSAGES/PoweredByStatusNet.po
new file mode 100644
index 000000000..a4737fd00
--- /dev/null
+++ b/plugins/PoweredByStatusNet/locale/es/LC_MESSAGES/PoweredByStatusNet.po
@@ -0,0 +1,38 @@
+# Translation of StatusNet - PoweredByStatusNet to Spanish (Español)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PoweredByStatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:07+0000\n"
+"Language-Team: Spanish <http://translatewiki.net/wiki/Portal:es>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: es\n"
+"X-Message-Group: #out-statusnet-plugin-poweredbystatusnet\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: %s is a URL to status.net with "StatusNet" (localised) as link text.
+#: PoweredByStatusNetPlugin.php:51
+#, php-format
+msgid "powered by %s"
+msgstr ""
+
+#: PoweredByStatusNetPlugin.php:53
+msgid "StatusNet"
+msgstr "StatusNet"
+
+#: PoweredByStatusNetPlugin.php:66
+msgid ""
+"Outputs \"powered by <a href=\"http://status.net/\">StatusNet</a>\" after "
+"site name."
+msgstr ""
diff --git a/plugins/PoweredByStatusNet/locale/pl/LC_MESSAGES/PoweredByStatusNet.po b/plugins/PoweredByStatusNet/locale/pl/LC_MESSAGES/PoweredByStatusNet.po
new file mode 100644
index 000000000..24c329b8d
--- /dev/null
+++ b/plugins/PoweredByStatusNet/locale/pl/LC_MESSAGES/PoweredByStatusNet.po
@@ -0,0 +1,39 @@
+# Translation of StatusNet - PoweredByStatusNet to Polish (Polski)
+# Expored from translatewiki.net
+#
+# Author: Raven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PoweredByStatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:07+0000\n"
+"Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: pl\n"
+"X-Message-Group: #out-statusnet-plugin-poweredbystatusnet\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
+"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
+
+#. TRANS: %s is a URL to status.net with "StatusNet" (localised) as link text.
+#: PoweredByStatusNetPlugin.php:51
+#, php-format
+msgid "powered by %s"
+msgstr ""
+
+#: PoweredByStatusNetPlugin.php:53
+msgid "StatusNet"
+msgstr "StatusNet"
+
+#: PoweredByStatusNetPlugin.php:66
+msgid ""
+"Outputs \"powered by <a href=\"http://status.net/\">StatusNet</a>\" after "
+"site name."
+msgstr ""
diff --git a/plugins/PoweredByStatusNet/locale/ru/LC_MESSAGES/PoweredByStatusNet.po b/plugins/PoweredByStatusNet/locale/ru/LC_MESSAGES/PoweredByStatusNet.po
new file mode 100644
index 000000000..2414b39cb
--- /dev/null
+++ b/plugins/PoweredByStatusNet/locale/ru/LC_MESSAGES/PoweredByStatusNet.po
@@ -0,0 +1,39 @@
+# Translation of StatusNet - PoweredByStatusNet to Russian (Русский)
+# Expored from translatewiki.net
+#
+# Author: MaxSem
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PoweredByStatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:07+0000\n"
+"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:56+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ru\n"
+"X-Message-Group: #out-statusnet-plugin-poweredbystatusnet\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"
+
+#. TRANS: %s is a URL to status.net with "StatusNet" (localised) as link text.
+#: PoweredByStatusNetPlugin.php:51
+#, php-format
+msgid "powered by %s"
+msgstr ""
+
+#: PoweredByStatusNetPlugin.php:53
+msgid "StatusNet"
+msgstr "StatusNet"
+
+#: PoweredByStatusNetPlugin.php:66
+msgid ""
+"Outputs \"powered by <a href=\"http://status.net/\">StatusNet</a>\" after "
+"site name."
+msgstr ""
diff --git a/plugins/PtitUrl/locale/de/LC_MESSAGES/PtitUrl.po b/plugins/PtitUrl/locale/de/LC_MESSAGES/PtitUrl.po
new file mode 100644
index 000000000..05e919cc8
--- /dev/null
+++ b/plugins/PtitUrl/locale/de/LC_MESSAGES/PtitUrl.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - PtitUrl to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - PtitUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:04+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:57+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-ptiturl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: PtitUrlPlugin.php:67
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr "Benutzung des <a href=\"http://%1$s/\">%1$s</a>-URL-Kürzungsdienstes."
diff --git a/plugins/RSSCloud/locale/nb/LC_MESSAGES/RSSCloud.po b/plugins/RSSCloud/locale/nb/LC_MESSAGES/RSSCloud.po
new file mode 100644
index 000000000..da4118eda
--- /dev/null
+++ b/plugins/RSSCloud/locale/nb/LC_MESSAGES/RSSCloud.po
@@ -0,0 +1,72 @@
+# Translation of StatusNet - RSSCloud to Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
+# Expored from translatewiki.net
+#
+# Author: Nghtwlkr
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - RSSCloud\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:14+0000\n"
+"Language-Team: Norwegian (bokmål)‬ <http://translatewiki.net/wiki/Portal:no>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:00+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: no\n"
+"X-Message-Group: #out-statusnet-plugin-rsscloud\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: RSSCloudRequestNotify.php:90
+msgid "Request must be POST."
+msgstr "Forespørsel må være POST."
+
+#: RSSCloudRequestNotify.php:107
+msgid "Only http-post notifications are supported at this time."
+msgstr ""
+
+#. TRANS: %s is a comma separated list of parameters.
+#: RSSCloudRequestNotify.php:118
+#, php-format
+msgid "The following parameters were missing from the request body: %s."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:124
+msgid ""
+"You must provide at least one valid profile feed url (url1, url2, url3 ... "
+"urlN)."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:141
+msgid "Feed subscription failed: Not a valid feed."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:147
+msgid ""
+"Feed subscription failed - notification handler doesn't respond correctly."
+msgstr ""
+
+#: RSSCloudRequestNotify.php:161
+msgid ""
+"Thanks for the subscription. When the feed(s) update(s), you will be "
+"notified."
+msgstr ""
+
+#: LoggingAggregator.php:93
+msgid "This resource requires an HTTP GET."
+msgstr "Denne ressursen krever en HTTP GET."
+
+#: LoggingAggregator.php:104
+msgid "This resource requires an HTTP POST."
+msgstr "Denne ressursen krever en HTTP POST."
+
+#: RSSCloudPlugin.php:248
+msgid ""
+"The RSSCloud plugin enables your StatusNet instance to publish real-time "
+"updates for profile RSS feeds using the <a href=\"http://rsscloud.org/"
+"\">RSSCloud protocol</a>."
+msgstr ""
diff --git a/plugins/Realtime/README b/plugins/Realtime/README
index 99c79cfab..9b36d87f3 100644
--- a/plugins/Realtime/README
+++ b/plugins/Realtime/README
@@ -5,6 +5,6 @@
* Pause ~ retain up to 50-100 most recent notices
* Add geo data
* Make it work for Conversation page (perhaps a little tricky)
-* IE is updating the counter in document title all the time (Not sure if this is still an issue)
+* IE is updating the counter in document title all the time (Not sure if this
+ is still an issue)
* Reconsider the timestamp approach
-
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index 352afcf78..113187e1e 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -43,7 +43,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-
class RealtimePlugin extends Plugin
{
protected $replyurl = null;
@@ -323,7 +322,33 @@ class RealtimePlugin extends Plugin
function _getScripts()
{
- return array('plugins/Realtime/realtimeupdate.js');
+ return array('plugins/Realtime/realtimeupdate.min.js');
+ }
+
+ /**
+ * Export any i18n messages that need to be loaded at runtime...
+ *
+ * @param Action $action
+ * @param array $messages
+ *
+ * @return boolean hook return value
+ */
+ function onEndScriptMessages($action, &$messages)
+ {
+ // TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+ $messages['realtime_play'] = _m('BUTTON', 'Play');
+ // TRANS: Tooltip for realtime view "play" button.
+ $messages['realtime_play_tooltip'] = _m('TOOLTIP', 'Play');
+ // TRANS: Text label for realtime view "pause" button
+ $messages['realtime_pause'] = _m('BUTTON', 'Pause');
+ // TRANS: Tooltip for realtime view "pause" button
+ $messages['realtime_pause_tooltip'] = _m('TOOLTIP', 'Pause');
+ // TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+ $messages['realtime_popup'] = _m('BUTTON', 'Pop up');
+ // TRANS: Tooltip for realtime view "popup" button.
+ $messages['realtime_popup_tooltip'] = _m('TOOLTIP', 'Pop up in a window');
+
+ return true;
}
function _updateInitialize($timeline, $user_id)
diff --git a/plugins/Realtime/locale/Realtime.pot b/plugins/Realtime/locale/Realtime.pot
new file mode 100644
index 000000000..e491ce0c7
--- /dev/null
+++ b/plugins/Realtime/locale/Realtime.pot
@@ -0,0 +1,53 @@
+# 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-11-02 19:46+0000\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr ""
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr ""
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr ""
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr ""
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr ""
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr ""
diff --git a/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..81614a28e
--- /dev/null
+++ b/plugins/Realtime/locale/af/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Afrikaans (Afrikaans)
+# Expored from translatewiki.net
+#
+# Author: Naudefj
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:59+0000\n"
+"Language-Team: Afrikaans <http://translatewiki.net/wiki/Portal:af>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: af\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Speel"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Speel"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Wag"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Wag"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Pop-up"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "Wys in 'n venstertjie"
diff --git a/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..d30b98ec5
--- /dev/null
+++ b/plugins/Realtime/locale/br/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:59+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Lenn"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Lenn"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Ehan"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Ehan"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr ""
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr ""
diff --git a/plugins/Realtime/locale/fr/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/fr/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..6d5253fe1
--- /dev/null
+++ b/plugins/Realtime/locale/fr/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to French (Français)
+# Expored from translatewiki.net
+#
+# Author: Peter17
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:05+0000\n"
+"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:35:22+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fr\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Jouer"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Jouer"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Pause"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Pause"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Nouvelle fenêtre"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "Afficher dans une nouvelle fenêtre"
diff --git a/plugins/Realtime/locale/ia/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/ia/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..94fdb4dcc
--- /dev/null
+++ b/plugins/Realtime/locale/ia/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Interlingua (Interlingua)
+# Expored from translatewiki.net
+#
+# Author: McDutchie
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-02 22:51+0000\n"
+"PO-Revision-Date: 2010-11-02 22:54:57+0000\n"
+"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-02 19:54:39+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ia\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Reproducer"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Reproducer"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Pausar"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Pausar"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Fenestra"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "Aperir le reproductor in un nove fenestra"
diff --git a/plugins/Realtime/locale/mk/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/mk/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..0b4024a76
--- /dev/null
+++ b/plugins/Realtime/locale/mk/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Macedonian (Македонски)
+# Expored from translatewiki.net
+#
+# Author: Bjankuloski06
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-02 22:51+0000\n"
+"PO-Revision-Date: 2010-11-02 22:54:57+0000\n"
+"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-02 19:54:39+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: mk\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Пушти"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Пушти"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Паузирај"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Паузирај"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Прозорче"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "Прикажи во прозорче"
diff --git a/plugins/Realtime/locale/ne/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/ne/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..b50563898
--- /dev/null
+++ b/plugins/Realtime/locale/ne/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Nepali (नेपाली)
+# Expored from translatewiki.net
+#
+# Author: Bhawani Gautam Rhk
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:05+0000\n"
+"Language-Team: Nepali <http://translatewiki.net/wiki/Portal:ne>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:35:22+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ne\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "बजाउ"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "बजाउ"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "बिसाउ"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "बिसाउ"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "चम्काउ"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "चम्क विन्डोमा"
diff --git a/plugins/Realtime/locale/nl/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/nl/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..ac5b2f45c
--- /dev/null
+++ b/plugins/Realtime/locale/nl/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Dutch (Nederlands)
+# Expored from translatewiki.net
+#
+# Author: Siebrand
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-02 22:51+0000\n"
+"PO-Revision-Date: 2010-11-02 22:54:57+0000\n"
+"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-02 19:54:39+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: nl\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Afspelen"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Afspelen"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Pauzeren"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Pauzeren"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Pop-up"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "In nieuw venstertje weergeven"
diff --git a/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..fb235468a
--- /dev/null
+++ b/plugins/Realtime/locale/tr/LC_MESSAGES/Realtime.po
@@ -0,0 +1,58 @@
+# Translation of StatusNet - Realtime to Turkish (Türkçe)
+# Expored from translatewiki.net
+#
+# Author: Maidis
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:28:59+0000\n"
+"Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-05 00:29:27+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: tr\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Oynat"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Oynat"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Duraklat"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Duraklat"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr ""
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr ""
diff --git a/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po b/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po
new file mode 100644
index 000000000..f15b29127
--- /dev/null
+++ b/plugins/Realtime/locale/uk/LC_MESSAGES/Realtime.po
@@ -0,0 +1,59 @@
+# Translation of StatusNet - Realtime to Ukrainian (Українська)
+# Expored from translatewiki.net
+#
+# Author: Boogie
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Realtime\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-04 18:25+0000\n"
+"PO-Revision-Date: 2010-11-04 18:29:00+0000\n"
+"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-02 23:07:29+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76004); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: uk\n"
+"X-Message-Group: #out-statusnet-plugin-realtime\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"
+
+#. TRANS: Text label for realtime view "play" button, usually replaced by an icon.
+#: RealtimePlugin.php:339
+msgctxt "BUTTON"
+msgid "Play"
+msgstr "Оновлювати"
+
+#. TRANS: Tooltip for realtime view "play" button.
+#: RealtimePlugin.php:341
+msgctxt "TOOLTIP"
+msgid "Play"
+msgstr "Оновлювати"
+
+#. TRANS: Text label for realtime view "pause" button
+#: RealtimePlugin.php:343
+msgctxt "BUTTON"
+msgid "Pause"
+msgstr "Пауза"
+
+#. TRANS: Tooltip for realtime view "pause" button
+#: RealtimePlugin.php:345
+msgctxt "TOOLTIP"
+msgid "Pause"
+msgstr "Пауза"
+
+#. TRANS: Text label for realtime view "popup" button, usually replaced by an icon.
+#: RealtimePlugin.php:347
+msgctxt "BUTTON"
+msgid "Pop up"
+msgstr "Окреме вікно"
+
+#. TRANS: Tooltip for realtime view "popup" button.
+#: RealtimePlugin.php:349
+msgctxt "TOOLTIP"
+msgid "Pop up in a window"
+msgstr "Стрічка окремим вікном"
diff --git a/plugins/Realtime/realtimeupdate.css b/plugins/Realtime/realtimeupdate.css
index f43c97de5..b277b30a1 100644
--- a/plugins/Realtime/realtimeupdate.css
+++ b/plugins/Realtime/realtimeupdate.css
@@ -35,7 +35,6 @@ width:70%;
margin-left:1%;
}
-
#notices_primary {
position:relative;
}
@@ -75,4 +74,3 @@ line-height:1.2;
#showstream #notices_primary {
margin-top: 18px;
}
-
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index 25dc12d58..21938ee1d 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -26,8 +26,22 @@
* @link http://status.net/
*/
-// TODO: i18n
-
+/**
+ * This is the UI portion of the Realtime plugin base class, handling
+ * queueing up and displaying of notices that have been received through
+ * other code in one of the subclassed plugin implementations such as
+ * Meteor or Orbited.
+ *
+ * Notices are passed in as JSON objects formatted per the Twitter-compatible
+ * API.
+ *
+ * @todo Currently we duplicate a lot of formatting and layout code from
+ * the PHP side of StatusNet, which makes it very difficult to maintain
+ * this package. Internationalization as well as newer features such
+ * as location data, customized source links for OStatus profiles,
+ * and image thumbnails are not yet supported in Realtime yet because
+ * they have not been implemented here.
+ */
RealtimeUpdate = {
_userid: 0,
_replyurl: '',
@@ -41,6 +55,25 @@ RealtimeUpdate = {
_paused:false,
_queuedNotices:[],
+ /**
+ * Initialize the Realtime plugin UI on a page with a timeline view.
+ *
+ * This function is called from a JS fragment inserted by the PHP side
+ * of the Realtime plugin, and provides us with base information
+ * needed to build a near-replica of StatusNet's NoticeListItem output.
+ *
+ * Once the UI is initialized, a plugin subclass will need to actually
+ * feed data into the RealtimeUpdate object!
+ *
+ * @param {int} userid: local profile ID of the currently logged-in user
+ * @param {String} replyurl: URL for newnotice action, used when generating reply buttons
+ * @param {String} favorurl: URL for favor action, used when generating fave buttons
+ * @param {String} repeaturl: URL for repeat action, used when generating repeat buttons
+ * @param {String} deleteurl: URL template for deletenotice action, used when generating delete buttons.
+ * This URL contains a stub value of 0000000000 which will be replaced with the notice ID.
+ *
+ * @access public
+ */
init: function(userid, replyurl, favorurl, repeaturl, deleteurl)
{
RealtimeUpdate._userid = userid;
@@ -51,23 +84,51 @@ RealtimeUpdate = {
RealtimeUpdate._documenttitle = document.title;
- $(window).bind('focus', function(){ RealtimeUpdate._windowhasfocus = true; });
+ $(window).bind('focus', function() {
+ RealtimeUpdate._windowhasfocus = true;
+
+ // Clear the counter on the window title when we focus in.
+ RealtimeUpdate._updatecounter = 0;
+ RealtimeUpdate.removeWindowCounter();
+ });
$(window).bind('blur', function() {
$('#notices_primary .notice').removeClass('mark-top');
$('#notices_primary .notice:first').addClass('mark-top');
- RealtimeUpdate._updatecounter = 0;
- document.title = RealtimeUpdate._documenttitle;
+ // While we're in the background, received messages will increment
+ // a counter that we put on the window title. This will cause some
+ // browsers to also flash or mark the tab or window title bar until
+ // you seek attention (eg Firefox 4 pinned app tabs).
RealtimeUpdate._windowhasfocus = false;
return false;
});
},
+ /**
+ * Accept a notice in a Twitter-API JSON style and either show it
+ * or queue it up, depending on whether the realtime display is
+ * active.
+ *
+ * The meat of a Realtime plugin subclass is to provide a substrate
+ * transport to receive data and shove it into this function. :)
+ *
+ * Note that the JSON data is extended from the standard API return
+ * with additional fields added by RealtimePlugin's PHP code.
+ *
+ * @param {Object} data: extended JSON API-formatted notice
+ *
+ * @access public
+ */
receive: function(data)
{
+ if (RealtimeUpdate.isNoticeVisible(data.id)) {
+ // Probably posted by the user in this window, and so already
+ // shown by the AJAX form handler. Ignore it.
+ return;
+ }
if (RealtimeUpdate._paused === false) {
RealtimeUpdate.purgeLastNoticeItem();
@@ -82,9 +143,23 @@ RealtimeUpdate = {
RealtimeUpdate.updateWindowCounter();
},
+ /**
+ * Add a visible representation of the given notice at the top of
+ * the current timeline.
+ *
+ * If the notice is already in the timeline, nothing will be added.
+ *
+ * @param {Object} data: extended JSON API-formatted notice
+ *
+ * @fixme while core UI JS code is used to activate the AJAX UI controls,
+ * the actual production of HTML (in makeNoticeItem and its subs)
+ * duplicates core code without plugin hook points or i18n support.
+ *
+ * @access private
+ */
insertNoticeItem: function(data) {
// Don't add it if it already exists
- if ($("#notice-"+data.id).length > 0) {
+ if (RealtimeUpdate.isNoticeVisible(data.id)) {
return;
}
@@ -99,12 +174,41 @@ RealtimeUpdate = {
SN.U.NoticeWithAttachment($('#'+noticeItemID));
},
+ /**
+ * Check if the given notice is visible in the timeline currently.
+ * Used to avoid duplicate processing of notices that have been
+ * displayed by other means.
+ *
+ * @param {number} id: notice ID to check
+ *
+ * @return boolean
+ *
+ * @access private
+ */
+ isNoticeVisible: function(id) {
+ return ($("#notice-"+id).length > 0);
+ },
+
+ /**
+ * Trims a notice off the end of the timeline if we have more than the
+ * maximum number of notices visible.
+ *
+ * @access private
+ */
purgeLastNoticeItem: function() {
if ($('#notices_primary .notice').length > RealtimeUpdate._maxnotices) {
$("#notices_primary .notice:last").remove();
}
},
+ /**
+ * If the window/tab is in background, increment the counter of newly
+ * received notices and append it onto the window title.
+ *
+ * Has no effect if the window is in foreground.
+ *
+ * @access private
+ */
updateWindowCounter: function() {
if (RealtimeUpdate._windowhasfocus === false) {
RealtimeUpdate._updatecounter += 1;
@@ -112,6 +216,30 @@ RealtimeUpdate = {
}
},
+ /**
+ * Clear the background update counter from the window title.
+ *
+ * @access private
+ *
+ * @fixme could interfere with anything else trying similar tricks
+ */
+ removeWindowCounter: function() {
+ document.title = RealtimeUpdate._documenttitle;
+ },
+
+ /**
+ * Builds a notice HTML block from JSON API-style data.
+ *
+ * @param {Object} data: extended JSON API-formatted notice
+ * @return {String} HTML fragment
+ *
+ * @fixme this replicates core StatusNet code, making maintenance harder
+ * @fixme sloppy HTML building (raw concat without escaping)
+ * @fixme no i18n support
+ * @fixme local variables pollute global namespace
+ *
+ * @access private
+ */
makeNoticeItem: function(data)
{
if (data.hasOwnProperty('retweeted_status')) {
@@ -182,6 +310,19 @@ RealtimeUpdate = {
return ni;
},
+ /**
+ * Creates a favorite button.
+ *
+ * @param {number} id: notice ID to work with
+ * @param {String} session_key: session token for form CSRF protection
+ * @return {String} HTML fragment
+ *
+ * @fixme this replicates core StatusNet code, making maintenance harder
+ * @fixme sloppy HTML building (raw concat without escaping)
+ * @fixme no i18n support
+ *
+ * @access private
+ */
makeFavoriteForm: function(id, session_key)
{
var ff;
@@ -197,6 +338,19 @@ RealtimeUpdate = {
return ff;
},
+ /**
+ * Creates a reply button.
+ *
+ * @param {number} id: notice ID to work with
+ * @param {String} nickname: nick of the user to whom we are replying
+ * @return {String} HTML fragment
+ *
+ * @fixme this replicates core StatusNet code, making maintenance harder
+ * @fixme sloppy HTML building (raw concat without escaping)
+ * @fixme no i18n support
+ *
+ * @access private
+ */
makeReplyLink: function(id, nickname)
{
var rl;
@@ -204,6 +358,19 @@ RealtimeUpdate = {
return rl;
},
+ /**
+ * Creates a repeat button.
+ *
+ * @param {number} id: notice ID to work with
+ * @param {String} session_key: session token for form CSRF protection
+ * @return {String} HTML fragment
+ *
+ * @fixme this replicates core StatusNet code, making maintenance harder
+ * @fixme sloppy HTML building (raw concat without escaping)
+ * @fixme no i18n support
+ *
+ * @access private
+ */
makeRepeatForm: function(id, session_key)
{
var rf;
@@ -219,6 +386,18 @@ RealtimeUpdate = {
return rf;
},
+ /**
+ * Creates a delete button.
+ *
+ * @param {number} id: notice ID to create a delete link for
+ * @return {String} HTML fragment
+ *
+ * @fixme this replicates core StatusNet code, making maintenance harder
+ * @fixme sloppy HTML building (raw concat without escaping)
+ * @fixme no i18n support
+ *
+ * @access private
+ */
makeDeleteLink: function(id)
{
var dl, delurl;
@@ -229,6 +408,19 @@ RealtimeUpdate = {
return dl;
},
+ /**
+ * Adds a control widget at the top of the timeline view, containing
+ * pause/play and popup buttons.
+ *
+ * @param {String} url: full URL to the popup window variant of this timeline page
+ * @param {String} timeline: string key for the timeline (eg 'public' or 'evan-all')
+ * @param {String} path: URL to the base directory containing the Realtime plugin,
+ * used to fetch resources if needed.
+ *
+ * @todo timeline and path parameters are unused and probably should be removed.
+ *
+ * @access private
+ */
initActions: function(url, timeline, path)
{
$('#notices_primary').prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>');
@@ -239,6 +431,14 @@ RealtimeUpdate = {
RealtimeUpdate.initAddPopup(url, timeline, RealtimeUpdate._pluginPath);
},
+ /**
+ * Initialize the state of the play/pause controls.
+ *
+ * If the browser supports the localStorage interface, we'll attempt
+ * to retrieve a pause state from there; otherwise we default to paused.
+ *
+ * @access private
+ */
initPlayPause: function()
{
if (typeof(localStorage) == 'undefined') {
@@ -254,6 +454,15 @@ RealtimeUpdate = {
}
},
+ /**
+ * Switch the realtime UI into paused state.
+ * Uses SN.msg i18n system for the button label and tooltip.
+ *
+ * State will be saved and re-used next time if the browser supports
+ * the localStorage interface (via setPause).
+ *
+ * @access private
+ */
showPause: function()
{
RealtimeUpdate.setPause(false);
@@ -261,27 +470,49 @@ RealtimeUpdate = {
RealtimeUpdate.addNoticesHover();
$('#realtime_playpause').remove();
- $('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause" title="Pause">Pause</button></li>');
-
- $('#realtime_pause').bind('click', function() {
+ $('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause"></button></li>');
+ $('#realtime_pause').text(SN.msg('realtime_pause'))
+ .attr('title', SN.msg('realtime_pause_tooltip'))
+ .bind('click', function() {
RealtimeUpdate.removeNoticesHover();
RealtimeUpdate.showPlay();
return false;
});
},
+ /**
+ * Switch the realtime UI into play state.
+ * Uses SN.msg i18n system for the button label and tooltip.
+ *
+ * State will be saved and re-used next time if the browser supports
+ * the localStorage interface (via setPause).
+ *
+ * @access private
+ */
showPlay: function()
{
RealtimeUpdate.setPause(true);
$('#realtime_playpause').remove();
- $('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button></li>');
-
- $('#realtime_play').bind('click', function() {
+ $('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play"></button></li>');
+ $('#realtime_play').text(SN.msg('realtime_play'))
+ .attr('title', SN.msg('realtime_play_tooltip'))
+ .bind('click', function() {
RealtimeUpdate.showPause();
return false;
});
},
+ /**
+ * Update the internal pause/play state.
+ * Do not call directly; use showPause() and showPlay().
+ *
+ * State will be saved and re-used next time if the browser supports
+ * the localStorage interface.
+ *
+ * @param {boolean} state: true = paused, false = not paused
+ *
+ * @access private
+ */
setPause: function(state)
{
RealtimeUpdate._paused = state;
@@ -290,6 +521,14 @@ RealtimeUpdate = {
}
},
+ /**
+ * Go through notices we have previously received while paused,
+ * dumping them into the timeline view.
+ *
+ * @fixme long timelines are not trimmed here as they are for things received while not paused
+ *
+ * @access private
+ */
showQueuedNotices: function()
{
$.each(RealtimeUpdate._queuedNotices, function(i, n) {
@@ -301,16 +540,35 @@ RealtimeUpdate = {
RealtimeUpdate.removeQueuedCounter();
},
+ /**
+ * Update the Realtime widget control's counter of queued notices to show
+ * the current count. This will be called after receiving and queueing
+ * a notice while paused.
+ *
+ * @access private
+ */
updateQueuedCounter: function()
{
$('#realtime_playpause #queued_counter').html('('+RealtimeUpdate._queuedNotices.length+')');
},
+ /**
+ * Clear the Realtime widget control's counter of queued notices.
+ *
+ * @access private
+ */
removeQueuedCounter: function()
{
$('#realtime_playpause #queued_counter').empty();
},
+ /**
+ * Set up event handlers on the timeline view to automatically pause
+ * when the mouse is over the timeline, as this indicates the user's
+ * desire to interact with the UI. (Which is hard to do when it's moving!)
+ *
+ * @access private
+ */
addNoticesHover: function()
{
$('#notices_primary .notices').hover(
@@ -327,17 +585,45 @@ RealtimeUpdate = {
);
},
+ /**
+ * Tear down event handlers on the timeline view to automatically pause
+ * when the mouse is over the timeline.
+ *
+ * @fixme this appears to remove *ALL* event handlers from the timeline,
+ * which assumes that nobody else is adding any event handlers.
+ * Sloppy -- we should only remove the ones we add.
+ *
+ * @access private
+ */
removeNoticesHover: function()
{
$('#notices_primary .notices').unbind();
},
+ /**
+ * UI initialization, to be called from Realtime plugin code on regular
+ * timeline pages.
+ *
+ * Adds a button to the control widget at the top of the timeline view,
+ * allowing creation of a popup window with a more compact real-time
+ * view of the current timeline.
+ *
+ * @param {String} url: full URL to the popup window variant of this timeline page
+ * @param {String} timeline: string key for the timeline (eg 'public' or 'evan-all')
+ * @param {String} path: URL to the base directory containing the Realtime plugin,
+ * used to fetch resources if needed.
+ *
+ * @todo timeline and path parameters are unused and probably should be removed.
+ *
+ * @access public
+ */
initAddPopup: function(url, timeline, path)
{
- $('#realtime_timeline').append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>');
-
- $('#realtime_popup').bind('click', function() {
- window.open(url,
+ $('#realtime_timeline').append('<button id="realtime_popup"></button>');
+ $('#realtime_popup').text(SN.msg('realtime_popup'))
+ .attr('title', SN.msg('realtime_popup_tooltip'))
+ .bind('click', function() {
+ window.open(url,
'',
'toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550');
@@ -345,6 +631,17 @@ RealtimeUpdate = {
});
},
+ /**
+ * UI initialization, to be called from Realtime plugin code on popup
+ * compact timeline pages.
+ *
+ * Sets up links in notices to open in a new window.
+ *
+ * @fixme fails to do the same for UI links like context view which will
+ * look bad in the tiny chromeless window.
+ *
+ * @access public
+ */
initPopupWindow: function()
{
$('.notices .entry-title a, .notices .entry-content a').bind('click', function() {
diff --git a/plugins/Realtime/realtimeupdate.min.js b/plugins/Realtime/realtimeupdate.min.js
new file mode 100644
index 000000000..60a4b446e
--- /dev/null
+++ b/plugins/Realtime/realtimeupdate.min.js
@@ -0,0 +1 @@
+RealtimeUpdate={_userid:0,_replyurl:"",_favorurl:"",_repeaturl:"",_deleteurl:"",_updatecounter:0,_maxnotices:50,_windowhasfocus:true,_documenttitle:"",_paused:false,_queuedNotices:[],init:function(c,b,d,e,a){RealtimeUpdate._userid=c;RealtimeUpdate._replyurl=b;RealtimeUpdate._favorurl=d;RealtimeUpdate._repeaturl=e;RealtimeUpdate._deleteurl=a;RealtimeUpdate._documenttitle=document.title;$(window).bind("focus",function(){RealtimeUpdate._windowhasfocus=true;RealtimeUpdate._updatecounter=0;RealtimeUpdate.removeWindowCounter()});$(window).bind("blur",function(){$("#notices_primary .notice").removeClass("mark-top");$("#notices_primary .notice:first").addClass("mark-top");RealtimeUpdate._windowhasfocus=false;return false})},receive:function(a){if(RealtimeUpdate.isNoticeVisible(a.id)){return}if(RealtimeUpdate._paused===false){RealtimeUpdate.purgeLastNoticeItem();RealtimeUpdate.insertNoticeItem(a)}else{RealtimeUpdate._queuedNotices.push(a);RealtimeUpdate.updateQueuedCounter()}RealtimeUpdate.updateWindowCounter()},insertNoticeItem:function(a){if(RealtimeUpdate.isNoticeVisible(a.id)){return}var b=RealtimeUpdate.makeNoticeItem(a);var c=$(b).attr("id");$("#notices_primary .notices").prepend(b);$("#notices_primary .notice:first").css({display:"none"});$("#notices_primary .notice:first").fadeIn(1000);SN.U.NoticeReplyTo($("#"+c));SN.U.NoticeWithAttachment($("#"+c))},isNoticeVisible:function(a){return($("#notice-"+a).length>0)},purgeLastNoticeItem:function(){if($("#notices_primary .notice").length>RealtimeUpdate._maxnotices){$("#notices_primary .notice:last").remove()}},updateWindowCounter:function(){if(RealtimeUpdate._windowhasfocus===false){RealtimeUpdate._updatecounter+=1;document.title="("+RealtimeUpdate._updatecounter+") "+RealtimeUpdate._documenttitle}},removeWindowCounter:function(){document.title=RealtimeUpdate._documenttitle},makeNoticeItem:function(c){if(c.hasOwnProperty("retweeted_status")){original=c.retweeted_status;repeat=c;c=original;unique=repeat.id;responsible=repeat.user}else{original=null;repeat=null;unique=c.id;responsible=c.user}user=c.user;html=c.html.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&amp;/g,"&");source=c.source.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&amp;/g,"&");ni='<li class="hentry notice" id="notice-'+unique+'"><div class="entry-title"><span class="vcard author"><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></span><p class="entry-content">'+html+'</p></div><div class="entry-content"><a class="timestamp" rel="bookmark" href="'+c.url+'" ><abbr class="published" title="'+c.created_at+'">a few seconds ago</abbr></a> <span class="source">from <span class="device">'+source+"</span></span>";if(c.conversation_url){ni=ni+' <a class="response" href="'+c.conversation_url+'">in context</a>'}if(repeat){ru=repeat.user;ni=ni+'<span class="repeat vcard">Repeated by <a href="'+ru.profile_url+'" class="url"><span class="nickname">'+ru.screen_name+"</span></a></span>"}ni=ni+"</div>";ni=ni+'<div class="notice-options">';if(RealtimeUpdate._userid!=0){var a=$("form#form_notice fieldset input#token");var b=a.val();ni=ni+RealtimeUpdate.makeFavoriteForm(c.id,b);ni=ni+RealtimeUpdate.makeReplyLink(c.id,c.user["screen_name"]);if(RealtimeUpdate._userid==responsible.id){ni=ni+RealtimeUpdate.makeDeleteLink(c.id)}else{if(RealtimeUpdate._userid!=user.id){ni=ni+RealtimeUpdate.makeRepeatForm(c.id,b)}}}ni=ni+"</div>";ni=ni+"</li>";return ni},makeFavoriteForm:function(c,b){var a;a='<form id="favor-'+c+'" class="form_favor" method="post" action="'+RealtimeUpdate._favorurl+'"><fieldset><legend>Favor this notice</legend><input name="token-'+c+'" type="hidden" id="token-'+c+'" value="'+b+'"/><input name="notice" type="hidden" id="notice-n'+c+'" value="'+c+'"/><input type="submit" id="favor-submit-'+c+'" name="favor-submit-'+c+'" class="submit" value="Favor" title="Favor this notice"/></fieldset></form>';return a},makeReplyLink:function(c,a){var b;b='<a class="notice_reply" href="'+RealtimeUpdate._replyurl+"?replyto="+a+'" title="Reply to this notice">Reply <span class="notice_id">'+c+"</span></a>";return b},makeRepeatForm:function(c,b){var a;a='<form id="repeat-'+c+'" class="form_repeat" method="post" action="'+RealtimeUpdate._repeaturl+'"><fieldset><legend>Repeat this notice?</legend><input name="token-'+c+'" type="hidden" id="token-'+c+'" value="'+b+'"/><input name="notice" type="hidden" id="notice-'+c+'" value="'+c+'"/><input type="submit" id="repeat-submit-'+c+'" name="repeat-submit-'+c+'" class="submit" value="Yes" title="Repeat this notice"/></fieldset></form>';return a},makeDeleteLink:function(c){var b,a;a=RealtimeUpdate._deleteurl.replace("0000000000",c);b='<a class="notice_delete" href="'+a+'" title="Delete this notice">Delete</a>';return b},initActions:function(a,b,c){$("#notices_primary").prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>');RealtimeUpdate._pluginPath=c;RealtimeUpdate.initPlayPause();RealtimeUpdate.initAddPopup(a,b,RealtimeUpdate._pluginPath)},initPlayPause:function(){if(typeof(localStorage)=="undefined"){RealtimeUpdate.showPause()}else{if(localStorage.getItem("RealtimeUpdate_paused")==="true"){RealtimeUpdate.showPlay()}else{RealtimeUpdate.showPause()}}},showPause:function(){RealtimeUpdate.setPause(false);RealtimeUpdate.showQueuedNotices();RealtimeUpdate.addNoticesHover();$("#realtime_playpause").remove();$("#realtime_actions").prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause"></button></li>');$("#realtime_pause").text(SN.msg("realtime_pause")).attr("title",SN.msg("realtime_pause_tooltip")).bind("click",function(){RealtimeUpdate.removeNoticesHover();RealtimeUpdate.showPlay();return false})},showPlay:function(){RealtimeUpdate.setPause(true);$("#realtime_playpause").remove();$("#realtime_actions").prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play"></button></li>');$("#realtime_play").text(SN.msg("realtime_play")).attr("title",SN.msg("realtime_play_tooltip")).bind("click",function(){RealtimeUpdate.showPause();return false})},setPause:function(a){RealtimeUpdate._paused=a;if(typeof(localStorage)!="undefined"){localStorage.setItem("RealtimeUpdate_paused",RealtimeUpdate._paused)}},showQueuedNotices:function(){$.each(RealtimeUpdate._queuedNotices,function(a,b){RealtimeUpdate.insertNoticeItem(b)});RealtimeUpdate._queuedNotices=[];RealtimeUpdate.removeQueuedCounter()},updateQueuedCounter:function(){$("#realtime_playpause #queued_counter").html("("+RealtimeUpdate._queuedNotices.length+")")},removeQueuedCounter:function(){$("#realtime_playpause #queued_counter").empty()},addNoticesHover:function(){$("#notices_primary .notices").hover(function(){if(RealtimeUpdate._paused===false){RealtimeUpdate.showPlay()}},function(){if(RealtimeUpdate._paused===true){RealtimeUpdate.showPause()}})},removeNoticesHover:function(){$("#notices_primary .notices").unbind()},initAddPopup:function(a,b,c){$("#realtime_timeline").append('<button id="realtime_popup"></button>');$("#realtime_popup").text(SN.msg("realtime_popup")).attr("title",SN.msg("realtime_popup_tooltip")).bind("click",function(){window.open(a,"","toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550");return false})},initPopupWindow:function(){$(".notices .entry-title a, .notices .entry-content a").bind("click",function(){window.open(this.href,"");return false});$("#showstream .entity_profile").css({width:"69%"})}}; \ No newline at end of file
diff --git a/plugins/Recaptcha/locale/ja/LC_MESSAGES/Recaptcha.po b/plugins/Recaptcha/locale/ja/LC_MESSAGES/Recaptcha.po
new file mode 100644
index 000000000..ddb9bf07c
--- /dev/null
+++ b/plugins/Recaptcha/locale/ja/LC_MESSAGES/Recaptcha.po
@@ -0,0 +1,38 @@
+# Translation of StatusNet - Recaptcha to Japanese (日本語)
+# Expored from translatewiki.net
+#
+# Author: 青子守歌
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Recaptcha\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:10+0000\n"
+"Language-Team: Japanese <http://translatewiki.net/wiki/Portal:ja>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:57+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ja\n"
+"X-Message-Group: #out-statusnet-plugin-recaptcha\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#: RecaptchaPlugin.php:64
+msgid "Captcha"
+msgstr ""
+
+#: RecaptchaPlugin.php:105
+msgid "Captcha does not match!"
+msgstr ""
+
+#: RecaptchaPlugin.php:117
+msgid ""
+"Uses <a href=\"http://recaptcha.org/\">Recaptcha</a> service to add a "
+"captcha to the registration page."
+msgstr ""
+"登録ページにキャプチャとして<a href=\"http://recaptcha.org/\">Recaptcha</a>"
+"サービスを利用する。"
diff --git a/plugins/Recaptcha/locale/pl/LC_MESSAGES/Recaptcha.po b/plugins/Recaptcha/locale/pl/LC_MESSAGES/Recaptcha.po
new file mode 100644
index 000000000..4d6f78374
--- /dev/null
+++ b/plugins/Recaptcha/locale/pl/LC_MESSAGES/Recaptcha.po
@@ -0,0 +1,37 @@
+# Translation of StatusNet - Recaptcha to Polish (Polski)
+# Expored from translatewiki.net
+#
+# Author: Raven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Recaptcha\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:10+0000\n"
+"Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:13:57+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: pl\n"
+"X-Message-Group: #out-statusnet-plugin-recaptcha\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
+"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
+
+#: RecaptchaPlugin.php:64
+msgid "Captcha"
+msgstr "Captcha"
+
+#: RecaptchaPlugin.php:105
+msgid "Captcha does not match!"
+msgstr ""
+
+#: RecaptchaPlugin.php:117
+msgid ""
+"Uses <a href=\"http://recaptcha.org/\">Recaptcha</a> service to add a "
+"captcha to the registration page."
+msgstr ""
diff --git a/plugins/RegisterThrottle/locale/de/LC_MESSAGES/RegisterThrottle.po b/plugins/RegisterThrottle/locale/de/LC_MESSAGES/RegisterThrottle.po
index dcbe76001..aea0d5acd 100644
--- a/plugins/RegisterThrottle/locale/de/LC_MESSAGES/RegisterThrottle.po
+++ b/plugins/RegisterThrottle/locale/de/LC_MESSAGES/RegisterThrottle.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - RegisterThrottle\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:25+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:07+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:00:59+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:13:58+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-registerthrottle\n"
@@ -32,7 +32,7 @@ msgstr ""
#: RegisterThrottlePlugin.php:161
msgid "A banned user has registered from this address."
-msgstr ""
+msgstr "Ein gesperrter Benutzer hat sich von dieser Adresse registriert."
#: RegisterThrottlePlugin.php:191
msgid "Cannot find user after successful registration."
diff --git a/plugins/RegisterThrottle/locale/ru/LC_MESSAGES/RegisterThrottle.po b/plugins/RegisterThrottle/locale/ru/LC_MESSAGES/RegisterThrottle.po
new file mode 100644
index 000000000..ee0758f7d
--- /dev/null
+++ b/plugins/RegisterThrottle/locale/ru/LC_MESSAGES/RegisterThrottle.po
@@ -0,0 +1,43 @@
+# Translation of StatusNet - RegisterThrottle to Russian (Русский)
+# Expored from translatewiki.net
+#
+# Author: MaxSem
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - RegisterThrottle\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:11+0000\n"
+"Language-Team: Russian <http://translatewiki.net/wiki/Portal:ru>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:44:33+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: ru\n"
+"X-Message-Group: #out-statusnet-plugin-registerthrottle\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"
+
+#: RegisterThrottlePlugin.php:134 RegisterThrottlePlugin.php:185
+msgid "Cannot find IP address."
+msgstr "IP-адрес не найден."
+
+#: RegisterThrottlePlugin.php:149
+msgid "Too many registrations. Take a break and try again later."
+msgstr ""
+
+#: RegisterThrottlePlugin.php:161
+msgid "A banned user has registered from this address."
+msgstr ""
+
+#: RegisterThrottlePlugin.php:191
+msgid "Cannot find user after successful registration."
+msgstr ""
+
+#: RegisterThrottlePlugin.php:224
+msgid "Throttles excessive registration from a single IP address."
+msgstr ""
diff --git a/plugins/RequireValidatedEmail/locale/de/LC_MESSAGES/RequireValidatedEmail.po b/plugins/RequireValidatedEmail/locale/de/LC_MESSAGES/RequireValidatedEmail.po
index 3644e117e..77c256961 100644
--- a/plugins/RequireValidatedEmail/locale/de/LC_MESSAGES/RequireValidatedEmail.po
+++ b/plugins/RequireValidatedEmail/locale/de/LC_MESSAGES/RequireValidatedEmail.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - RequireValidatedEmail\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:26+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:08+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:54:48+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:13:59+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-requirevalidatedemail\n"
@@ -31,4 +31,4 @@ msgstr "Du musst eine E-Mail-Adresse angeben, um dich zu registrieren."
#: RequireValidatedEmailPlugin.php:216
msgid "Disables posting without a validated email address."
-msgstr ""
+msgstr "Deaktiviert Posten ohne gültige E-Mail-Adresse."
diff --git a/plugins/Sample/locale/br/LC_MESSAGES/Sample.po b/plugins/Sample/locale/br/LC_MESSAGES/Sample.po
index 2ac1405de..0702b07c3 100644
--- a/plugins/Sample/locale/br/LC_MESSAGES/Sample.po
+++ b/plugins/Sample/locale/br/LC_MESSAGES/Sample.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Sample\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:31+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:05+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-20 17:58:22+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:14:01+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-sample\n"
@@ -26,14 +26,14 @@ msgstr ""
#: User_greeting_count.php:164
#, php-format
msgid "Could not save new greeting count for %d."
-msgstr ""
+msgstr "Dibosupl eo enrollañ ar gont degemer nevez evit an implijer %d."
#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
#. TRANS: %d is a user ID (number).
#: User_greeting_count.php:177
#, php-format
msgid "Could not increment greeting count for %d."
-msgstr ""
+msgstr "Dibosupl eo inkremantañ ar gont degemer nevez evit an implijer %d."
#: SamplePlugin.php:259 hello.php:111
msgid "Hello"
@@ -41,11 +41,13 @@ msgstr "Demat"
#: SamplePlugin.php:259
msgid "A warm greeting"
-msgstr ""
+msgstr "Un degemer tomm"
#: SamplePlugin.php:270
msgid "A sample plugin to show basics of development for new hackers."
msgstr ""
+"Ur skouer a lugant evit diskouez an diazezoù diorren evit ar c'hoderien "
+"nevez."
#: hello.php:113
#, php-format
@@ -65,5 +67,5 @@ msgstr "Demat, %s"
#, php-format
msgid "I have greeted you %d time."
msgid_plural "I have greeted you %d times."
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "ur"
+msgstr[1] "%d"
diff --git a/plugins/Sample/locale/gl/LC_MESSAGES/Sample.po b/plugins/Sample/locale/gl/LC_MESSAGES/Sample.po
new file mode 100644
index 000000000..71c80757d
--- /dev/null
+++ b/plugins/Sample/locale/gl/LC_MESSAGES/Sample.po
@@ -0,0 +1,69 @@
+# Translation of StatusNet - Sample to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Sample\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:15+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:46:16+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-sample\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:164
+#, php-format
+msgid "Could not save new greeting count for %d."
+msgstr ""
+
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:177
+#, php-format
+msgid "Could not increment greeting count for %d."
+msgstr ""
+
+#: SamplePlugin.php:259 hello.php:111
+msgid "Hello"
+msgstr "Ola"
+
+#: SamplePlugin.php:259
+msgid "A warm greeting"
+msgstr ""
+
+#: SamplePlugin.php:270
+msgid "A sample plugin to show basics of development for new hackers."
+msgstr ""
+
+#: hello.php:113
+#, php-format
+msgid "Hello, %s!"
+msgstr ""
+
+#: hello.php:133
+msgid "Hello, stranger!"
+msgstr ""
+
+#: hello.php:136
+#, php-format
+msgid "Hello, %s"
+msgstr "Ola, %s"
+
+#: hello.php:138
+#, php-format
+msgid "I have greeted you %d time."
+msgid_plural "I have greeted you %d times."
+msgstr[0] ""
+msgstr[1] ""
diff --git a/plugins/Sample/locale/lb/LC_MESSAGES/Sample.po b/plugins/Sample/locale/lb/LC_MESSAGES/Sample.po
new file mode 100644
index 000000000..fdea9b2d8
--- /dev/null
+++ b/plugins/Sample/locale/lb/LC_MESSAGES/Sample.po
@@ -0,0 +1,69 @@
+# Translation of StatusNet - Sample to Luxembourgish (Lëtzebuergesch)
+# Expored from translatewiki.net
+#
+# Author: Robby
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - Sample\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:11+0000\n"
+"Language-Team: Luxembourgish <http://translatewiki.net/wiki/Portal:lb>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-07 21:21:52+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: lb\n"
+"X-Message-Group: #out-statusnet-plugin-sample\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:164
+#, php-format
+msgid "Could not save new greeting count for %d."
+msgstr ""
+
+#. TRANS: Exception thrown when the user greeting count could not be saved in the database.
+#. TRANS: %d is a user ID (number).
+#: User_greeting_count.php:177
+#, php-format
+msgid "Could not increment greeting count for %d."
+msgstr ""
+
+#: SamplePlugin.php:259 hello.php:111
+msgid "Hello"
+msgstr "Salut"
+
+#: SamplePlugin.php:259
+msgid "A warm greeting"
+msgstr "E schéine Bonjour"
+
+#: SamplePlugin.php:270
+msgid "A sample plugin to show basics of development for new hackers."
+msgstr ""
+
+#: hello.php:113
+#, php-format
+msgid "Hello, %s!"
+msgstr "Salut %s!"
+
+#: hello.php:133
+msgid "Hello, stranger!"
+msgstr ""
+
+#: hello.php:136
+#, php-format
+msgid "Hello, %s"
+msgstr "Salut, %s"
+
+#: hello.php:138
+#, php-format
+msgid "I have greeted you %d time."
+msgid_plural "I have greeted you %d times."
+msgstr[0] ""
+msgstr[1] ""
diff --git a/plugins/ShareNotice/locale/br/LC_MESSAGES/ShareNotice.po b/plugins/ShareNotice/locale/br/LC_MESSAGES/ShareNotice.po
new file mode 100644
index 000000000..497256d09
--- /dev/null
+++ b/plugins/ShareNotice/locale/br/LC_MESSAGES/ShareNotice.po
@@ -0,0 +1,53 @@
+# Translation of StatusNet - ShareNotice to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ShareNotice\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:16+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:46:17+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-sharenotice\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Leave this message unchanged.
+#. TRANS: %s is notice content that is shared on Twitter, Facebook or another platform.
+#: ShareNoticePlugin.php:106 ShareNoticePlugin.php:194
+#, php-format
+msgid "\"%s\""
+msgstr "\"%s\""
+
+#. TRANS: Tooltip for image to share a notice on Twitter.
+#: ShareNoticePlugin.php:130
+msgid "Share on Twitter"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on another platform (other than Twitter or Facebook).
+#. TRANS: %s is a host name.
+#: ShareNoticePlugin.php:163
+#, php-format
+msgid "Share on %s"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on Facebook.
+#: ShareNoticePlugin.php:186
+msgid "Share on Facebook"
+msgstr ""
+
+#. TRANS: Plugin description.
+#: ShareNoticePlugin.php:219
+msgid ""
+"This plugin allows sharing of notices to Twitter, Facebook and other "
+"platforms."
+msgstr ""
diff --git a/plugins/ShareNotice/locale/de/LC_MESSAGES/ShareNotice.po b/plugins/ShareNotice/locale/de/LC_MESSAGES/ShareNotice.po
index 270b5a516..2fc49d43d 100644
--- a/plugins/ShareNotice/locale/de/LC_MESSAGES/ShareNotice.po
+++ b/plugins/ShareNotice/locale/de/LC_MESSAGES/ShareNotice.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - ShareNotice\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:36+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:17+0000\n"
"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:34:10+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:14:45+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: #out-statusnet-plugin-sharenotice\n"
@@ -26,7 +26,7 @@ msgstr ""
#: ShareNoticePlugin.php:106 ShareNoticePlugin.php:194
#, php-format
msgid "\"%s\""
-msgstr ""
+msgstr "„%s“"
#. TRANS: Tooltip for image to share a notice on Twitter.
#: ShareNoticePlugin.php:130
diff --git a/plugins/ShareNotice/locale/pl/LC_MESSAGES/ShareNotice.po b/plugins/ShareNotice/locale/pl/LC_MESSAGES/ShareNotice.po
new file mode 100644
index 000000000..3a507508e
--- /dev/null
+++ b/plugins/ShareNotice/locale/pl/LC_MESSAGES/ShareNotice.po
@@ -0,0 +1,54 @@
+# Translation of StatusNet - ShareNotice to Polish (Polski)
+# Expored from translatewiki.net
+#
+# Author: Raven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ShareNotice\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:16+0000\n"
+"Language-Team: Polish <http://translatewiki.net/wiki/Portal:pl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:46:17+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: pl\n"
+"X-Message-Group: #out-statusnet-plugin-sharenotice\n"
+"Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ( (n%10 >= 2 && n%10 <= 4 && "
+"(n%100 < 10 || n%100 >= 20)) ? 1 : 2 );\n"
+
+#. TRANS: Leave this message unchanged.
+#. TRANS: %s is notice content that is shared on Twitter, Facebook or another platform.
+#: ShareNoticePlugin.php:106 ShareNoticePlugin.php:194
+#, php-format
+msgid "\"%s\""
+msgstr "\"%s\""
+
+#. TRANS: Tooltip for image to share a notice on Twitter.
+#: ShareNoticePlugin.php:130
+msgid "Share on Twitter"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on another platform (other than Twitter or Facebook).
+#. TRANS: %s is a host name.
+#: ShareNoticePlugin.php:163
+#, php-format
+msgid "Share on %s"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on Facebook.
+#: ShareNoticePlugin.php:186
+msgid "Share on Facebook"
+msgstr ""
+
+#. TRANS: Plugin description.
+#: ShareNoticePlugin.php:219
+msgid ""
+"This plugin allows sharing of notices to Twitter, Facebook and other "
+"platforms."
+msgstr ""
diff --git a/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po b/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po
new file mode 100644
index 000000000..f70e598f3
--- /dev/null
+++ b/plugins/ShareNotice/locale/te/LC_MESSAGES/ShareNotice.po
@@ -0,0 +1,53 @@
+# Translation of StatusNet - ShareNotice to Telugu (తెలుగు)
+# Expored from translatewiki.net
+#
+# Author: Veeven
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - ShareNotice\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:16+0000\n"
+"Language-Team: Telugu <http://translatewiki.net/wiki/Portal:te>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-29 19:46:17+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: te\n"
+"X-Message-Group: #out-statusnet-plugin-sharenotice\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Leave this message unchanged.
+#. TRANS: %s is notice content that is shared on Twitter, Facebook or another platform.
+#: ShareNoticePlugin.php:106 ShareNoticePlugin.php:194
+#, php-format
+msgid "\"%s\""
+msgstr "\"%s\""
+
+#. TRANS: Tooltip for image to share a notice on Twitter.
+#: ShareNoticePlugin.php:130
+msgid "Share on Twitter"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on another platform (other than Twitter or Facebook).
+#. TRANS: %s is a host name.
+#: ShareNoticePlugin.php:163
+#, php-format
+msgid "Share on %s"
+msgstr ""
+
+#. TRANS: Tooltip for image to share a notice on Facebook.
+#: ShareNoticePlugin.php:186
+msgid "Share on Facebook"
+msgstr ""
+
+#. TRANS: Plugin description.
+#: ShareNoticePlugin.php:219
+msgid ""
+"This plugin allows sharing of notices to Twitter, Facebook and other "
+"platforms."
+msgstr ""
diff --git a/plugins/SimpleUrl/locale/de/LC_MESSAGES/SimpleUrl.po b/plugins/SimpleUrl/locale/de/LC_MESSAGES/SimpleUrl.po
new file mode 100644
index 000000000..da38f1da0
--- /dev/null
+++ b/plugins/SimpleUrl/locale/de/LC_MESSAGES/SimpleUrl.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - SimpleUrl to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - SimpleUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:18+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:03+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-simpleurl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: SimpleUrlPlugin.php:58
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr "Benutzung des <a href=\"http://%1$s/\">%1$s</a>-URL-Kürzungsdienstes."
diff --git a/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po b/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po
index 02dea72ee..73ebd322f 100644
--- a/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po
+++ b/plugins/Sitemap/locale/br/LC_MESSAGES/Sitemap.po
@@ -2,6 +2,7 @@
# Expored from translatewiki.net
#
# Author: Fulup
+# Author: Y-M D
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -9,13 +10,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - Sitemap\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:40+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:07+0000\n"
"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:34:11+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:14:04+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: #out-statusnet-plugin-sitemap\n"
@@ -54,7 +55,7 @@ msgstr ""
#. TRANS: Field label.
#: sitemapadminpanel.php:183
msgid "Bing key"
-msgstr ""
+msgstr "Alc'hwez Bing"
#. TRANS: Title for field label.
#: sitemapadminpanel.php:185
diff --git a/plugins/SphinxSearch/locale/br/LC_MESSAGES/SphinxSearch.po b/plugins/SphinxSearch/locale/br/LC_MESSAGES/SphinxSearch.po
new file mode 100644
index 000000000..9f89e63e7
--- /dev/null
+++ b/plugins/SphinxSearch/locale/br/LC_MESSAGES/SphinxSearch.po
@@ -0,0 +1,37 @@
+# Translation of StatusNet - SphinxSearch to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Fulup
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - SphinxSearch\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:28+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:15:02+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-sphinxsearch\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Server exception.
+#: SphinxSearchPlugin.php:87
+msgid "Sphinx PHP extension must be installed."
+msgstr "Rekis eo d'an astenn Sphinx PHP bezañ staliet."
+
+#. TRANS: Plugin description.
+#: SphinxSearchPlugin.php:118
+msgid "Plugin for Sphinx search backend."
+msgstr ""
+
+#. TRANS: Server exception thrown when a database name cannot be identified.
+#: sphinxsearch.php:96
+msgid "Sphinx search could not identify database name."
+msgstr ""
diff --git a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po
index ced57eafa..1593f1018 100644
--- a/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po
+++ b/plugins/SubMirror/locale/uk/LC_MESSAGES/SubMirror.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - SubMirror\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:44+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:24+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-09 14:37:02+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:14:06+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-submirror\n"
@@ -30,7 +30,7 @@ msgstr "Стягування веб-каналів до вашої стрічк
#: SubMirrorPlugin.php:109
msgctxt "MENU"
msgid "Mirroring"
-msgstr "Віддзеркалення"
+msgstr "Дзеркала"
#. TRANS: SubMirror plugin tooltip for user settings menu item.
#: SubMirrorPlugin.php:111
diff --git a/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po b/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po
new file mode 100644
index 000000000..b9b454898
--- /dev/null
+++ b/plugins/TabFocus/locale/br/LC_MESSAGES/TabFocus.po
@@ -0,0 +1,32 @@
+# Translation of StatusNet - TabFocus to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - TabFocus\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:11+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:08+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-tabfocus\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#: TabFocusPlugin.php:54
+msgid ""
+"TabFocus changes the notice form behavior so that, while in the text area, "
+"pressing the tab key focuses the \"Send\" button, matching the behavior of "
+"Twitter."
+msgstr ""
+"TabFocus a gemm emzalc'h ar furmskrid kemennoù evit ma vefe kaset ar fokus "
+"war ar bouton \"Kas\" pa bouezer war a stokell taolennata adalek ar zonenn "
+"testenn, ar pezh a glot gant emzalc'h Twitter."
diff --git a/plugins/TightUrl/locale/de/LC_MESSAGES/TightUrl.po b/plugins/TightUrl/locale/de/LC_MESSAGES/TightUrl.po
new file mode 100644
index 000000000..7ceaffe8b
--- /dev/null
+++ b/plugins/TightUrl/locale/de/LC_MESSAGES/TightUrl.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - TightUrl to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - TightUrl\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:27+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:09+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-tighturl\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: TightUrlPlugin.php:68
+#, php-format
+msgid "Uses <a href=\"http://%1$s/\">%1$s</a> URL-shortener service."
+msgstr "Benutzung des <a href=\"http://%1$s/\">%1$s</a>-URL-Kürzungsdienstes."
diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php
index b520a4544..b2dce6f1c 100644
--- a/plugins/TwitterBridge/TwitterBridgePlugin.php
+++ b/plugins/TwitterBridge/TwitterBridgePlugin.php
@@ -200,8 +200,15 @@ class TwitterBridgePlugin extends Plugin
return false;
case 'TwitterOAuthClient':
case 'TwitterQueueHandler':
+ case 'TwitterImport':
+ case 'JsonStreamReader':
+ case 'TwitterStreamReader':
include_once $dir . '/' . strtolower($cls) . '.php';
return false;
+ case 'TwitterSiteStream':
+ case 'TwitterUserStream':
+ include_once $dir . '/twitterstreamreader.php';
+ return false;
case 'Notice_to_status':
case 'Twitter_synch_status':
include_once $dir . '/' . $cls . '.php';
@@ -267,7 +274,11 @@ class TwitterBridgePlugin extends Plugin
function onEndInitializeQueueManager($manager)
{
if (self::hasKeys()) {
+ // Outgoing notices -> twitter
$manager->connect('twitter', 'TwitterQueueHandler');
+
+ // Incoming statuses <- twitter
+ $manager->connect('tweetin', 'TweetInQueueHandler');
}
return true;
}
diff --git a/plugins/TwitterBridge/daemons/twitterdaemon.php b/plugins/TwitterBridge/daemons/twitterdaemon.php
new file mode 100644
index 000000000..d313d2de9
--- /dev/null
+++ b/plugins/TwitterBridge/daemons/twitterdaemon.php
@@ -0,0 +1,314 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * 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
+ * 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 = 'fi::a';
+$longoptions = array('id::', 'foreground', 'all');
+
+$helptext = <<<END_OF_XMPP_HELP
+Daemon script for receiving new notices from Twitter users.
+
+ -i --id Identity (default none)
+ -a --all Handle Twitter for all local sites
+ (requires Stomp queue handler, status_network setup)
+ -f --foreground Stay in the foreground (default background)
+
+END_OF_XMPP_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+require_once INSTALLDIR . '/lib/jabber.php';
+
+class TwitterDaemon extends SpawningDaemon
+{
+ protected $allsites = false;
+
+ function __construct($id=null, $daemonize=true, $threads=1, $allsites=false)
+ {
+ if ($threads != 1) {
+ // This should never happen. :)
+ throw new Exception("TwitterDaemon must run single-threaded");
+ }
+ parent::__construct($id, $daemonize, $threads);
+ $this->allsites = $allsites;
+ }
+
+ function runThread()
+ {
+ common_log(LOG_INFO, 'Waiting to listen to Twitter and queues');
+
+ $master = new TwitterMaster($this->get_id(), $this->processManager());
+ $master->init($this->allsites);
+ $master->service();
+
+ common_log(LOG_INFO, 'terminating normally');
+
+ return $master->respawn ? self::EXIT_RESTART : self::EXIT_SHUTDOWN;
+ }
+
+}
+
+class TwitterMaster extends IoMaster
+{
+ protected $processManager;
+
+ function __construct($id, $processManager)
+ {
+ parent::__construct($id);
+ $this->processManager = $processManager;
+ }
+
+ /**
+ * Initialize IoManagers for the currently configured site
+ * which are appropriate to this instance.
+ */
+ function initManagers()
+ {
+ $qm = QueueManager::get();
+ $qm->setActiveGroup('twitter');
+ $this->instantiate($qm);
+ $this->instantiate(new TwitterManager());
+ $this->instantiate($this->processManager);
+ }
+}
+
+
+class TwitterManager extends IoManager
+{
+ // Recommended resource limits from http://dev.twitter.com/pages/site_streams
+ const MAX_STREAMS = 1000;
+ const USERS_PER_STREAM = 100;
+ const STREAMS_PER_SECOND = 20;
+
+ protected $streams;
+ protected $users;
+
+ /**
+ * Pull the site's active Twitter-importing users and start spawning
+ * some data streams for them!
+ *
+ * @fixme check their last-id and check whether we'll need to do a manual pull.
+ * @fixme abstract out the fetching so we can work over multiple sites.
+ */
+ protected function initStreams()
+ {
+ common_log(LOG_INFO, 'init...');
+ // Pull Twitter user IDs for all users we want to pull data for
+ $flink = new Foreign_link();
+ $flink->service = TWITTER_SERVICE;
+ // @fixme probably should do the bitfield check in a whereAdd but it's ugly :D
+ $flink->find();
+
+ $userIds = array();
+ while ($flink->fetch()) {
+ if (($flink->noticesync & FOREIGN_NOTICE_RECV) ==
+ FOREIGN_NOTICE_RECV) {
+ $userIds[] = $flink->foreign_id;
+
+ if (count($userIds) >= self::USERS_PER_STREAM) {
+ $this->spawnStream($userIds);
+ $userIds = array();
+ }
+ }
+ }
+
+ if (count($userIds)) {
+ $this->spawnStream($userIds);
+ }
+ }
+
+ /**
+ * Prepare a Site Stream connection for the given chunk of users.
+ * The actual connection will be opened later.
+ *
+ * @param $userIds array of Twitter-side user IDs
+ */
+ protected function spawnStream($userIds)
+ {
+ $stream = $this->initSiteStream();
+ $stream->followUsers($userIds);
+
+ // Slip the stream reader into our list of active streams.
+ // We'll manage its actual connection on the next go-around.
+ $this->streams[] = $stream;
+
+ // Record the user->stream mappings; this makes it easier for us to know
+ // later if we need to kill something.
+ foreach ($userIds as $id) {
+ $this->users[$id] = $stream;
+ }
+ }
+
+ /**
+ * Initialize a generic site streams connection object.
+ * All our connections will look like this, then we'll add users to them.
+ *
+ * @return TwitterStreamReader
+ */
+ protected function initSiteStream()
+ {
+ $auth = $this->siteStreamAuth();
+ $stream = new TwitterSiteStream($auth);
+
+ // Add our event handler callbacks. Whee!
+ $this->setupEvents($stream);
+ return $stream;
+ }
+
+ /**
+ * Fetch the Twitter OAuth credentials to use to connect to the Site Streams API.
+ *
+ * This will use the locally-stored credentials for the applictation's owner account
+ * from the site configuration. These should be configured through the administration
+ * panels or manually in the config file.
+ *
+ * Will throw an exception if no credentials can be found -- but beware that invalid
+ * credentials won't cause breakage until later.
+ *
+ * @return TwitterOAuthClient
+ */
+ protected function siteStreamAuth()
+ {
+ $token = common_config('twitter', 'stream_token');
+ $secret = common_config('twitter', 'stream_secret');
+ if (empty($token) || empty($secret)) {
+ throw new ServerException('Twitter site streams have not been correctly configured. Configure the app owner account via the admin panel.');
+ }
+ return new TwitterOAuthClient($token, $secret);
+ }
+
+ /**
+ * Collect the sockets for all active connections for i/o monitoring.
+ *
+ * @return array of resources
+ */
+ public function getSockets()
+ {
+ $sockets = array();
+ foreach ($this->streams as $stream) {
+ foreach ($stream->getSockets() as $socket) {
+ $sockets[] = $socket;
+ }
+ }
+ return $sockets;
+ }
+
+ /**
+ * We're ready to process input from one of our data sources! Woooooo!
+ * @fixme is there an easier way to map from socket back to owning module? :(
+ *
+ * @param resource $socket
+ * @return boolean success
+ */
+ public function handleInput($socket)
+ {
+ foreach ($this->streams as $stream) {
+ foreach ($stream->getSockets() as $aSocket) {
+ if ($socket === $aSocket) {
+ $stream->handleInput($socket);
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Start the i/o system up! Prepare our connections and start opening them.
+ *
+ * @fixme do some rate-limiting on the stream setup
+ * @fixme do some sensible backoff on failure etc
+ */
+ public function start()
+ {
+ $this->initStreams();
+ foreach ($this->streams as $stream) {
+ $stream->connect();
+ }
+ return true;
+ }
+
+ /**
+ * Close down our connections when the daemon wraps up for business.
+ */
+ public function finish()
+ {
+ foreach ($this->streams as $index => $stream) {
+ $stream->close();
+ unset($this->streams[$index]);
+ }
+ return true;
+ }
+
+ public static function get()
+ {
+ throw new Exception('not a singleton');
+ }
+
+ /**
+ * Set up event handlers on the streaming interface.
+ *
+ * @fixme add more event types as we add handling for them
+ */
+ protected function setupEvents(TwitterStreamReader $stream)
+ {
+ $handlers = array(
+ 'status',
+ );
+ foreach ($handlers as $event) {
+ $stream->hookEvent($event, array($this, 'onTwitter' . ucfirst($event)));
+ }
+ }
+
+ /**
+ * Event callback notifying that a user has a new message in their home timeline.
+ * We store the incoming message into the queues for processing, keeping our own
+ * daemon running as shiny-fast as possible.
+ *
+ * @param object $status JSON data: Twitter status update
+ * @fixme in all-sites mode we may need to route queue items into another site's
+ * destination queues, or multiple sites.
+ */
+ protected function onTwitterStatus($status, $context)
+ {
+ $data = array(
+ 'status' => $status,
+ 'for_user' => $context->for_user,
+ );
+ $qm = QueueManager::get();
+ $qm->enqueue($data, 'tweetin');
+ }
+}
+
+
+if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+} else if (count($args) > 0) {
+ $id = $args[0];
+} else {
+ $id = null;
+}
+
+$foreground = have_option('f', 'foreground');
+$all = have_option('a') || have_option('--all');
+
+$daemon = new TwitterDaemon($id, !$foreground, 1, $all);
+
+$daemon->runOnce();
diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
index cef67b180..06ce43037 100755
--- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
+++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
@@ -192,25 +192,12 @@ class TwitterStatusFetcher extends ParallelizingDaemon
common_debug(LOG_INFO, $this->name() . ' - Retrieved ' . sizeof($timeline) . ' statuses from Twitter.');
+ $importer = new TwitterImport();
+
// Reverse to preserve order
foreach (array_reverse($timeline) as $status) {
- // Hacktastic: filter out stuff coming from this StatusNet
- $source = mb_strtolower(common_config('integration', 'source'));
-
- if (preg_match("/$source/", mb_strtolower($status->source))) {
- common_debug($this->name() . ' - Skipping import of status ' .
- $status->id . ' with source ' . $source);
- continue;
- }
-
- // Don't save it if the user is protected
- // FIXME: save it but treat it as private
- if ($status->user->protected) {
- continue;
- }
-
- $notice = $this->saveStatus($status);
+ $notice = $importer->importStatus($status);
if (!empty($notice)) {
Inbox::insertNotice($flink->user_id, $notice->id);
@@ -218,586 +205,15 @@ class TwitterStatusFetcher extends ParallelizingDaemon
}
if (!empty($timeline)) {
- Twitter_synch_status::setLastId($flink->foreign_id, 'home_timeline', $timeline[0]->id);
- common_debug("Set lastId value '{$timeline[0]->id}' for foreign id '{$flink->foreign_id}' and timeline 'home_timeline'");
+ $lastId = twitter_id($timeline[0]);
+ Twitter_synch_status::setLastId($flink->foreign_id, 'home_timeline', $lastId);
+ common_debug("Set lastId value '$lastId' for foreign id '{$flink->foreign_id}' and timeline 'home_timeline'");
}
// Okay, record the time we synced with Twitter for posterity
$flink->last_noticesync = common_sql_now();
$flink->update();
}
-
- function saveStatus($status)
- {
- $profile = $this->ensureProfile($status->user);
-
- if (empty($profile)) {
- common_log(LOG_ERR, $this->name() .
- ' - Problem saving notice. No associated Profile.');
- return null;
- }
-
- $statusUri = $this->makeStatusURI($status->user->screen_name, $status->id);
-
- // check to see if we've already imported the status
- $n2s = Notice_to_status::staticGet('status_id', $status->id);
-
- if (!empty($n2s)) {
- common_log(
- LOG_INFO,
- $this->name() .
- " - Ignoring duplicate import: {$status->id}"
- );
- return Notice::staticGet('id', $n2s->notice_id);
- }
-
- // If it's a retweet, save it as a repeat!
- if (!empty($status->retweeted_status)) {
- common_log(LOG_INFO, "Status {$status->id} is a retweet of {$status->retweeted_status->id}.");
- $original = $this->saveStatus($status->retweeted_status);
- if (empty($original)) {
- return null;
- } else {
- $author = $original->getProfile();
- // TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
- // TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
- $content = sprintf(_m('RT @%1$s %2$s'),
- $author->nickname,
- $original->content);
-
- if (Notice::contentTooLong($content)) {
- $contentlimit = Notice::maxContent();
- $content = mb_substr($content, 0, $contentlimit - 4) . ' ...';
- }
-
- $repeat = Notice::saveNew($profile->id,
- $content,
- 'twitter',
- array('repeat_of' => $original->id,
- 'uri' => $statusUri,
- 'is_local' => Notice::GATEWAY));
- common_log(LOG_INFO, "Saved {$repeat->id} as a repeat of {$original->id}");
- Notice_to_status::saveNew($repeat->id, $status->id);
- return $repeat;
- }
- }
-
- $notice = new Notice();
-
- $notice->profile_id = $profile->id;
- $notice->uri = $statusUri;
- $notice->url = $statusUri;
- $notice->created = strftime(
- '%Y-%m-%d %H:%M:%S',
- strtotime($status->created_at)
- );
-
- $notice->source = 'twitter';
-
- $notice->reply_to = null;
-
- if (!empty($status->in_reply_to_status_id)) {
- common_log(LOG_INFO, "Status {$status->id} is a reply to status {$status->in_reply_to_status_id}");
- $n2s = Notice_to_status::staticGet('status_id', $status->in_reply_to_status_id);
- if (empty($n2s)) {
- common_log(LOG_INFO, "Couldn't find local notice for status {$status->in_reply_to_status_id}");
- } else {
- $reply = Notice::staticGet('id', $n2s->notice_id);
- if (empty($reply)) {
- common_log(LOG_INFO, "Couldn't find local notice for status {$status->in_reply_to_status_id}");
- } else {
- common_log(LOG_INFO, "Found local notice {$reply->id} for status {$status->in_reply_to_status_id}");
- $notice->reply_to = $reply->id;
- $notice->conversation = $reply->conversation;
- }
- }
- }
-
- if (empty($notice->conversation)) {
- $conv = Conversation::create();
- $notice->conversation = $conv->id;
- common_log(LOG_INFO, "No known conversation for status {$status->id} so making a new one {$conv->id}.");
- }
-
- $notice->is_local = Notice::GATEWAY;
-
- $notice->content = html_entity_decode($status->text, ENT_QUOTES, 'UTF-8');
- $notice->rendered = $this->linkify($status);
-
- if (Event::handle('StartNoticeSave', array(&$notice))) {
-
- $id = $notice->insert();
-
- if (!$id) {
- common_log_db_error($notice, 'INSERT', __FILE__);
- common_log(LOG_ERR, $this->name() .
- ' - Problem saving notice.');
- }
-
- Event::handle('EndNoticeSave', array($notice));
- }
-
- Notice_to_status::saveNew($notice->id, $status->id);
-
- $this->saveStatusMentions($notice, $status);
-
- $notice->blowOnInsert();
-
- return $notice;
- }
-
- /**
- * Make an URI for a status.
- *
- * @param object $status status object
- *
- * @return string URI
- */
- function makeStatusURI($username, $id)
- {
- return 'http://twitter.com/'
- . $username
- . '/status/'
- . $id;
- }
-
- /**
- * Look up a Profile by profileurl field. Profile::staticGet() was
- * not working consistently.
- *
- * @param string $nickname local nickname of the Twitter user
- * @param string $profileurl the profile url
- *
- * @return mixed value 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;
- }
-
- /**
- * Check to see if this Twitter status has already been imported
- *
- * @param Profile $profile Twitter user's local profile
- * @param string $statusUri URI of the status on Twitter
- *
- * @return mixed value a matching Notice or null
- */
- function checkDupe($profile, $statusUri)
- {
- $notice = new Notice();
- $notice->uri = $statusUri;
- $notice->profile_id = $profile->id;
- $notice->limit(1);
-
- if ($notice->find()) {
- $notice->fetch();
- return $notice;
- }
-
- 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 = $this->getProfileByUrl($user->screen_name, $profileurl);
-
- if (!empty($profile)) {
- common_debug($this->name() .
- " - Profile for $profile->nickname found.");
-
- // Check to see if the user's Avatar has changed
-
- $this->checkAvatar($user, $profile);
- return $profile;
-
- } else {
- common_debug($this->name() . ' - Adding profile and remote profile ' .
- "for Twitter user: $profileurl.");
-
- $profile = new Profile();
- $profile->query("BEGIN");
-
- $profile->nickname = $user->screen_name;
- $profile->fullname = $user->name;
- $profile->homepage = $user->url;
- $profile->bio = $user->description;
- $profile->location = $user->location;
- $profile->profileurl = $profileurl;
- $profile->created = common_sql_now();
-
- 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__);
- $profile->query("ROLLBACK");
- return false;
- }
-
- // check for remote profile
-
- $remote_pro = Remote_profile::staticGet('uri', $profileurl);
-
- if (empty($remote_pro)) {
- $remote_pro = new Remote_profile();
-
- $remote_pro->id = $id;
- $remote_pro->uri = $profileurl;
- $remote_pro->created = common_sql_now();
-
- 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__);
- $profile->query("ROLLBACK");
- return false;
- }
- }
-
- $profile->query("COMMIT");
-
- $this->saveAvatars($user, $id);
-
- return $profile;
- }
- }
-
- function checkAvatar($twitter_user, $profile)
- {
- global $config;
-
- $path_parts = pathinfo($twitter_user->profile_image_url);
-
- $newname = 'Twitter_' . $twitter_user->id . '_' .
- $path_parts['basename'];
-
- $oldname = $profile->getAvatar(48)->filename;
-
- if ($newname != $oldname) {
- common_debug($this->name() . ' - Avatar for Twitter user ' .
- "$profile->nickname has changed.");
- common_debug($this->name() . " - old: $oldname new: $newname");
-
- $this->updateAvatars($twitter_user, $profile);
- }
-
- if ($this->missingAvatarFile($profile)) {
- common_debug($this->name() . ' - Twitter user ' .
- $profile->nickname .
- ' is missing one or more local avatars.');
- common_debug($this->name() ." - old: $oldname new: $newname");
-
- $this->updateAvatars($twitter_user, $profile);
- }
- }
-
- function updateAvatars($twitter_user, $profile) {
-
- global $config;
-
- $path_parts = pathinfo($twitter_user->profile_image_url);
-
- $img_root = substr($path_parts['basename'], 0, -11);
- $ext = $path_parts['extension'];
- $mediatype = $this->getMediatype($ext);
-
- foreach (array('mini', 'normal', 'bigger') as $size) {
- $url = $path_parts['dirname'] . '/' .
- $img_root . '_' . $size . ".$ext";
- $filename = 'Twitter_' . $twitter_user->id . '_' .
- $img_root . "_$size.$ext";
-
- $this->updateAvatar($profile->id, $size, $mediatype, $filename);
- $this->fetchAvatar($url, $filename);
- }
- }
-
- function missingAvatarFile($profile) {
- foreach (array(24, 48, 73) as $size) {
- $filename = $profile->getAvatar($size)->filename;
- $avatarpath = Avatar::path($filename);
- if (file_exists($avatarpath) == FALSE) {
- return true;
- }
- }
- return false;
- }
-
- function getMediatype($ext)
- {
- $mediatype = null;
-
- switch (strtolower($ext)) {
- case 'jpg':
- $mediatype = 'image/jpg';
- break;
- case 'gif':
- $mediatype = 'image/gif';
- break;
- default:
- $mediatype = 'image/png';
- }
-
- return $mediatype;
- }
-
- function saveAvatars($user, $id)
- {
- global $config;
-
- $path_parts = pathinfo($user->profile_image_url);
- $ext = $path_parts['extension'];
- $end = strlen('_normal' . $ext);
- $img_root = substr($path_parts['basename'], 0, -($end+1));
- $mediatype = $this->getMediatype($ext);
-
- foreach (array('mini', 'normal', 'bigger') as $size) {
- $url = $path_parts['dirname'] . '/' .
- $img_root . '_' . $size . ".$ext";
- $filename = 'Twitter_' . $user->id . '_' .
- $img_root . "_$size.$ext";
-
- if ($this->fetchAvatar($url, $filename)) {
- $this->newAvatar($id, $size, $mediatype, $filename);
- } else {
- common_log(LOG_WARNING, $id() .
- " - Problem fetching Avatar: $url");
- }
- }
- }
-
- function updateAvatar($profile_id, $size, $mediatype, $filename) {
-
- common_debug($this->name() . " - Updating avatar: $size");
-
- $profile = Profile::staticGet($profile_id);
-
- if (empty($profile)) {
- common_debug($this->name() . " - Couldn't get profile: $profile_id!");
- return;
- }
-
- $sizes = array('mini' => 24, 'normal' => 48, 'bigger' => 73);
- $avatar = $profile->getAvatar($sizes[$size]);
-
- // Delete the avatar, if present
- if ($avatar) {
- $avatar->delete();
- }
-
- $this->newAvatar($profile->id, $size, $mediatype, $filename);
- }
-
- function newAvatar($profile_id, $size, $mediatype, $filename)
- {
- global $config;
-
- $avatar = new Avatar();
- $avatar->profile_id = $profile_id;
-
- switch($size) {
- case 'mini':
- $avatar->width = 24;
- $avatar->height = 24;
- break;
- case 'normal':
- $avatar->width = 48;
- $avatar->height = 48;
- break;
- default:
- // Note: Twitter's big avatars are a different size than
- // StatusNet's (StatusNet's = 96)
- $avatar->width = 73;
- $avatar->height = 73;
- }
-
- $avatar->original = 0; // we don't have the original
- $avatar->mediatype = $mediatype;
- $avatar->filename = $filename;
- $avatar->url = Avatar::url($filename);
-
- $avatar->created = common_sql_now();
-
- 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__);
- return null;
- }
-
- common_debug($this->name() .
- " - Saved new $size avatar for $profile_id.");
-
- return $id;
- }
-
- /**
- * Fetch a remote avatar image and save to local storage.
- *
- * @param string $url avatar source URL
- * @param string $filename bare local filename for download
- * @return bool true on success, false on failure
- */
- function fetchAvatar($url, $filename)
- {
- common_debug($this->name() . " - Fetching Twitter avatar: $url");
-
- $request = HTTPClient::start();
- $response = $request->get($url);
- if ($response->isOk()) {
- $avatarfile = Avatar::path($filename);
- $ok = file_put_contents($avatarfile, $response->getBody());
- if (!$ok) {
- common_log(LOG_WARNING, $this->name() .
- " - Couldn't open file $filename");
- return false;
- }
- } else {
- return false;
- }
-
- return true;
- }
-
- const URL = 1;
- const HASHTAG = 2;
- const MENTION = 3;
-
- function linkify($status)
- {
- $text = $status->text;
-
- if (empty($status->entities)) {
- common_log(LOG_WARNING, "No entities data for {$status->id}; trying to fake up links ourselves.");
- $text = common_replace_urls_callback($text, 'common_linkify');
- $text = preg_replace('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/e', "'\\1#'.TwitterStatusFetcher::tagLink('\\2')", $text);
- $text = preg_replace('/(^|\s+)@([a-z0-9A-Z_]{1,64})/e', "'\\1@'.TwitterStatusFetcher::atLink('\\2')", $text);
- return $text;
- }
-
- // Move all the entities into order so we can
- // replace them in reverse order and thus
- // not mess up their indices
-
- $toReplace = array();
-
- if (!empty($status->entities->urls)) {
- foreach ($status->entities->urls as $url) {
- $toReplace[$url->indices[0]] = array(self::URL, $url);
- }
- }
-
- if (!empty($status->entities->hashtags)) {
- foreach ($status->entities->hashtags as $hashtag) {
- $toReplace[$hashtag->indices[0]] = array(self::HASHTAG, $hashtag);
- }
- }
-
- if (!empty($status->entities->user_mentions)) {
- foreach ($status->entities->user_mentions as $mention) {
- $toReplace[$mention->indices[0]] = array(self::MENTION, $mention);
- }
- }
-
- // sort in reverse order by key
-
- krsort($toReplace);
-
- foreach ($toReplace as $part) {
- list($type, $object) = $part;
- switch($type) {
- case self::URL:
- $linkText = $this->makeUrlLink($object);
- break;
- case self::HASHTAG:
- $linkText = $this->makeHashtagLink($object);
- break;
- case self::MENTION:
- $linkText = $this->makeMentionLink($object);
- break;
- default:
- continue;
- }
- $text = mb_substr($text, 0, $object->indices[0]) . $linkText . mb_substr($text, $object->indices[1]);
- }
- return $text;
- }
-
- function makeUrlLink($object)
- {
- return "<a href='{$object->url}' class='extlink'>{$object->url}</a>";
- }
-
- function makeHashtagLink($object)
- {
- return "#" . self::tagLink($object->text);
- }
-
- function makeMentionLink($object)
- {
- return "@".self::atLink($object->screen_name, $object->name);
- }
-
- static function tagLink($tag)
- {
- return "<a href='https://twitter.com/search?q=%23{$tag}' class='hashtag'>{$tag}</a>";
- }
-
- static function atLink($screenName, $fullName=null)
- {
- if (!empty($fullName)) {
- return "<a href='http://twitter.com/{$screenName}' title='{$fullName}'>{$screenName}</a>";
- } else {
- return "<a href='http://twitter.com/{$screenName}'>{$screenName}</a>";
- }
- }
-
- function saveStatusMentions($notice, $status)
- {
- $mentions = array();
-
- if (empty($status->entities) || empty($status->entities->user_mentions)) {
- return;
- }
-
- foreach ($status->entities->user_mentions as $mention) {
- $flink = Foreign_link::getByForeignID($mention->id, TWITTER_SERVICE);
- if (!empty($flink)) {
- $user = User::staticGet('id', $flink->user_id);
- if (!empty($user)) {
- $reply = new Reply();
- $reply->notice_id = $notice->id;
- $reply->profile_id = $user->id;
- common_log(LOG_INFO, __METHOD__ . ": saving reply: notice {$notice->id} to profile {$user->id}");
- $id = $reply->insert();
- }
- }
- }
- }
}
$id = null;
diff --git a/plugins/TwitterBridge/jsonstreamreader.php b/plugins/TwitterBridge/jsonstreamreader.php
new file mode 100644
index 000000000..f6572c9ee
--- /dev/null
+++ b/plugins/TwitterBridge/jsonstreamreader.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * 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 Brion Vibber <brion@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/
+ */
+
+class OAuthData
+{
+ public $consumer_key, $consumer_secret, $token, $token_secret;
+}
+
+/**
+ *
+ */
+abstract class JsonStreamReader
+{
+ const CRLF = "\r\n";
+
+ public $id;
+ protected $socket = null;
+ protected $state = 'init'; // 'init', 'connecting', 'waiting', 'headers', 'active'
+
+ public function __construct()
+ {
+ $this->id = get_class($this) . '.' . substr(md5(mt_rand()), 0, 8);
+ }
+
+ /**
+ * Starts asynchronous connect operation...
+ *
+ * @fixme Can we do the open-socket fully async to? (need write select infrastructure)
+ *
+ * @param string $url
+ */
+ public function connect($url)
+ {
+ common_log(LOG_DEBUG, "$this->id opening connection to $url");
+
+ $scheme = parse_url($url, PHP_URL_SCHEME);
+ if ($scheme == 'http') {
+ $rawScheme = 'tcp';
+ } else if ($scheme == 'https') {
+ $rawScheme = 'ssl';
+ } else {
+ throw new ServerException('Invalid URL scheme for HTTP stream reader');
+ }
+
+ $host = parse_url($url, PHP_URL_HOST);
+ $port = parse_url($url, PHP_URL_PORT);
+ if (!$port) {
+ if ($scheme == 'https') {
+ $port = 443;
+ } else {
+ $port = 80;
+ }
+ }
+
+ $path = parse_url($url, PHP_URL_PATH);
+ $query = parse_url($url, PHP_URL_QUERY);
+ if ($query) {
+ $path .= '?' . $query;
+ }
+
+ $errno = $errstr = null;
+ $timeout = 5;
+ //$flags = STREAM_CLIENT_CONNECT | STREAM_CLIENT_ASYNC_CONNECT;
+ $flags = STREAM_CLIENT_CONNECT;
+ // @fixme add SSL params
+ $this->socket = stream_socket_client("$rawScheme://$host:$port", $errno, $errstr, $timeout, $flags);
+
+ $this->send($this->httpOpen($host, $path));
+
+ stream_set_blocking($this->socket, false);
+ $this->state = 'waiting';
+ }
+
+ /**
+ * Send some fun data off to the server.
+ *
+ * @param string $buffer
+ */
+ function send($buffer)
+ {
+ fwrite($this->socket, $buffer);
+ }
+
+ /**
+ * Read next packet of data from the socket.
+ *
+ * @return string
+ */
+ function read()
+ {
+ $buffer = fread($this->socket, 65536);
+ return $buffer;
+ }
+
+ /**
+ * Build HTTP request headers.
+ *
+ * @param string $host
+ * @param string $path
+ * @return string
+ */
+ protected function httpOpen($host, $path)
+ {
+ $lines = array(
+ "GET $path HTTP/1.1",
+ "Host: $host",
+ "User-Agent: StatusNet/" . STATUSNET_VERSION . " (TwitterBridgePlugin)",
+ "Connection: close",
+ "",
+ ""
+ );
+ return implode(self::CRLF, $lines);
+ }
+
+ /**
+ * Close the current connection, if open.
+ */
+ public function close()
+ {
+ if ($this->isConnected()) {
+ common_log(LOG_DEBUG, "$this->id closing connection.");
+ fclose($this->socket);
+ $this->socket = null;
+ }
+ }
+
+ /**
+ * Are we currently connected?
+ *
+ * @return boolean
+ */
+ public function isConnected()
+ {
+ return $this->socket !== null;
+ }
+
+ /**
+ * Send any sockets we're listening on to the IO manager
+ * to wait for input.
+ *
+ * @return array of resources
+ */
+ public function getSockets()
+ {
+ if ($this->isConnected()) {
+ return array($this->socket);
+ }
+ return array();
+ }
+
+ /**
+ * Take a chunk of input over the horn and go go go! :D
+ *
+ * @param string $buffer
+ */
+ public function handleInput($socket)
+ {
+ if ($this->socket !== $socket) {
+ throw new Exception('Got input from unexpected socket!');
+ }
+
+ try {
+ $buffer = $this->read();
+ $lines = explode(self::CRLF, $buffer);
+ foreach ($lines as $line) {
+ $this->handleLine($line);
+ }
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "$this->id aborting connection due to error: " . $e->getMessage());
+ fclose($this->socket);
+ throw $e;
+ }
+ }
+
+ protected function handleLine($line)
+ {
+ switch ($this->state)
+ {
+ case 'waiting':
+ $this->handleLineWaiting($line);
+ break;
+ case 'headers':
+ $this->handleLineHeaders($line);
+ break;
+ case 'active':
+ $this->handleLineActive($line);
+ break;
+ default:
+ throw new Exception('Invalid state in handleLine: ' . $this->state);
+ }
+ }
+
+ /**
+ *
+ * @param <type> $line
+ */
+ protected function handleLineWaiting($line)
+ {
+ $bits = explode(' ', $line, 3);
+ if (count($bits) != 3) {
+ throw new Exception("Invalid HTTP response line: $line");
+ }
+
+ list($http, $status, $text) = $bits;
+ if (substr($http, 0, 5) != 'HTTP/') {
+ throw new Exception("Invalid HTTP response line chunk '$http': $line");
+ }
+ if ($status != '200') {
+ throw new Exception("Bad HTTP response code $status: $line");
+ }
+ common_log(LOG_DEBUG, "$this->id $line");
+ $this->state = 'headers';
+ }
+
+ protected function handleLineHeaders($line)
+ {
+ if ($line == '') {
+ $this->state = 'active';
+ common_log(LOG_DEBUG, "$this->id connection is active!");
+ } else {
+ common_log(LOG_DEBUG, "$this->id read HTTP header: $line");
+ $this->responseHeaders[] = $line;
+ }
+ }
+
+ protected function handleLineActive($line)
+ {
+ if ($line == "") {
+ // Server sends empty lines as keepalive.
+ return;
+ }
+ $data = json_decode($line);
+ if ($data) {
+ $this->handleJson($data);
+ } else {
+ common_log(LOG_ERR, "$this->id received bogus JSON data: " . var_export($line, true));
+ }
+ }
+
+ abstract protected function handleJson(stdClass $data);
+}
diff --git a/plugins/TwitterBridge/locale/TwitterBridge.pot b/plugins/TwitterBridge/locale/TwitterBridge.pot
index 2fc96dfe2..d508f35e9 100644
--- a/plugins/TwitterBridge/locale/TwitterBridge.pot
+++ b/plugins/TwitterBridge/locale/TwitterBridge.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,11 +16,18 @@ msgstr ""
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr ""
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -37,7 +44,7 @@ msgid ""
msgstr ""
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr ""
@@ -49,11 +56,11 @@ msgstr ""
msgid "Twitter integration options"
msgstr ""
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr ""
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -243,28 +250,24 @@ msgstr ""
msgid "Not a valid invitation code."
msgstr ""
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr ""
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr ""
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr ""
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr ""
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr ""
@@ -354,17 +357,10 @@ msgstr ""
msgid "Twitter account disconnected."
msgstr ""
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr ""
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr ""
-
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr ""
diff --git a/plugins/TwitterBridge/locale/br/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/br/LC_MESSAGES/TwitterBridge.po
new file mode 100644
index 000000000..b88c87037
--- /dev/null
+++ b/plugins/TwitterBridge/locale/br/LC_MESSAGES/TwitterBridge.po
@@ -0,0 +1,371 @@
+# Translation of StatusNet - TwitterBridge to Breton (Brezhoneg)
+# Expored from translatewiki.net
+#
+# Author: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - TwitterBridge\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
+"Language-Team: Breton <http://translatewiki.net/wiki/Portal:br>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: twitter.php:407
+msgid "Your Twitter bridge has been disabled."
+msgstr ""
+
+#: twitter.php:411
+#, 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 maybe revoke %3$s's access?\n"
+"\n"
+"You can re-enable your Twitter bridge by visiting your Twitter settings "
+"page:\n"
+"\n"
+"\t%2$s\n"
+"\n"
+"Regards,\n"
+"%3$s"
+msgstr ""
+
+#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
+msgid "Twitter"
+msgstr "Twitter"
+
+#: TwitterBridgePlugin.php:152
+msgid "Login or register using Twitter"
+msgstr ""
+
+#: TwitterBridgePlugin.php:175
+msgid "Twitter integration options"
+msgstr ""
+
+#: TwitterBridgePlugin.php:303
+msgid "Twitter bridge configuration"
+msgstr ""
+
+#: TwitterBridgePlugin.php:327
+msgid ""
+"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
+"with <a href=\"http://twitter.com/\">Twitter</a>."
+msgstr ""
+
+#: twitteradminpanel.php:62
+msgid "Twitter bridge settings"
+msgstr ""
+
+#: twitteradminpanel.php:145
+msgid "Invalid consumer key. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:151
+msgid "Invalid consumer secret. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:207
+msgid "Twitter application settings"
+msgstr ""
+
+#: twitteradminpanel.php:213
+msgid "Consumer key"
+msgstr ""
+
+#: twitteradminpanel.php:214
+msgid "Consumer key assigned by Twitter"
+msgstr ""
+
+#: twitteradminpanel.php:222
+msgid "Consumer secret"
+msgstr ""
+
+#: twitteradminpanel.php:223
+msgid "Consumer secret assigned by Twitter"
+msgstr ""
+
+#: twitteradminpanel.php:233
+msgid "Note: a global consumer key and secret are set."
+msgstr ""
+
+#: twitteradminpanel.php:240
+msgid "Integration source"
+msgstr ""
+
+#: twitteradminpanel.php:241
+msgid "Name of your Twitter application"
+msgstr ""
+
+#: twitteradminpanel.php:253
+msgid "Options"
+msgstr "Dibarzhioù"
+
+#: twitteradminpanel.php:260
+msgid "Enable \"Sign-in with Twitter\""
+msgstr ""
+
+#: twitteradminpanel.php:262
+msgid "Allow users to login with their Twitter credentials"
+msgstr ""
+
+#: twitteradminpanel.php:269
+msgid "Enable Twitter import"
+msgstr ""
+
+#: twitteradminpanel.php:271
+msgid ""
+"Allow users to import their Twitter friends' timelines. Requires daemons to "
+"be manually configured."
+msgstr ""
+
+#: twitteradminpanel.php:288 twittersettings.php:200
+msgid "Save"
+msgstr "Enrollañ"
+
+#: twitteradminpanel.php:288
+msgid "Save Twitter settings"
+msgstr "Enrollañ arventennoù Twitter"
+
+#: twitterlogin.php:56
+msgid "Already logged in."
+msgstr "Kevreet oc'h dija."
+
+#: twitterlogin.php:64
+msgid "Twitter Login"
+msgstr ""
+
+#: twitterlogin.php:69
+msgid "Login with your Twitter account"
+msgstr ""
+
+#: twitterlogin.php:87
+msgid "Sign in with Twitter"
+msgstr ""
+
+#: twitterauthorization.php:120 twittersettings.php:226
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twitterauthorization.php:126
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: twitterauthorization.php:135
+msgid "Something weird happened."
+msgstr ""
+
+#: twitterauthorization.php:181 twitterauthorization.php:229
+#: twitterauthorization.php:300
+msgid "Couldn't link your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:201
+msgid "Couldn't link your Twitter account: oauth_token mismatch."
+msgstr ""
+
+#: twitterauthorization.php:312
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your Twitter "
+"account to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#: twitterauthorization.php:318
+msgid "Twitter Account Setup"
+msgstr ""
+
+#: twitterauthorization.php:351
+msgid "Connection options"
+msgstr ""
+
+#: twitterauthorization.php:360
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#: twitterauthorization.php:381
+msgid "Create new account"
+msgstr "Krouiñ ur gont nevez"
+
+#: twitterauthorization.php:383
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: twitterauthorization.php:386
+msgid "New nickname"
+msgstr "Lesanv nevez"
+
+#: twitterauthorization.php:388
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: twitterauthorization.php:391
+msgid "Create"
+msgstr "Krouiñ"
+
+#: twitterauthorization.php:396
+msgid "Connect existing account"
+msgstr ""
+
+#: twitterauthorization.php:398
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:401
+msgid "Existing nickname"
+msgstr ""
+
+#: twitterauthorization.php:404
+msgid "Password"
+msgstr "Ger-tremen"
+
+#: twitterauthorization.php:407
+msgid "Connect"
+msgstr "Kevreañ"
+
+#: twitterauthorization.php:423 twitterauthorization.php:432
+msgid "Registration not allowed."
+msgstr ""
+
+#: twitterauthorization.php:439
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: twitterauthorization.php:452
+msgid "Nickname not allowed."
+msgstr ""
+
+#: twitterauthorization.php:457
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: twitterauthorization.php:472
+msgid "Error registering user."
+msgstr ""
+
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
+msgid "Error connecting user to Twitter."
+msgstr ""
+
+#: twitterauthorization.php:503
+msgid "Invalid username or password."
+msgstr ""
+
+#: twittersettings.php:58
+msgid "Twitter settings"
+msgstr "Arventennoù Twitter"
+
+#: twittersettings.php:69
+msgid ""
+"Connect your Twitter account to share your updates with your Twitter friends "
+"and vice-versa."
+msgstr ""
+
+#: twittersettings.php:116
+msgid "Twitter account"
+msgstr "Kont Twitter"
+
+#: twittersettings.php:121
+msgid "Connected Twitter account"
+msgstr ""
+
+#: twittersettings.php:126
+msgid "Disconnect my account from Twitter"
+msgstr ""
+
+#: twittersettings.php:132
+msgid "Disconnecting your Twitter could make it impossible to log in! Please "
+msgstr ""
+
+#: twittersettings.php:136
+msgid "set a password"
+msgstr "Termeniñ ur ger-tremen"
+
+#: twittersettings.php:138
+msgid " first."
+msgstr "da gentañ."
+
+#. TRANS: %1$s is the current website name.
+#: twittersettings.php:142
+#, php-format
+msgid ""
+"Keep your %1$s account but disconnect from Twitter. You can use your %1$s "
+"password to log in."
+msgstr ""
+
+#: twittersettings.php:150
+msgid "Disconnect"
+msgstr "Digevreet"
+
+#: twittersettings.php:157
+msgid "Preferences"
+msgstr "Penndibaboù"
+
+#: twittersettings.php:161
+msgid "Automatically send my notices to Twitter."
+msgstr ""
+
+#: twittersettings.php:168
+msgid "Send local \"@\" replies to Twitter."
+msgstr ""
+
+#: twittersettings.php:175
+msgid "Subscribe to my Twitter friends here."
+msgstr ""
+
+#: twittersettings.php:184
+msgid "Import my friends timeline."
+msgstr ""
+
+#: twittersettings.php:202
+msgid "Add"
+msgstr "Ouzhpennañ"
+
+#: twittersettings.php:236
+msgid "Unexpected form submission."
+msgstr ""
+
+#: twittersettings.php:251
+msgid "No Twitter connection to remove."
+msgstr ""
+
+#: twittersettings.php:259
+msgid "Couldn't remove Twitter user."
+msgstr ""
+
+#: twittersettings.php:263
+msgid "Twitter account disconnected."
+msgstr ""
+
+#: twittersettings.php:283 twittersettings.php:294
+msgid "Couldn't save Twitter preferences."
+msgstr ""
+
+#: twittersettings.php:302
+msgid "Twitter preferences saved."
+msgstr ""
diff --git a/plugins/TwitterBridge/locale/fa/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/fa/LC_MESSAGES/TwitterBridge.po
new file mode 100644
index 000000000..52d44caeb
--- /dev/null
+++ b/plugins/TwitterBridge/locale/fa/LC_MESSAGES/TwitterBridge.po
@@ -0,0 +1,375 @@
+# Translation of StatusNet - TwitterBridge to Persian (فارسی)
+# Expored from translatewiki.net
+#
+# Author: Mjbmr
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - TwitterBridge\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
+"Language-Team: Persian <http://translatewiki.net/wiki/Portal:fa>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fa\n"
+"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: twitter.php:407
+msgid "Your Twitter bridge has been disabled."
+msgstr "پل توییتر شما غیر فعال شده است."
+
+#: twitter.php:411
+#, 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 maybe revoke %3$s's access?\n"
+"\n"
+"You can re-enable your Twitter bridge by visiting your Twitter settings "
+"page:\n"
+"\n"
+"\t%2$s\n"
+"\n"
+"Regards,\n"
+"%3$s"
+msgstr ""
+
+#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
+msgid "Twitter"
+msgstr "توییتر"
+
+#: TwitterBridgePlugin.php:152
+msgid "Login or register using Twitter"
+msgstr "برای استفاده از توییتر، وارد شوید یا ثبت نام کنید"
+
+#: TwitterBridgePlugin.php:175
+msgid "Twitter integration options"
+msgstr "تنظیمات پیوسته توییتر"
+
+#: TwitterBridgePlugin.php:303
+msgid "Twitter bridge configuration"
+msgstr "پیکربندی پل توییتر"
+
+#: TwitterBridgePlugin.php:327
+msgid ""
+"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
+"with <a href=\"http://twitter.com/\">Twitter</a>."
+msgstr ""
+
+#: twitteradminpanel.php:62
+msgid "Twitter bridge settings"
+msgstr "تنظیمات پل توییتر"
+
+#: twitteradminpanel.php:145
+msgid "Invalid consumer key. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:151
+msgid "Invalid consumer secret. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:207
+msgid "Twitter application settings"
+msgstr ""
+
+#: twitteradminpanel.php:213
+msgid "Consumer key"
+msgstr ""
+
+#: twitteradminpanel.php:214
+msgid "Consumer key assigned by Twitter"
+msgstr ""
+
+#: twitteradminpanel.php:222
+msgid "Consumer secret"
+msgstr ""
+
+#: twitteradminpanel.php:223
+msgid "Consumer secret assigned by Twitter"
+msgstr ""
+
+#: twitteradminpanel.php:233
+msgid "Note: a global consumer key and secret are set."
+msgstr ""
+
+#: twitteradminpanel.php:240
+msgid "Integration source"
+msgstr ""
+
+#: twitteradminpanel.php:241
+msgid "Name of your Twitter application"
+msgstr ""
+
+#: twitteradminpanel.php:253
+msgid "Options"
+msgstr "تنظیمات"
+
+#: twitteradminpanel.php:260
+msgid "Enable \"Sign-in with Twitter\""
+msgstr ""
+
+#: twitteradminpanel.php:262
+msgid "Allow users to login with their Twitter credentials"
+msgstr ""
+
+#: twitteradminpanel.php:269
+msgid "Enable Twitter import"
+msgstr ""
+
+#: twitteradminpanel.php:271
+msgid ""
+"Allow users to import their Twitter friends' timelines. Requires daemons to "
+"be manually configured."
+msgstr ""
+
+#: twitteradminpanel.php:288 twittersettings.php:200
+msgid "Save"
+msgstr "ذخیره"
+
+#: twitteradminpanel.php:288
+msgid "Save Twitter settings"
+msgstr "ذخیره تنظیمات توییتر"
+
+#: twitterlogin.php:56
+msgid "Already logged in."
+msgstr "در حال حاضر وارد شده‌اید."
+
+#: twitterlogin.php:64
+msgid "Twitter Login"
+msgstr "ورود به توییتر"
+
+#: twitterlogin.php:69
+msgid "Login with your Twitter account"
+msgstr ""
+
+#: twitterlogin.php:87
+msgid "Sign in with Twitter"
+msgstr "با حساب کاربری توییتر وارد شوید"
+
+#: twitterauthorization.php:120 twittersettings.php:226
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twitterauthorization.php:126
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: twitterauthorization.php:135
+msgid "Something weird happened."
+msgstr ""
+
+#: twitterauthorization.php:181 twitterauthorization.php:229
+#: twitterauthorization.php:300
+msgid "Couldn't link your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:201
+msgid "Couldn't link your Twitter account: oauth_token mismatch."
+msgstr ""
+
+#: twitterauthorization.php:312
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your Twitter "
+"account to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#: twitterauthorization.php:318
+msgid "Twitter Account Setup"
+msgstr "تنظیم حساب کاربری توییتر"
+
+#: twitterauthorization.php:351
+msgid "Connection options"
+msgstr "تنظیمات اتصال"
+
+#: twitterauthorization.php:360
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#: twitterauthorization.php:381
+msgid "Create new account"
+msgstr "ایجاد حساب کاربری جدید"
+
+#: twitterauthorization.php:383
+msgid "Create a new user with this nickname."
+msgstr "ایجاد یک کاربر جدید با این نام مستعار."
+
+#: twitterauthorization.php:386
+msgid "New nickname"
+msgstr "نام مستعار جدید"
+
+#: twitterauthorization.php:388
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: twitterauthorization.php:391
+msgid "Create"
+msgstr "ایجاد"
+
+#: twitterauthorization.php:396
+msgid "Connect existing account"
+msgstr "اتصال به حساب کاربری موجود"
+
+#: twitterauthorization.php:398
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:401
+msgid "Existing nickname"
+msgstr "نام مستعار موجود"
+
+#: twitterauthorization.php:404
+msgid "Password"
+msgstr "رمز عبور"
+
+#: twitterauthorization.php:407
+msgid "Connect"
+msgstr "اتصال"
+
+#: twitterauthorization.php:423 twitterauthorization.php:432
+msgid "Registration not allowed."
+msgstr "اجازهٔ ثبت‌نام داده نشده است."
+
+#: twitterauthorization.php:439
+msgid "Not a valid invitation code."
+msgstr "کد دعوت نامعتبر است."
+
+#: twitterauthorization.php:452
+msgid "Nickname not allowed."
+msgstr "نام مستعار مجاز نیست."
+
+#: twitterauthorization.php:457
+msgid "Nickname already in use. Try another one."
+msgstr "این نام مستعار در حال حاضر مورد استفاده است. یکی دیگر را بیازمایید."
+
+#: twitterauthorization.php:472
+msgid "Error registering user."
+msgstr "خطا در ثبت نام کاربر."
+
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
+msgid "Error connecting user to Twitter."
+msgstr "خطا در اتصال کاربر به توییتر."
+
+#: twitterauthorization.php:503
+msgid "Invalid username or password."
+msgstr "نام کاربری یا رمز عبور اشتباه است."
+
+#: twittersettings.php:58
+msgid "Twitter settings"
+msgstr "تنظیمات توییتر"
+
+#: twittersettings.php:69
+msgid ""
+"Connect your Twitter account to share your updates with your Twitter friends "
+"and vice-versa."
+msgstr ""
+
+#: twittersettings.php:116
+msgid "Twitter account"
+msgstr "حساب کاربری توییتر"
+
+#: twittersettings.php:121
+msgid "Connected Twitter account"
+msgstr "حساب کاربری توییتر متصل شد"
+
+#: twittersettings.php:126
+msgid "Disconnect my account from Twitter"
+msgstr "قطع ارتباط حساب کاربری من از توییتر"
+
+#: twittersettings.php:132
+msgid "Disconnecting your Twitter could make it impossible to log in! Please "
+msgstr ""
+
+#: twittersettings.php:136
+msgid "set a password"
+msgstr "تنظیم رمز عبور"
+
+#: twittersettings.php:138
+msgid " first."
+msgstr " ابتدا."
+
+#. TRANS: %1$s is the current website name.
+#: twittersettings.php:142
+#, php-format
+msgid ""
+"Keep your %1$s account but disconnect from Twitter. You can use your %1$s "
+"password to log in."
+msgstr ""
+
+#: twittersettings.php:150
+msgid "Disconnect"
+msgstr "قطع اتصال"
+
+#: twittersettings.php:157
+msgid "Preferences"
+msgstr "ترجیحات"
+
+#: twittersettings.php:161
+msgid "Automatically send my notices to Twitter."
+msgstr ""
+
+#: twittersettings.php:168
+msgid "Send local \"@\" replies to Twitter."
+msgstr ""
+
+#: twittersettings.php:175
+msgid "Subscribe to my Twitter friends here."
+msgstr ""
+
+#: twittersettings.php:184
+msgid "Import my friends timeline."
+msgstr ""
+
+#: twittersettings.php:202
+msgid "Add"
+msgstr "افزودن"
+
+#: twittersettings.php:236
+msgid "Unexpected form submission."
+msgstr ""
+
+#: twittersettings.php:251
+msgid "No Twitter connection to remove."
+msgstr "هیچ ارتباط توییتری برای حذف وجود ندارد."
+
+#: twittersettings.php:259
+msgid "Couldn't remove Twitter user."
+msgstr "نمی‌توان کاربر توییتر را حذف کرد."
+
+#: twittersettings.php:263
+msgid "Twitter account disconnected."
+msgstr "حساب توییتر قطع شده است."
+
+#: twittersettings.php:283 twittersettings.php:294
+msgid "Couldn't save Twitter preferences."
+msgstr "نمی‌توان ترجیحات توییتر را ذخیره کرد."
+
+#: twittersettings.php:302
+msgid "Twitter preferences saved."
+msgstr "تنظیمات توییتر ذخیره شد."
+
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "نام مستعار باید فقط به صورت حروف کوچک انگلیسی، اعداد و بدون فاصله باشد."
diff --git a/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po
index 988b2577d..e0a05063d 100644
--- a/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/fr/LC_MESSAGES/TwitterBridge.po
@@ -10,23 +10,30 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "Votre passerelle Twitter a été désactivée."
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -55,7 +62,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -67,11 +74,11 @@ msgstr "Se connecter ou s’inscrire via Twitter"
msgid "Twitter integration options"
msgstr "Options d’intégration de Twitter"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Configuration de la passerelle Twitter"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -280,30 +287,24 @@ msgstr "Inscription non autorisée."
msgid "Not a valid invitation code."
msgstr "Le code d’invitation n’est pas valide."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
-"chiffres, sans espaces."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Pseudonyme non autorisé."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "Pseudonyme déjà utilisé. Essayez-en un autre."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Erreur lors de l’inscription de l’utilisateur."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Erreur de connexion de l’utilisateur à Twitter."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Nom d’utilisateur ou mot de passe incorrect."
@@ -399,17 +400,15 @@ msgstr "Impossible de supprimer l’utilisateur Twitter."
msgid "Twitter account disconnected."
msgstr "Compte Twitter déconnecté."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Impossible de sauvegarder les préférences Twitter."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "Préférences Twitter enregistrées."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Les pseudonymes ne peuvent contenir que des lettres minuscules et des "
+#~ "chiffres, sans espaces."
diff --git a/plugins/TwitterBridge/locale/gl/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/gl/LC_MESSAGES/TwitterBridge.po
new file mode 100644
index 000000000..bfb0b2a2b
--- /dev/null
+++ b/plugins/TwitterBridge/locale/gl/LC_MESSAGES/TwitterBridge.po
@@ -0,0 +1,371 @@
+# Translation of StatusNet - TwitterBridge to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - TwitterBridge\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: twitter.php:407
+msgid "Your Twitter bridge has been disabled."
+msgstr ""
+
+#: twitter.php:411
+#, 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 maybe revoke %3$s's access?\n"
+"\n"
+"You can re-enable your Twitter bridge by visiting your Twitter settings "
+"page:\n"
+"\n"
+"\t%2$s\n"
+"\n"
+"Regards,\n"
+"%3$s"
+msgstr ""
+
+#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
+msgid "Twitter"
+msgstr "Twitter"
+
+#: TwitterBridgePlugin.php:152
+msgid "Login or register using Twitter"
+msgstr ""
+
+#: TwitterBridgePlugin.php:175
+msgid "Twitter integration options"
+msgstr ""
+
+#: TwitterBridgePlugin.php:303
+msgid "Twitter bridge configuration"
+msgstr ""
+
+#: TwitterBridgePlugin.php:327
+msgid ""
+"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
+"with <a href=\"http://twitter.com/\">Twitter</a>."
+msgstr ""
+
+#: twitteradminpanel.php:62
+msgid "Twitter bridge settings"
+msgstr ""
+
+#: twitteradminpanel.php:145
+msgid "Invalid consumer key. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:151
+msgid "Invalid consumer secret. Max length is 255 characters."
+msgstr ""
+
+#: twitteradminpanel.php:207
+msgid "Twitter application settings"
+msgstr ""
+
+#: twitteradminpanel.php:213
+msgid "Consumer key"
+msgstr "Clave do consumidor"
+
+#: twitteradminpanel.php:214
+msgid "Consumer key assigned by Twitter"
+msgstr "Clave do consumidor asignada polo Twitter"
+
+#: twitteradminpanel.php:222
+msgid "Consumer secret"
+msgstr "Pregunta secreta do consumidor"
+
+#: twitteradminpanel.php:223
+msgid "Consumer secret assigned by Twitter"
+msgstr "Pregunta secreta do consumidor asignada polo Twitter"
+
+#: twitteradminpanel.php:233
+msgid "Note: a global consumer key and secret are set."
+msgstr ""
+
+#: twitteradminpanel.php:240
+msgid "Integration source"
+msgstr "Fonte de integración"
+
+#: twitteradminpanel.php:241
+msgid "Name of your Twitter application"
+msgstr ""
+
+#: twitteradminpanel.php:253
+msgid "Options"
+msgstr "Opcións"
+
+#: twitteradminpanel.php:260
+msgid "Enable \"Sign-in with Twitter\""
+msgstr ""
+
+#: twitteradminpanel.php:262
+msgid "Allow users to login with their Twitter credentials"
+msgstr ""
+
+#: twitteradminpanel.php:269
+msgid "Enable Twitter import"
+msgstr ""
+
+#: twitteradminpanel.php:271
+msgid ""
+"Allow users to import their Twitter friends' timelines. Requires daemons to "
+"be manually configured."
+msgstr ""
+
+#: twitteradminpanel.php:288 twittersettings.php:200
+msgid "Save"
+msgstr "Gardar"
+
+#: twitteradminpanel.php:288
+msgid "Save Twitter settings"
+msgstr ""
+
+#: twitterlogin.php:56
+msgid "Already logged in."
+msgstr ""
+
+#: twitterlogin.php:64
+msgid "Twitter Login"
+msgstr ""
+
+#: twitterlogin.php:69
+msgid "Login with your Twitter account"
+msgstr ""
+
+#: twitterlogin.php:87
+msgid "Sign in with Twitter"
+msgstr ""
+
+#: twitterauthorization.php:120 twittersettings.php:226
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twitterauthorization.php:126
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: twitterauthorization.php:135
+msgid "Something weird happened."
+msgstr ""
+
+#: twitterauthorization.php:181 twitterauthorization.php:229
+#: twitterauthorization.php:300
+msgid "Couldn't link your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:201
+msgid "Couldn't link your Twitter account: oauth_token mismatch."
+msgstr ""
+
+#: twitterauthorization.php:312
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your Twitter "
+"account to a local account. You can either create a new account, or connect "
+"with your existing account, if you have one."
+msgstr ""
+
+#: twitterauthorization.php:318
+msgid "Twitter Account Setup"
+msgstr ""
+
+#: twitterauthorization.php:351
+msgid "Connection options"
+msgstr ""
+
+#: twitterauthorization.php:360
+#, php-format
+msgid ""
+"My text and files are available under %s except this private data: password, "
+"email address, IM address, and phone number."
+msgstr ""
+
+#: twitterauthorization.php:381
+msgid "Create new account"
+msgstr ""
+
+#: twitterauthorization.php:383
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: twitterauthorization.php:386
+msgid "New nickname"
+msgstr ""
+
+#: twitterauthorization.php:388
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: twitterauthorization.php:391
+msgid "Create"
+msgstr "Crear"
+
+#: twitterauthorization.php:396
+msgid "Connect existing account"
+msgstr ""
+
+#: twitterauthorization.php:398
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Twitter account."
+msgstr ""
+
+#: twitterauthorization.php:401
+msgid "Existing nickname"
+msgstr ""
+
+#: twitterauthorization.php:404
+msgid "Password"
+msgstr "Contrasinal"
+
+#: twitterauthorization.php:407
+msgid "Connect"
+msgstr "Conectar"
+
+#: twitterauthorization.php:423 twitterauthorization.php:432
+msgid "Registration not allowed."
+msgstr ""
+
+#: twitterauthorization.php:439
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: twitterauthorization.php:452
+msgid "Nickname not allowed."
+msgstr ""
+
+#: twitterauthorization.php:457
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: twitterauthorization.php:472
+msgid "Error registering user."
+msgstr ""
+
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
+msgid "Error connecting user to Twitter."
+msgstr ""
+
+#: twitterauthorization.php:503
+msgid "Invalid username or password."
+msgstr ""
+
+#: twittersettings.php:58
+msgid "Twitter settings"
+msgstr "Configuración do Twitter"
+
+#: twittersettings.php:69
+msgid ""
+"Connect your Twitter account to share your updates with your Twitter friends "
+"and vice-versa."
+msgstr ""
+
+#: twittersettings.php:116
+msgid "Twitter account"
+msgstr "Conta do Twitter"
+
+#: twittersettings.php:121
+msgid "Connected Twitter account"
+msgstr ""
+
+#: twittersettings.php:126
+msgid "Disconnect my account from Twitter"
+msgstr ""
+
+#: twittersettings.php:132
+msgid "Disconnecting your Twitter could make it impossible to log in! Please "
+msgstr ""
+
+#: twittersettings.php:136
+msgid "set a password"
+msgstr ""
+
+#: twittersettings.php:138
+msgid " first."
+msgstr " primeiro."
+
+#. TRANS: %1$s is the current website name.
+#: twittersettings.php:142
+#, php-format
+msgid ""
+"Keep your %1$s account but disconnect from Twitter. You can use your %1$s "
+"password to log in."
+msgstr ""
+
+#: twittersettings.php:150
+msgid "Disconnect"
+msgstr "Desconectarse"
+
+#: twittersettings.php:157
+msgid "Preferences"
+msgstr "Preferencias"
+
+#: twittersettings.php:161
+msgid "Automatically send my notices to Twitter."
+msgstr ""
+
+#: twittersettings.php:168
+msgid "Send local \"@\" replies to Twitter."
+msgstr ""
+
+#: twittersettings.php:175
+msgid "Subscribe to my Twitter friends here."
+msgstr ""
+
+#: twittersettings.php:184
+msgid "Import my friends timeline."
+msgstr ""
+
+#: twittersettings.php:202
+msgid "Add"
+msgstr "Engadir"
+
+#: twittersettings.php:236
+msgid "Unexpected form submission."
+msgstr ""
+
+#: twittersettings.php:251
+msgid "No Twitter connection to remove."
+msgstr ""
+
+#: twittersettings.php:259
+msgid "Couldn't remove Twitter user."
+msgstr ""
+
+#: twittersettings.php:263
+msgid "Twitter account disconnected."
+msgstr ""
+
+#: twittersettings.php:283 twittersettings.php:294
+msgid "Couldn't save Twitter preferences."
+msgstr ""
+
+#: twittersettings.php:302
+msgid "Twitter preferences saved."
+msgstr ""
diff --git a/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po
index c655e8e9c..846d54442 100644
--- a/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/ia/LC_MESSAGES/TwitterBridge.po
@@ -9,23 +9,30 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "Tu ponte a Twitter ha essite disactivate."
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -53,7 +60,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -65,11 +72,11 @@ msgstr "Aperir session o crear conto usante Twitter"
msgid "Twitter integration options"
msgstr "Optiones de integration de Twitter"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Configuration del ponte a Twitter"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -271,28 +278,24 @@ msgstr "Creation de conto non permittite."
msgid "Not a valid invitation code."
msgstr "Le codice de invitation es invalide."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Pseudonymo non permittite."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "Pseudonymo ja in uso. Proba un altere."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Error durante le registration del usator."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Error durante le connexion del usator a Twitter."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Nomine de usator o contrasigno invalide."
@@ -388,17 +391,14 @@ msgstr "Non poteva remover le usator de Twitter."
msgid "Twitter account disconnected."
msgstr "Conto de Twitter disconnectite."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Non poteva salveguardar le preferentias de Twitter."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "Preferentias de Twitter salveguardate."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Le pseudonymo pote solmente haber minusculas e numeros, sin spatios."
diff --git a/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po
index 88f3a2eb2..dd81ef8c1 100644
--- a/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/mk/LC_MESSAGES/TwitterBridge.po
@@ -9,23 +9,30 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=2; plural=(n == 1 || n%10 == 1) ? 0 : 1;\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "Вашиот мост до Twitter е оневозможен."
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -53,7 +60,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -65,11 +72,11 @@ msgstr "Најава или регистрација со Twitter"
msgid "Twitter integration options"
msgstr "Нагодувања за обединување со Twitter"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Нагодувања за мостот до Twitter"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -273,29 +280,24 @@ msgstr "Регистрацијата не е дозволена."
msgid "Not a valid invitation code."
msgstr "Ова не е важечки код за покана."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Прекарот мора да се состои само од мали букви и бројки, без празни места."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Прекарот не е дозволен."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "Прекарот е зафатен. Одберете друг."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Грешка при регистрирање на корисникот."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Грешка при поврзувањето на корисникот со Twitter."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Неважечко корисничко име или лозинка."
@@ -391,17 +393,14 @@ msgstr "Не можев да го отстранам корисникот на T
msgid "Twitter account disconnected."
msgstr "Врската со сметката на Twitter е прекината."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Не можев да ги зачувам нагодувањата за Twitter."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "Нагодувањата за Twitter се зачувани."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Прекарот мора да се состои само од мали букви и бројки, без празни места."
diff --git a/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po
index 8e152f405..00ab91a30 100644
--- a/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/nl/LC_MESSAGES/TwitterBridge.po
@@ -9,23 +9,30 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "Uw koppeling naar Twitter is uitgeschakeld."
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -55,7 +62,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -67,11 +74,11 @@ msgstr "Aanmelden of registreren via Twitter"
msgid "Twitter integration options"
msgstr "Opties voor Twitterintegratie"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Instellingen voor Twitterkoppeling"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -205,7 +212,7 @@ msgid ""
"account to a local account. You can either create a new account, or connect "
"with your existing account, if you have one."
msgstr ""
-"De is de eerste keer dat u aanmeldt bij %s en dan moeten we uw "
+"Dit is de eerste keer dat u aanmeldt bij %s en dan moeten we uw "
"Twittergebruiker koppelen met uw lokale gebruiker. U kunt een nieuwe "
"gebruiker aanmaken of koppelen met een bestaande gebruiker als u die al hebt."
@@ -232,7 +239,7 @@ msgstr "Nieuwe gebruiker aanmaken"
#: twitterauthorization.php:383
msgid "Create a new user with this nickname."
-msgstr "Nieuwe gebruiker met deze naam aanmaken."
+msgstr "Nieuwe gebruiker aanmaken met deze gebruikersnaam."
#: twitterauthorization.php:386
msgid "New nickname"
@@ -278,31 +285,25 @@ msgstr "Registratie is niet toegestaan."
msgid "Not a valid invitation code."
msgstr "De uitnodigingscode is ongeldig."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
-"zijn niet toegestaan."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Gebruikersnaam niet toegestaan."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr ""
"De opgegeven gebruikersnaam is al in gebruik. Kies een andere gebruikersnaam."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Fout bij het registreren van de gebruiker."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Fout bij het verbinden van de gebruiker met Twitter."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Ongeldige gebruikersnaam of wachtwoord."
@@ -352,7 +353,7 @@ msgid ""
"password to log in."
msgstr ""
"Uw gebruiker bij %1$s behouden maar deze loskoppelen van Twitter. U kunt uw "
-"wachtwoord va %1$s gebruiken om aan te melden."
+"wachtwoord van %1$s gebruiken om aan te melden."
#: twittersettings.php:150
msgid "Disconnect"
@@ -398,17 +399,15 @@ msgstr "Het was niet mogelijk de Twittergebruiker te verwijderen."
msgid "Twitter account disconnected."
msgstr "De Twittergebruiker is ontkoppeld."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Het was niet mogelijk de Twittervoorkeuren op te slaan."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "De Twitterinstellingen zijn opgeslagen."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "De gebruikersnaam mag alleen kleine letters en cijfers bevatten. Spaties "
+#~ "zijn niet toegestaan."
diff --git a/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po
index 76e7e8ecb..9e84e8fc6 100644
--- a/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/tr/LC_MESSAGES/TwitterBridge.po
@@ -9,23 +9,30 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: Turkish <http://translatewiki.net/wiki/Portal:tr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr ""
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr ""
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -42,7 +49,7 @@ msgid ""
msgstr ""
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -54,11 +61,11 @@ msgstr ""
msgid "Twitter integration options"
msgstr "Twitter entegrasyon seçenekleri"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Twitter köprü yapılandırması"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -257,30 +264,24 @@ msgstr "Kayıt yapılmasına izin verilmiyor."
msgid "Not a valid invitation code."
msgstr "Geçerli bir davet kodu değil."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Kullanıcı adı sadece küçük harfler ve rakamlardan oluşabilir, boşluk "
-"kullanılamaz."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Bu kullanıcı adına izin verilmiyor."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "Kullanıcı adı halihazırda kullanılıyor. Başka bir tane deneyin."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Kullanıcı kayıt hatası."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Twitter'a kullanıcı bağlama hatası."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Geçersiz kullanıcı adı veya parola."
@@ -372,17 +373,15 @@ msgstr "Twitter kullanıcısı silinemedi."
msgid "Twitter account disconnected."
msgstr "Twitter hesabı bağlantısı kesildi."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Twitter tercihleri kaydedilemedi."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "Twitter tercihleriniz kaydedildi."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr ""
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Kullanıcı adı sadece küçük harfler ve rakamlardan oluşabilir, boşluk "
+#~ "kullanılamaz."
diff --git a/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po
index 2ee15e69b..03d4cab58 100644
--- a/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/uk/LC_MESSAGES/TwitterBridge.po
@@ -9,24 +9,31 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:52+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:40+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\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"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "Ваш місток до Twitter було відключено."
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -55,7 +62,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -67,11 +74,11 @@ msgstr "Увійти або зареєструватись з Twitter"
msgid "Twitter integration options"
msgstr "Параметри інтеграції з Twitter"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Налаштування містка з Twitter"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -275,30 +282,24 @@ msgstr "Реєстрацію не дозволено."
msgid "Not a valid invitation code."
msgstr "Це не дійсний код запрошення."
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr ""
-"Ім’я користувача повинно складатись з літер нижнього регістру і цифр, ніяких "
-"інтервалів."
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "Нікнейм не допускається."
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "Цей нікнейм вже використовується. Спробуйте інший."
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "Помилка при реєстрації користувача."
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "Помилка при підключенні користувача до Twitter."
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "Недійсне ім’я або пароль."
@@ -394,17 +395,15 @@ msgstr "Не вдається видалити користувача Twitter."
msgid "Twitter account disconnected."
msgstr "Акаунт Twitter від’єднано."
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "Не можу зберегти налаштування Twitter."
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "Налаштування Twitter збережено."
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr ""
+#~ "Ім’я користувача повинно складатись з літер нижнього регістру і цифр, "
+#~ "ніяких інтервалів."
diff --git a/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po b/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po
index 54804a728..2e311d4bf 100644
--- a/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po
+++ b/plugins/TwitterBridge/locale/zh_CN/LC_MESSAGES/TwitterBridge.po
@@ -9,24 +9,31 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - TwitterBridge\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:53+0000\n"
+"POT-Creation-Date: 2010-11-30 20:16+0000\n"
+"PO-Revision-Date: 2010-11-30 20:20:41+0000\n"
"Language-Team: Simplified Chinese <http://translatewiki.net/wiki/Portal:zh-"
"hans>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:06+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-30 17:54:30+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77503); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: #out-statusnet-plugin-twitterbridge\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-#: twitter.php:349
+#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+#: twitterimport.php:114
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: twitter.php:407
msgid "Your Twitter bridge has been disabled."
msgstr "你的 Twitter bridge 已被禁用。"
-#: twitter.php:353
+#: twitter.php:411
#, php-format
msgid ""
"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
@@ -52,7 +59,7 @@ msgstr ""
"%3$s"
#: TwitterBridgePlugin.php:151 TwitterBridgePlugin.php:174
-#: TwitterBridgePlugin.php:291 twitteradminpanel.php:52
+#: TwitterBridgePlugin.php:302 twitteradminpanel.php:52
msgid "Twitter"
msgstr "Twitter"
@@ -64,11 +71,11 @@ msgstr "使用 Twitter 登录或注册"
msgid "Twitter integration options"
msgstr "Twitter 整合选项"
-#: TwitterBridgePlugin.php:292
+#: TwitterBridgePlugin.php:303
msgid "Twitter bridge configuration"
msgstr "Twitter bridge 设置"
-#: TwitterBridgePlugin.php:316
+#: TwitterBridgePlugin.php:327
msgid ""
"The Twitter \"bridge\" plugin allows integration of a StatusNet instance "
"with <a href=\"http://twitter.com/\">Twitter</a>."
@@ -264,28 +271,24 @@ msgstr "不允许注册。"
msgid "Not a valid invitation code."
msgstr "无效的邀请码。"
-#: twitterauthorization.php:449
-msgid "Nickname must have only lowercase letters and numbers and no spaces."
-msgstr "昵称只能使用小写字母和数字且不能使用空格。"
-
-#: twitterauthorization.php:454
+#: twitterauthorization.php:452
msgid "Nickname not allowed."
msgstr "昵称不被允许。"
-#: twitterauthorization.php:459
+#: twitterauthorization.php:457
msgid "Nickname already in use. Try another one."
msgstr "昵称已被使用,换一个吧。"
-#: twitterauthorization.php:474
+#: twitterauthorization.php:472
msgid "Error registering user."
msgstr "注册用户出错。"
-#: twitterauthorization.php:485 twitterauthorization.php:523
-#: twitterauthorization.php:543
+#: twitterauthorization.php:483 twitterauthorization.php:521
+#: twitterauthorization.php:541
msgid "Error connecting user to Twitter."
msgstr "关联用户到 Twitter 出错。"
-#: twitterauthorization.php:505
+#: twitterauthorization.php:503
msgid "Invalid username or password."
msgstr "用户名或密码不正确。"
@@ -376,17 +379,13 @@ msgstr "无法删除 Twitter 用户。"
msgid "Twitter account disconnected."
msgstr "已取消 Twitter 帐号关联。"
-#: twittersettings.php:283 twittersettings.php:293
+#: twittersettings.php:283 twittersettings.php:294
msgid "Couldn't save Twitter preferences."
msgstr "无法保存 Twitter 参数设置。"
-#: twittersettings.php:297
+#: twittersettings.php:302
msgid "Twitter preferences saved."
msgstr "已保存 Twitter 参数设置。"
-#. TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
-#. TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
-#: daemons/twitterstatusfetcher.php:264
-#, php-format
-msgid "RT @%1$s %2$s"
-msgstr "RT @%1$s %2$s"
+#~ msgid "Nickname must have only lowercase letters and numbers and no spaces."
+#~ msgstr "昵称只能使用小写字母和数字且不能使用空格。"
diff --git a/plugins/TwitterBridge/scripts/fakestream.php b/plugins/TwitterBridge/scripts/fakestream.php
new file mode 100644
index 000000000..369688816
--- /dev/null
+++ b/plugins/TwitterBridge/scripts/fakestream.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * 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 Brion Vibber <brion@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/
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+
+$shortoptions = 'n:';
+$longoptions = array('nick=','import','all');
+
+$helptext = <<<ENDOFHELP
+USAGE: fakestream.php -n <username>
+
+ -n --nick=<username> Local user whose Twitter timeline to watch
+ --import Experimental: run incoming messages through import
+ --all Experimental: run multiuser; requires nick be the app owner
+
+Attempts a User Stream connection to Twitter as the given user, dumping
+data as it comes.
+
+ENDOFHELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (have_option('n')) {
+ $nickname = get_option_value('n');
+} else if (have_option('nick')) {
+ $nickname = get_option_value('nickname');
+} else if (have_option('all')) {
+ $nickname = null;
+} else {
+ show_help($helptext);
+ exit(0);
+}
+
+/**
+ *
+ * @param User $user
+ * @return TwitterOAuthClient
+ */
+function twitterAuthForUser(User $user)
+{
+ $flink = Foreign_link::getByUserID($user->id,
+ TWITTER_SERVICE);
+ if (!$flink) {
+ throw new ServerException("No Twitter config for this user.");
+ }
+
+ $token = TwitterOAuthClient::unpackToken($flink->credentials);
+ if (!$token) {
+ throw new ServerException("No Twitter OAuth credentials for this user.");
+ }
+
+ return new TwitterOAuthClient($token->key, $token->secret);
+}
+
+/**
+ * Emulate the line-by-line output...
+ *
+ * @param Foreign_link $flink
+ * @param mixed $data
+ */
+function dumpMessage($flink, $data)
+{
+ $msg = prepMessage($flink, $data);
+ print json_encode($msg) . "\r\n";
+}
+
+function prepMessage($flink, $data)
+{
+ $msg->for_user = $flink->foreign_id;
+ $msg->message = $data;
+ return $msg;
+}
+
+if (have_option('all')) {
+ $users = array();
+
+ $flink = new Foreign_link();
+ $flink->service = TWITTER_SERVICE;
+ $flink->find();
+
+ while ($flink->fetch()) {
+ if (($flink->noticesync & FOREIGN_NOTICE_RECV) ==
+ FOREIGN_NOTICE_RECV) {
+ $users[] = $flink->user_id;
+ }
+ }
+} else {
+ $user = User::staticGet('nickname', $nickname);
+ $users = array($user->id);
+}
+
+$output = array();
+foreach ($users as $id) {
+ $user = User::staticGet('id', $id);
+ if (!$user) {
+ throw new Exception("No user for id $id");
+ }
+ $auth = twitterAuthForUser($user);
+ $flink = Foreign_link::getByUserID($user->id,
+ TWITTER_SERVICE);
+
+ $friends->friends = $auth->friendsIds();
+ dumpMessage($flink, $friends);
+
+ $timeline = $auth->statusesHomeTimeline();
+ foreach ($timeline as $status) {
+ $output[] = prepMessage($flink, $status);
+ }
+}
+
+usort($output, function($a, $b) {
+ if ($a->message->id < $b->message->id) {
+ return -1;
+ } else if ($a->message->id == $b->message->id) {
+ return 0;
+ } else {
+ return 1;
+ }
+});
+
+foreach ($output as $msg) {
+ print json_encode($msg) . "\r\n";
+}
diff --git a/plugins/TwitterBridge/scripts/streamtest.php b/plugins/TwitterBridge/scripts/streamtest.php
new file mode 100644
index 000000000..aad15fdea
--- /dev/null
+++ b/plugins/TwitterBridge/scripts/streamtest.php
@@ -0,0 +1,244 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * 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 Brion Vibber <brion@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/
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+
+$shortoptions = 'n:';
+$longoptions = array('nick=','import','all','apiroot=');
+
+$helptext = <<<ENDOFHELP
+USAGE: streamtest.php -n <username>
+
+ -n --nick=<username> Local user whose Twitter timeline to watch
+ --import Experimental: run incoming messages through import
+ --all Experimental: run multiuser; requires nick be the app owner
+ --apiroot=<url> Provide alternate streaming API root URL
+
+Attempts a User Stream connection to Twitter as the given user, dumping
+data as it comes.
+
+ENDOFHELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+require_once dirname(dirname(__FILE__)) . '/jsonstreamreader.php';
+require_once dirname(dirname(__FILE__)) . '/twitterstreamreader.php';
+
+if (have_option('n')) {
+ $nickname = get_option_value('n');
+} else if (have_option('nick')) {
+ $nickname = get_option_value('nickname');
+} else {
+ show_help($helptext);
+ exit(0);
+}
+
+/**
+ *
+ * @param User $user
+ * @return TwitterOAuthClient
+ */
+function twitterAuthForUser(User $user)
+{
+ $flink = Foreign_link::getByUserID($user->id,
+ TWITTER_SERVICE);
+ if (!$flink) {
+ throw new ServerException("No Twitter config for this user.");
+ }
+
+ $token = TwitterOAuthClient::unpackToken($flink->credentials);
+ if (!$token) {
+ throw new ServerException("No Twitter OAuth credentials for this user.");
+ }
+
+ return new TwitterOAuthClient($token->key, $token->secret);
+}
+
+function homeStreamForUser(User $user)
+{
+ $auth = twitterAuthForUser($user);
+ return new TwitterUserStream($auth);
+}
+
+function siteStreamForOwner(User $user)
+{
+ // The user we auth as must be the owner of the application.
+ $auth = twitterAuthForUser($user);
+
+ if (have_option('apiroot')) {
+ $stream = new TwitterSiteStream($auth, get_option_value('apiroot'));
+ } else {
+ $stream = new TwitterSiteStream($auth);
+ }
+
+ // Pull Twitter user IDs for all users we want to pull data for
+ $userIds = array();
+
+ $flink = new Foreign_link();
+ $flink->service = TWITTER_SERVICE;
+ $flink->find();
+
+ while ($flink->fetch()) {
+ if (($flink->noticesync & FOREIGN_NOTICE_RECV) ==
+ FOREIGN_NOTICE_RECV) {
+ $userIds[] = $flink->foreign_id;
+ }
+ }
+
+ $stream->followUsers($userIds);
+ return $stream;
+}
+
+
+$user = User::staticGet('nickname', $nickname);
+global $myuser;
+$myuser = $user;
+
+if (have_option('all')) {
+ $stream = siteStreamForOwner($user);
+} else {
+ $stream = homeStreamForUser($user);
+}
+
+
+$stream->hookEvent('raw', function($data, $context) {
+ common_log(LOG_INFO, json_encode($data) . ' for ' . json_encode($context));
+});
+$stream->hookEvent('friends', function($data, $context) {
+ printf("Friend list: %s\n", implode(', ', $data->friends));
+});
+$stream->hookEvent('favorite', function($data, $context) {
+ printf("%s favorited %s's notice: %s\n",
+ $data->source->screen_name,
+ $data->target->screen_name,
+ $data->target_object->text);
+});
+$stream->hookEvent('unfavorite', function($data, $context) {
+ printf("%s unfavorited %s's notice: %s\n",
+ $data->source->screen_name,
+ $data->target->screen_name,
+ $data->target_object->text);
+});
+$stream->hookEvent('follow', function($data, $context) {
+ printf("%s friended %s\n",
+ $data->source->screen_name,
+ $data->target->screen_name);
+});
+$stream->hookEvent('unfollow', function($data, $context) {
+ printf("%s unfriended %s\n",
+ $data->source->screen_name,
+ $data->target->screen_name);
+});
+$stream->hookEvent('delete', function($data, $context) {
+ printf("Deleted status notification: %s\n",
+ $data->status->id);
+});
+$stream->hookEvent('scrub_geo', function($data, $context) {
+ printf("Req to scrub geo data for user id %s up to status ID %s\n",
+ $data->user_id,
+ $data->up_to_status_id);
+});
+$stream->hookEvent('status', function($data, $context) {
+ printf("Received status update from %s: %s\n",
+ $data->user->screen_name,
+ $data->text);
+
+ if (have_option('import')) {
+ $importer = new TwitterImport();
+ printf("\timporting...");
+ $notice = $importer->importStatus($data);
+ if ($notice) {
+ global $myuser;
+ Inbox::insertNotice($myuser->id, $notice->id);
+ printf(" %s\n", $notice->id);
+ } else {
+ printf(" FAIL\n");
+ }
+ }
+});
+$stream->hookEvent('direct_message', function($data) {
+ printf("Direct message from %s to %s: %s\n",
+ $data->sender->screen_name,
+ $data->recipient->screen_name,
+ $data->text);
+});
+
+class TwitterManager extends IoManager
+{
+ function __construct(TwitterStreamReader $stream)
+ {
+ $this->stream = $stream;
+ }
+
+ function getSockets()
+ {
+ return $this->stream->getSockets();
+ }
+
+ function handleInput($data)
+ {
+ $this->stream->handleInput($data);
+ return true;
+ }
+
+ function start()
+ {
+ $this->stream->connect();
+ return true;
+ }
+
+ function finish()
+ {
+ $this->stream->close();
+ return true;
+ }
+
+ public static function get()
+ {
+ throw new Exception('not a singleton');
+ }
+}
+
+class TwitterStreamMaster extends IoMaster
+{
+ function __construct($id, $ioManager)
+ {
+ parent::__construct($id);
+ $this->ioManager = $ioManager;
+ }
+
+ /**
+ * Initialize IoManagers which are appropriate to this instance.
+ */
+ function initManagers()
+ {
+ $this->instantiate($this->ioManager);
+ }
+}
+
+$master = new TwitterStreamMaster('TwitterStream', new TwitterManager($stream));
+$master->init();
+$master->service();
diff --git a/plugins/TwitterBridge/tweetctlqueuehandler.php b/plugins/TwitterBridge/tweetctlqueuehandler.php
new file mode 100644
index 000000000..4c8bef463
--- /dev/null
+++ b/plugins/TwitterBridge/tweetctlqueuehandler.php
@@ -0,0 +1,59 @@
+<?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); }
+
+require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
+
+/**
+ * Queue handler to deal with incoming Twitter status updates, as retrieved by
+ * TwitterDaemon (twitterdaemon.php).
+ *
+ * The queue handler passes the status through TwitterImporter for import into the
+ * local database (if necessary), then adds the imported notice to the local inbox
+ * of the attached Twitter user.
+ *
+ * Warning: the way we do inbox distribution manually means that realtime, XMPP, etc
+ * don't work on Twitter-borne messages. When TwitterImporter is changed to handle
+ * that correctly, we'll only need to do this once...?
+ */
+class TweetCtlQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'tweetctl';
+ }
+
+ function handle($data)
+ {
+ // A user has activated or deactivated their Twitter bridge
+ // import status.
+ $action = $data['action'];
+ $userId = $data['for_user'];
+
+ $tm = TwitterManager::get();
+ if ($action == 'start') {
+ $tm->startTwitterUser($userId);
+ } else if ($action == 'stop') {
+ $tm->stopTwitterUser($userId);
+ }
+
+ return true;
+ }
+}
diff --git a/plugins/TwitterBridge/tweetinqueuehandler.php b/plugins/TwitterBridge/tweetinqueuehandler.php
new file mode 100644
index 000000000..ff6b2cc86
--- /dev/null
+++ b/plugins/TwitterBridge/tweetinqueuehandler.php
@@ -0,0 +1,63 @@
+<?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); }
+
+require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
+
+/**
+ * Queue handler to deal with incoming Twitter status updates, as retrieved by
+ * TwitterDaemon (twitterdaemon.php).
+ *
+ * The queue handler passes the status through TwitterImporter for import into the
+ * local database (if necessary), then adds the imported notice to the local inbox
+ * of the attached Twitter user.
+ *
+ * Warning: the way we do inbox distribution manually means that realtime, XMPP, etc
+ * don't work on Twitter-borne messages. When TwitterImporter is changed to handle
+ * that correctly, we'll only need to do this once...?
+ */
+class TweetInQueueHandler extends QueueHandler
+{
+ function transport()
+ {
+ return 'tweetin';
+ }
+
+ function handle($data)
+ {
+ // JSON object with Twitter data
+ $status = $data['status'];
+
+ // Twitter user ID this incoming data belongs to.
+ $receiver = $data['for_user'];
+
+ $importer = new TwitterImport();
+ $notice = $importer->importStatus($status);
+ if ($notice) {
+ $flink = Foreign_link::getByForeignID(TWITTER_SERVICE, $receiver);
+ if ($flink) {
+ // @fixme this should go through more regular channels?
+ Inbox::insertNotice($flink->user_id, $notice->id);
+ }
+ }
+
+ return true;
+ }
+}
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php
index b34488069..e8d11f3b6 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -129,6 +129,34 @@ function is_twitter_notice($id)
}
/**
+ * Pull the formatted status ID number from a Twitter status object
+ * returned via JSON from Twitter API.
+ *
+ * Encapsulates checking for the id_str attribute, which is required
+ * to read 64-bit "Snowflake" ID numbers on a 32-bit system -- the
+ * integer id attribute gets corrupted into a double-precision float,
+ * losing a few digits of precision.
+ *
+ * Warning: avoid performing arithmetic or direct comparisons with
+ * this number, as it may get coerced back to a double on 32-bit.
+ *
+ * @param object $status
+ * @param string $field base field name if not 'id'
+ * @return mixed id number as int or string
+ */
+function twitter_id($status, $field='id')
+{
+ $field_str = "{$field}_str";
+ if (isset($status->$field_str)) {
+ // String version of the id -- required on 32-bit systems
+ // since the 64-bit numbers get corrupted as ints.
+ return $status->$field_str;
+ } else {
+ return $status->$field;
+ }
+}
+
+/**
* Check if we need to broadcast a notice over the Twitter bridge, and
* do so if necessary. Will determine whether to do a straight post or
* a repeat/retweet
@@ -148,7 +176,7 @@ function broadcast_twitter($notice)
if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) {
$retweet = retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of));
if (is_object($retweet)) {
- Notice_to_status::saveNew($notice->id, $retweet->id);
+ Notice_to_status::saveNew($notice->id, twitter_id($retweet));
return true;
} else {
// Our error processing will have decided if we need to requeue
@@ -242,7 +270,7 @@ function broadcast_oauth($notice, $flink) {
try {
$status = $client->statusesUpdate($statustxt, $params);
if (!empty($status)) {
- Notice_to_status::saveNew($notice->id, $status->id);
+ Notice_to_status::saveNew($notice->id, twitter_id($status));
}
} catch (OAuthClientException $e) {
return process_error($e, $flink, $notice);
diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php
index 931a03723..bbe41bd43 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -441,12 +441,10 @@ class TwitterauthorizationAction extends Action
}
}
- $nickname = $this->trimmed('newname');
-
- if (!Validate::string($nickname, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
- $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
+ try {
+ $nickname = Nickname::normalize($this->trimmed('newname'));
+ } catch (NicknameException $e) {
+ $this->showForm($e->getMessage());
return;
}
@@ -619,9 +617,7 @@ class TwitterauthorizationAction extends Action
function isNewNickname($str)
{
- if (!Validate::string($str, array('min_length' => 1,
- 'max_length' => 64,
- 'format' => NICKNAME_FMT))) {
+ if (!Nickname::isValid($str)) {
return false;
}
if (!User::allowed_nickname($str)) {
diff --git a/plugins/TwitterBridge/twitterimport.php b/plugins/TwitterBridge/twitterimport.php
new file mode 100644
index 000000000..143543d8e
--- /dev/null
+++ b/plugins/TwitterBridge/twitterimport.php
@@ -0,0 +1,673 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @author Julien C <chaumond@gmail.com>
+ * @author 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);
+}
+
+require_once INSTALLDIR . '/plugins/TwitterBridge/twitter.php';
+
+/**
+ * Encapsulation of the Twitter status -> notice incoming bridge import.
+ * Is used by both the polling twitterstatusfetcher.php daemon, and the
+ * in-progress streaming import.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @author Julien C <chaumond@gmail.com>
+ * @author Brion Vibber <brion@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/
+ * @link http://twitter.com/
+ */
+class TwitterImport
+{
+ public function importStatus($status)
+ {
+ // Hacktastic: filter out stuff coming from this StatusNet
+ $source = mb_strtolower(common_config('integration', 'source'));
+
+ if (preg_match("/$source/", mb_strtolower($status->source))) {
+ common_debug($this->name() . ' - Skipping import of status ' .
+ twitter_id($status) . ' with source ' . $source);
+ return null;
+ }
+
+ // Don't save it if the user is protected
+ // FIXME: save it but treat it as private
+ if ($status->user->protected) {
+ return null;
+ }
+
+ $notice = $this->saveStatus($status);
+
+ return $notice;
+ }
+
+ function name()
+ {
+ return get_class($this);
+ }
+
+ function saveStatus($status)
+ {
+ $profile = $this->ensureProfile($status->user);
+
+ if (empty($profile)) {
+ common_log(LOG_ERR, $this->name() .
+ ' - Problem saving notice. No associated Profile.');
+ return null;
+ }
+
+ $statusId = twitter_id($status);
+ $statusUri = $this->makeStatusURI($status->user->screen_name, $statusId);
+
+ // check to see if we've already imported the status
+ $n2s = Notice_to_status::staticGet('status_id', $statusId);
+
+ if (!empty($n2s)) {
+ common_log(
+ LOG_INFO,
+ $this->name() .
+ " - Ignoring duplicate import: {$statusId}"
+ );
+ return Notice::staticGet('id', $n2s->notice_id);
+ }
+
+ // If it's a retweet, save it as a repeat!
+ if (!empty($status->retweeted_status)) {
+ common_log(LOG_INFO, "Status {$statusId} is a retweet of " . twitter_id($status->retweeted_status) . ".");
+ $original = $this->saveStatus($status->retweeted_status);
+ if (empty($original)) {
+ return null;
+ } else {
+ $author = $original->getProfile();
+ // TRANS: Message used to repeat a notice. RT is the abbreviation of 'retweet'.
+ // TRANS: %1$s is the repeated user's name, %2$s is the repeated notice.
+ $content = sprintf(_m('RT @%1$s %2$s'),
+ $author->nickname,
+ $original->content);
+
+ if (Notice::contentTooLong($content)) {
+ $contentlimit = Notice::maxContent();
+ $content = mb_substr($content, 0, $contentlimit - 4) . ' ...';
+ }
+
+ $repeat = Notice::saveNew($profile->id,
+ $content,
+ 'twitter',
+ array('repeat_of' => $original->id,
+ 'uri' => $statusUri,
+ 'is_local' => Notice::GATEWAY));
+ common_log(LOG_INFO, "Saved {$repeat->id} as a repeat of {$original->id}");
+ Notice_to_status::saveNew($repeat->id, $statusId);
+ return $repeat;
+ }
+ }
+
+ $notice = new Notice();
+
+ $notice->profile_id = $profile->id;
+ $notice->uri = $statusUri;
+ $notice->url = $statusUri;
+ $notice->created = strftime(
+ '%Y-%m-%d %H:%M:%S',
+ strtotime($status->created_at)
+ );
+
+ $notice->source = 'twitter';
+
+ $notice->reply_to = null;
+
+ $replyTo = twitter_id($status, 'in_reply_to_status_id');
+ if (!empty($replyTo)) {
+ common_log(LOG_INFO, "Status {$statusId} is a reply to status {$replyTo}");
+ $n2s = Notice_to_status::staticGet('status_id', $replyTo);
+ if (empty($n2s)) {
+ common_log(LOG_INFO, "Couldn't find local notice for status {$replyTo}");
+ } else {
+ $reply = Notice::staticGet('id', $n2s->notice_id);
+ if (empty($reply)) {
+ common_log(LOG_INFO, "Couldn't find local notice for status {$replyTo}");
+ } else {
+ common_log(LOG_INFO, "Found local notice {$reply->id} for status {$replyTo}");
+ $notice->reply_to = $reply->id;
+ $notice->conversation = $reply->conversation;
+ }
+ }
+ }
+
+ if (empty($notice->conversation)) {
+ $conv = Conversation::create();
+ $notice->conversation = $conv->id;
+ common_log(LOG_INFO, "No known conversation for status {$statusId} so making a new one {$conv->id}.");
+ }
+
+ $notice->is_local = Notice::GATEWAY;
+
+ $notice->content = html_entity_decode($status->text, ENT_QUOTES, 'UTF-8');
+ $notice->rendered = $this->linkify($status);
+
+ if (Event::handle('StartNoticeSave', array(&$notice))) {
+
+ $id = $notice->insert();
+
+ if (!$id) {
+ common_log_db_error($notice, 'INSERT', __FILE__);
+ common_log(LOG_ERR, $this->name() .
+ ' - Problem saving notice.');
+ }
+
+ Event::handle('EndNoticeSave', array($notice));
+ }
+
+ Notice_to_status::saveNew($notice->id, $statusId);
+
+ $this->saveStatusMentions($notice, $status);
+ $this->saveStatusAttachments($notice, $status);
+
+ $notice->blowOnInsert();
+
+ return $notice;
+ }
+
+ /**
+ * Make an URI for a status.
+ *
+ * @param object $status status object
+ *
+ * @return string URI
+ */
+ function makeStatusURI($username, $id)
+ {
+ return 'http://twitter.com/'
+ . $username
+ . '/status/'
+ . $id;
+ }
+
+
+ /**
+ * Look up a Profile by profileurl field. Profile::staticGet() was
+ * not working consistently.
+ *
+ * @param string $nickname local nickname of the Twitter user
+ * @param string $profileurl the profile url
+ *
+ * @return mixed value 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;
+ }
+
+ /**
+ * Check to see if this Twitter status has already been imported
+ *
+ * @param Profile $profile Twitter user's local profile
+ * @param string $statusUri URI of the status on Twitter
+ *
+ * @return mixed value a matching Notice or null
+ */
+ function checkDupe($profile, $statusUri)
+ {
+ $notice = new Notice();
+ $notice->uri = $statusUri;
+ $notice->profile_id = $profile->id;
+ $notice->limit(1);
+
+ if ($notice->find()) {
+ $notice->fetch();
+ return $notice;
+ }
+
+ 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 = $this->getProfileByUrl($user->screen_name, $profileurl);
+
+ if (!empty($profile)) {
+ common_debug($this->name() .
+ " - Profile for $profile->nickname found.");
+
+ // Check to see if the user's Avatar has changed
+
+ $this->checkAvatar($user, $profile);
+ return $profile;
+
+ } else {
+ common_debug($this->name() . ' - Adding profile and remote profile ' .
+ "for Twitter user: $profileurl.");
+
+ $profile = new Profile();
+ $profile->query("BEGIN");
+
+ $profile->nickname = $user->screen_name;
+ $profile->fullname = $user->name;
+ $profile->homepage = $user->url;
+ $profile->bio = $user->description;
+ $profile->location = $user->location;
+ $profile->profileurl = $profileurl;
+ $profile->created = common_sql_now();
+
+ 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__);
+ $profile->query("ROLLBACK");
+ return false;
+ }
+
+ // check for remote profile
+
+ $remote_pro = Remote_profile::staticGet('uri', $profileurl);
+
+ if (empty($remote_pro)) {
+ $remote_pro = new Remote_profile();
+
+ $remote_pro->id = $id;
+ $remote_pro->uri = $profileurl;
+ $remote_pro->created = common_sql_now();
+
+ 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__);
+ $profile->query("ROLLBACK");
+ return false;
+ }
+ }
+
+ $profile->query("COMMIT");
+
+ $this->saveAvatars($user, $id);
+
+ return $profile;
+ }
+ }
+
+ function checkAvatar($twitter_user, $profile)
+ {
+ global $config;
+
+ $path_parts = pathinfo($twitter_user->profile_image_url);
+
+ $newname = 'Twitter_' . $twitter_user->id . '_' .
+ $path_parts['basename'];
+
+ $oldname = $profile->getAvatar(48)->filename;
+
+ if ($newname != $oldname) {
+ common_debug($this->name() . ' - Avatar for Twitter user ' .
+ "$profile->nickname has changed.");
+ common_debug($this->name() . " - old: $oldname new: $newname");
+
+ $this->updateAvatars($twitter_user, $profile);
+ }
+
+ if ($this->missingAvatarFile($profile)) {
+ common_debug($this->name() . ' - Twitter user ' .
+ $profile->nickname .
+ ' is missing one or more local avatars.');
+ common_debug($this->name() ." - old: $oldname new: $newname");
+
+ $this->updateAvatars($twitter_user, $profile);
+ }
+ }
+
+ function updateAvatars($twitter_user, $profile) {
+
+ global $config;
+
+ $path_parts = pathinfo($twitter_user->profile_image_url);
+
+ $img_root = substr($path_parts['basename'], 0, -11);
+ $ext = $path_parts['extension'];
+ $mediatype = $this->getMediatype($ext);
+
+ foreach (array('mini', 'normal', 'bigger') as $size) {
+ $url = $path_parts['dirname'] . '/' .
+ $img_root . '_' . $size . ".$ext";
+ $filename = 'Twitter_' . $twitter_user->id . '_' .
+ $img_root . "_$size.$ext";
+
+ $this->updateAvatar($profile->id, $size, $mediatype, $filename);
+ $this->fetchAvatar($url, $filename);
+ }
+ }
+
+ function missingAvatarFile($profile) {
+ foreach (array(24, 48, 73) as $size) {
+ $filename = $profile->getAvatar($size)->filename;
+ $avatarpath = Avatar::path($filename);
+ if (file_exists($avatarpath) == FALSE) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ function getMediatype($ext)
+ {
+ $mediatype = null;
+
+ switch (strtolower($ext)) {
+ case 'jpg':
+ $mediatype = 'image/jpg';
+ break;
+ case 'gif':
+ $mediatype = 'image/gif';
+ break;
+ default:
+ $mediatype = 'image/png';
+ }
+
+ return $mediatype;
+ }
+
+ function saveAvatars($user, $id)
+ {
+ global $config;
+
+ $path_parts = pathinfo($user->profile_image_url);
+ $ext = $path_parts['extension'];
+ $end = strlen('_normal' . $ext);
+ $img_root = substr($path_parts['basename'], 0, -($end+1));
+ $mediatype = $this->getMediatype($ext);
+
+ foreach (array('mini', 'normal', 'bigger') as $size) {
+ $url = $path_parts['dirname'] . '/' .
+ $img_root . '_' . $size . ".$ext";
+ $filename = 'Twitter_' . $user->id . '_' .
+ $img_root . "_$size.$ext";
+
+ if ($this->fetchAvatar($url, $filename)) {
+ $this->newAvatar($id, $size, $mediatype, $filename);
+ } else {
+ common_log(LOG_WARNING, $id() .
+ " - Problem fetching Avatar: $url");
+ }
+ }
+ }
+
+ function updateAvatar($profile_id, $size, $mediatype, $filename) {
+
+ common_debug($this->name() . " - Updating avatar: $size");
+
+ $profile = Profile::staticGet($profile_id);
+
+ if (empty($profile)) {
+ common_debug($this->name() . " - Couldn't get profile: $profile_id!");
+ return;
+ }
+
+ $sizes = array('mini' => 24, 'normal' => 48, 'bigger' => 73);
+ $avatar = $profile->getAvatar($sizes[$size]);
+
+ // Delete the avatar, if present
+ if ($avatar) {
+ $avatar->delete();
+ }
+
+ $this->newAvatar($profile->id, $size, $mediatype, $filename);
+ }
+
+ function newAvatar($profile_id, $size, $mediatype, $filename)
+ {
+ global $config;
+
+ $avatar = new Avatar();
+ $avatar->profile_id = $profile_id;
+
+ switch($size) {
+ case 'mini':
+ $avatar->width = 24;
+ $avatar->height = 24;
+ break;
+ case 'normal':
+ $avatar->width = 48;
+ $avatar->height = 48;
+ break;
+ default:
+ // Note: Twitter's big avatars are a different size than
+ // StatusNet's (StatusNet's = 96)
+ $avatar->width = 73;
+ $avatar->height = 73;
+ }
+
+ $avatar->original = 0; // we don't have the original
+ $avatar->mediatype = $mediatype;
+ $avatar->filename = $filename;
+ $avatar->url = Avatar::url($filename);
+
+ $avatar->created = common_sql_now();
+
+ 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__);
+ return null;
+ }
+
+ common_debug($this->name() .
+ " - Saved new $size avatar for $profile_id.");
+
+ return $id;
+ }
+
+ /**
+ * Fetch a remote avatar image and save to local storage.
+ *
+ * @param string $url avatar source URL
+ * @param string $filename bare local filename for download
+ * @return bool true on success, false on failure
+ */
+ function fetchAvatar($url, $filename)
+ {
+ common_debug($this->name() . " - Fetching Twitter avatar: $url");
+
+ $request = HTTPClient::start();
+ $response = $request->get($url);
+ if ($response->isOk()) {
+ $avatarfile = Avatar::path($filename);
+ $ok = file_put_contents($avatarfile, $response->getBody());
+ if (!$ok) {
+ common_log(LOG_WARNING, $this->name() .
+ " - Couldn't open file $filename");
+ return false;
+ }
+ } else {
+ return false;
+ }
+
+ return true;
+ }
+
+ const URL = 1;
+ const HASHTAG = 2;
+ const MENTION = 3;
+
+ function linkify($status)
+ {
+ $text = $status->text;
+
+ if (empty($status->entities)) {
+ $statusId = twitter_id($status);
+ common_log(LOG_WARNING, "No entities data for {$statusId}; trying to fake up links ourselves.");
+ $text = common_replace_urls_callback($text, 'common_linkify');
+ $text = preg_replace('/(^|\&quot\;|\'|\(|\[|\{|\s+)#([\pL\pN_\-\.]{1,64})/e', "'\\1#'.TwitterStatusFetcher::tagLink('\\2')", $text);
+ $text = preg_replace('/(^|\s+)@([a-z0-9A-Z_]{1,64})/e', "'\\1@'.TwitterStatusFetcher::atLink('\\2')", $text);
+ return $text;
+ }
+
+ // Move all the entities into order so we can
+ // replace them in reverse order and thus
+ // not mess up their indices
+
+ $toReplace = array();
+
+ if (!empty($status->entities->urls)) {
+ foreach ($status->entities->urls as $url) {
+ $toReplace[$url->indices[0]] = array(self::URL, $url);
+ }
+ }
+
+ if (!empty($status->entities->hashtags)) {
+ foreach ($status->entities->hashtags as $hashtag) {
+ $toReplace[$hashtag->indices[0]] = array(self::HASHTAG, $hashtag);
+ }
+ }
+
+ if (!empty($status->entities->user_mentions)) {
+ foreach ($status->entities->user_mentions as $mention) {
+ $toReplace[$mention->indices[0]] = array(self::MENTION, $mention);
+ }
+ }
+
+ // sort in reverse order by key
+
+ krsort($toReplace);
+
+ foreach ($toReplace as $part) {
+ list($type, $object) = $part;
+ switch($type) {
+ case self::URL:
+ $linkText = $this->makeUrlLink($object);
+ break;
+ case self::HASHTAG:
+ $linkText = $this->makeHashtagLink($object);
+ break;
+ case self::MENTION:
+ $linkText = $this->makeMentionLink($object);
+ break;
+ default:
+ continue;
+ }
+ $text = mb_substr($text, 0, $object->indices[0]) . $linkText . mb_substr($text, $object->indices[1]);
+ }
+ return $text;
+ }
+
+ function makeUrlLink($object)
+ {
+ return "<a href='{$object->url}' class='extlink'>{$object->url}</a>";
+ }
+
+ function makeHashtagLink($object)
+ {
+ return "#" . self::tagLink($object->text);
+ }
+
+ function makeMentionLink($object)
+ {
+ return "@".self::atLink($object->screen_name, $object->name);
+ }
+
+ static function tagLink($tag)
+ {
+ return "<a href='https://twitter.com/search?q=%23{$tag}' class='hashtag'>{$tag}</a>";
+ }
+
+ static function atLink($screenName, $fullName=null)
+ {
+ if (!empty($fullName)) {
+ return "<a href='http://twitter.com/{$screenName}' title='{$fullName}'>{$screenName}</a>";
+ } else {
+ return "<a href='http://twitter.com/{$screenName}'>{$screenName}</a>";
+ }
+ }
+
+ function saveStatusMentions($notice, $status)
+ {
+ $mentions = array();
+
+ if (empty($status->entities) || empty($status->entities->user_mentions)) {
+ return;
+ }
+
+ foreach ($status->entities->user_mentions as $mention) {
+ $flink = Foreign_link::getByForeignID($mention->id, TWITTER_SERVICE);
+ if (!empty($flink)) {
+ $user = User::staticGet('id', $flink->user_id);
+ if (!empty($user)) {
+ $reply = new Reply();
+ $reply->notice_id = $notice->id;
+ $reply->profile_id = $user->id;
+ common_log(LOG_INFO, __METHOD__ . ": saving reply: notice {$notice->id} to profile {$user->id}");
+ $id = $reply->insert();
+ }
+ }
+ }
+ }
+
+ /**
+ * Record URL links from the notice. Needed to get thumbnail records
+ * for referenced photo and video posts, etc.
+ *
+ * @param Notice $notice
+ * @param object $status
+ */
+ function saveStatusAttachments($notice, $status)
+ {
+ if (common_config('attachments', 'process_links')) {
+ if (!empty($status->entities) && !empty($status->entities->urls)) {
+ foreach ($status->entities->urls as $url) {
+ File::processNew($url->url, $notice->id);
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/TwitterBridge/twittersettings.php b/plugins/TwitterBridge/twittersettings.php
index 33c5eb65b..c169172b0 100644
--- a/plugins/TwitterBridge/twittersettings.php
+++ b/plugins/TwitterBridge/twittersettings.php
@@ -285,6 +285,7 @@ class TwittersettingsAction extends ConnectSettingsAction
}
$original = clone($flink);
+ $wasReceiving = (bool)($original->noticesync & FOREIGN_NOTICE_RECV);
$flink->set_flags($noticesend, $noticerecv, $replysync, $friendsync);
$result = $flink->update($original);
@@ -294,6 +295,19 @@ class TwittersettingsAction extends ConnectSettingsAction
return;
}
+ if ($wasReceiving xor $noticerecv) {
+ $this->notifyDaemon($flink->foreign_id, $noticerecv);
+ }
+
$this->showForm(_m('Twitter preferences saved.'), true);
}
+
+ /**
+ * Tell the import daemon that we've updated a user's receive status.
+ */
+ function notifyDaemon($twitterUserId, $receiving)
+ {
+ // todo... should use control signals rather than queues
+ }
+
}
diff --git a/plugins/TwitterBridge/twitterstreamreader.php b/plugins/TwitterBridge/twitterstreamreader.php
new file mode 100644
index 000000000..5b0613bc4
--- /dev/null
+++ b/plugins/TwitterBridge/twitterstreamreader.php
@@ -0,0 +1,285 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * 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 Brion Vibber <brion@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/
+ */
+
+/**
+ * Base class for reading Twitter's User Streams and Site Streams
+ * real-time streaming APIs.
+ *
+ * Caller can hook event callbacks for various types of messages;
+ * the data from the stream and some context info will be passed
+ * on to the callbacks.
+ */
+abstract class TwitterStreamReader extends JsonStreamReader
+{
+ protected $callbacks = array();
+
+ function __construct(TwitterOAuthClient $auth, $baseUrl)
+ {
+ $this->baseUrl = $baseUrl;
+ $this->oauth = $auth;
+ }
+
+ public function connect($method, $params=array())
+ {
+ $url = $this->oAuthUrl($this->baseUrl . '/' . $method, $params);
+ return parent::connect($url);
+ }
+
+ /**
+ * Sign our target URL with OAuth auth stuff.
+ *
+ * @param string $url
+ * @param array $params
+ * @return string
+ */
+ protected function oAuthUrl($url, $params=array())
+ {
+ // In an ideal world this would be better encapsulated. :)
+ $request = OAuthRequest::from_consumer_and_token($this->oauth->consumer,
+ $this->oauth->token, 'GET', $url, $params);
+ $request->sign_request($this->oauth->sha1_method,
+ $this->oauth->consumer, $this->oauth->token);
+
+ return $request->to_url();
+ }
+
+ /**
+ * Add an event callback to receive notifications when things come in
+ * over the wire.
+ *
+ * Callbacks should be in the form: function(object $data, array $context)
+ * where $context may list additional data on some streams, such as the
+ * user to whom the message should be routed.
+ *
+ * Available events:
+ *
+ * Messaging:
+ *
+ * 'status': $data contains a status update in standard Twitter JSON format.
+ * $data->user: sending user in standard Twitter JSON format.
+ * $data->text... etc
+ *
+ * 'direct_message': $data contains a direct message in standard Twitter JSON format.
+ * $data->sender: sending user in standard Twitter JSON format.
+ * $data->recipient: receiving user in standard Twitter JSON format.
+ * $data->text... etc
+ *
+ *
+ * Out of band events:
+ *
+ * 'follow': User has either started following someone, or is being followed.
+ * $data->source: following user in standard Twitter JSON format.
+ * $data->target: followed user in standard Twitter JSON format.
+ *
+ * 'favorite': Someone has favorited a status update.
+ * $data->source: user doing the favoriting, in standard Twitter JSON format.
+ * $data->target: user whose status was favorited, in standard Twitter JSON format.
+ * $data->target_object: the favorited status update in standard Twitter JSON format.
+ *
+ * 'unfavorite': Someone has unfavorited a status update.
+ * $data->source: user doing the unfavoriting, in standard Twitter JSON format.
+ * $data->target: user whose status was unfavorited, in standard Twitter JSON format.
+ * $data->target_object: the unfavorited status update in standard Twitter JSON format.
+ *
+ *
+ * Meta information:
+ *
+ * 'friends':
+ * $data->friends: array of user IDs of the current user's friends.
+ *
+ * 'delete': Advisory that a Twitter status has been deleted; nice clients
+ * should follow suit.
+ * $data->id: ID of status being deleted
+ * $data->user_id: ID of its owning user
+ *
+ * 'scrub_geo': Advisory that a user is clearing geo data from their status
+ * stream; nice clients should follow suit.
+ * $data->user_id: ID of user
+ * $data->up_to_status_id: any notice older than this should be scrubbed.
+ *
+ * 'limit': Advisory that tracking has hit a resource limit.
+ * $data->track
+ *
+ * 'raw': receives the full JSON data for all message types.
+ *
+ * @param string $event
+ * @param callable $callback
+ */
+ public function hookEvent($event, $callback)
+ {
+ $this->callbacks[$event][] = $callback;
+ }
+
+ /**
+ * Call event handler callbacks for the given event.
+ *
+ * @param string $event
+ * @param mixed $arg1 ... one or more params to pass on
+ */
+ protected function fireEvent($event, $arg1)
+ {
+ if (array_key_exists($event, $this->callbacks)) {
+ $args = array_slice(func_get_args(), 1);
+ foreach ($this->callbacks[$event] as $callback) {
+ call_user_func_array($callback, $args);
+ }
+ }
+ }
+
+ protected function handleJson(stdClass $data)
+ {
+ $this->routeMessage($data);
+ }
+
+ abstract protected function routeMessage(stdClass $data);
+
+ /**
+ * Send the decoded JSON object out to any event listeners.
+ *
+ * @param array $data
+ * @param array $context optional additional context data to pass on
+ */
+ protected function handleMessage(stdClass $data, array $context=array())
+ {
+ $this->fireEvent('raw', $data, $context);
+
+ if (isset($data->text)) {
+ $this->fireEvent('status', $data, $context);
+ return;
+ }
+ if (isset($data->event)) {
+ $this->fireEvent($data->event, $data, $context);
+ return;
+ }
+ if (isset($data->friends)) {
+ $this->fireEvent('friends', $data, $context);
+ }
+
+ $knownMeta = array('delete', 'scrub_geo', 'limit', 'direct_message');
+ foreach ($knownMeta as $key) {
+ if (isset($data->$key)) {
+ $this->fireEvent($key, $data->$key, $context);
+ return;
+ }
+ }
+ }
+}
+
+/**
+ * Multiuser stream listener for Twitter Site Streams API
+ * http://dev.twitter.com/pages/site_streams
+ *
+ * The site streams API allows listening to updates for multiple users.
+ * Pass in the user IDs to listen to in via followUser() -- note they
+ * must each have a valid OAuth token for the application ID we're
+ * connecting as.
+ *
+ * You'll need to be connecting with the auth keys for the user who
+ * owns the application registration.
+ *
+ * The user each message is destined for will be passed to event handlers
+ * in $context['for_user_id'].
+ */
+class TwitterSiteStream extends TwitterStreamReader
+{
+ protected $userIds;
+
+ public function __construct(TwitterOAuthClient $auth, $baseUrl='http://betastream.twitter.com')
+ {
+ parent::__construct($auth, $baseUrl);
+ }
+
+ public function connect($method='2b/site.json')
+ {
+ $params = array();
+ if ($this->userIds) {
+ $params['follow'] = implode(',', $this->userIds);
+ }
+ return parent::connect($method, $params);
+ }
+
+ /**
+ * Set the users whose home streams should be pulled.
+ * They all must have valid oauth tokens for this application.
+ *
+ * Must be called before connect().
+ *
+ * @param array $userIds
+ */
+ function followUsers($userIds)
+ {
+ $this->userIds = $userIds;
+ }
+
+ /**
+ * Each message in the site stream tells us which user ID it should be
+ * routed to; we'll need that to let the caller know what to do.
+ *
+ * @param array $data
+ */
+ function routeMessage(stdClass $data)
+ {
+ $context = array(
+ 'source' => 'sitestream',
+ 'for_user' => $data->for_user
+ );
+ parent::handleMessage($data->message, $context);
+ }
+}
+
+/**
+ * Stream listener for Twitter User Streams API
+ * http://dev.twitter.com/pages/user_streams
+ *
+ * This will pull the home stream and additional events just for the user
+ * we've authenticated as.
+ */
+class TwitterUserStream extends TwitterStreamReader
+{
+ public function __construct(TwitterOAuthClient $auth, $baseUrl='https://userstream.twitter.com')
+ {
+ parent::__construct($auth, $baseUrl);
+ }
+
+ public function connect($method='2/user.json')
+ {
+ return parent::connect($method);
+ }
+
+ /**
+ * Each message in the user stream is just ready to go.
+ *
+ * @param array $data
+ */
+ function routeMessage(stdClass $data)
+ {
+ $context = array(
+ 'source' => 'userstream'
+ );
+ parent::handleMessage($data, $context);
+ }
+}
diff --git a/plugins/UserFlag/UserFlagPlugin.php b/plugins/UserFlag/UserFlagPlugin.php
index e6ad3e37d..fc7698841 100644
--- a/plugins/UserFlag/UserFlagPlugin.php
+++ b/plugins/UserFlag/UserFlagPlugin.php
@@ -128,25 +128,9 @@ class UserFlagPlugin extends Plugin
*/
function onEndProfilePageActionsElements(&$action, $profile)
{
- $user = common_current_user();
-
- if (!empty($user) && ($user->id != $profile->id)) {
-
- $action->elementStart('li', 'entity_flag');
-
- if (User_flag_profile::exists($profile->id, $user->id)) {
- // @todo FIXME: Add a title explaining what 'flagged' means?
- // TRANS: Message added to a profile if it has been flagged for review.
- $action->element('p', 'flagged', _('Flagged'));
- } else {
- $form = new FlagProfileForm($action, $profile,
- array('action' => 'showstream',
- 'nickname' => $profile->nickname));
- $form->show();
- }
-
- $action->elementEnd('li');
- }
+ $this->showFlagButton($action, $profile,
+ array('action' => 'showstream',
+ 'nickname' => $profile->nickname));
return true;
}
@@ -160,22 +144,40 @@ class UserFlagPlugin extends Plugin
*/
function onEndProfileListItemActionElements($item)
{
- $user = common_current_user();
+ list($action, $args) = $item->action->returnToArgs();
+ $args['action'] = $action;
+ $this->showFlagButton($item->action, $item->profile, $args);
+
+ return true;
+ }
- if (!empty($user)) {
+ /**
+ * Actually output a flag button. If the target profile has already been
+ * flagged by the current user, a null-action faux button is shown.
+ *
+ * @param Action $action
+ * @param Profile $profile
+ * @param array $returnToArgs
+ */
+ protected function showFlagButton($action, $profile, $returnToArgs)
+ {
+ $user = common_current_user();
- list($action, $args) = $item->action->returnToArgs();
+ if (!empty($user) && ($user->id != $profile->id)) {
- $args['action'] = $action;
+ $action->elementStart('li', 'entity_flag');
- $form = new FlagProfileForm($item->action, $item->profile, $args);
+ if (User_flag_profile::exists($profile->id, $user->id)) {
+ // @todo FIXME: Add a title explaining what 'flagged' means?
+ // TRANS: Message added to a profile if it has been flagged for review.
+ $action->element('p', 'flagged', _m('Flagged'));
+ } else {
+ $form = new FlagProfileForm($action, $profile, $returnToArgs);
+ $form->show();
+ }
- $item->action->elementStart('li', 'entity_flag');
- $form->show();
- $item->action->elementEnd('li');
+ $action->elementEnd('li');
}
-
- return true;
}
/**
diff --git a/plugins/UserFlag/User_flag_profile.php b/plugins/UserFlag/User_flag_profile.php
index 69fe0f356..f4e9844df 100644
--- a/plugins/UserFlag/User_flag_profile.php
+++ b/plugins/UserFlag/User_flag_profile.php
@@ -79,21 +79,36 @@ class User_flag_profile extends Memcached_DataObject
/**
* return key definitions for DB_DataObject
*
- * @return array key definitions
+ * @return array of key names
*/
function keys()
{
- return array('profile_id' => 'K', 'user_id' => 'K');
+ return array_keys($this->keyTypes());
}
/**
* return key definitions for DB_DataObject
*
- * @return array key definitions
+ * @return array map of key definitions
*/
function keyTypes()
{
- return $this->keys();
+ return array('profile_id' => 'K', 'user_id' => 'K');
+ }
+
+ /**
+ * 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/UserFlag/flagprofile.php b/plugins/UserFlag/flagprofile.php
index 283eea40c..7096d3748 100644
--- a/plugins/UserFlag/flagprofile.php
+++ b/plugins/UserFlag/flagprofile.php
@@ -60,13 +60,6 @@ class FlagprofileAction extends ProfileFormAction
assert(!empty($user)); // checked above
assert(!empty($this->profile)); // checked above
- if (User_flag_profile::exists($this->profile->id,
- $user->id)) {
- // TRANS: Client error when setting flag that has already been set for a profile.
- $this->clientError(_m('Flag already exists.'));
- return false;
- }
-
return true;
}
@@ -104,7 +97,13 @@ class FlagprofileAction extends ProfileFormAction
// throws an exception on error
- User_flag_profile::create($user->id, $this->profile->id);
+ if (User_flag_profile::exists($this->profile->id,
+ $user->id)) {
+ // We'll return to the profile page (or return the updated AJAX form)
+ // showing the current state, so no harm done.
+ } else {
+ User_flag_profile::create($user->id, $this->profile->id);
+ }
if ($this->boolean('ajax')) {
$this->ajaxResults();
diff --git a/plugins/UserFlag/locale/UserFlag.pot b/plugins/UserFlag/locale/UserFlag.pot
index decb06d04..c70c7988e 100644
--- a/plugins/UserFlag/locale/UserFlag.pot
+++ b/plugins/UserFlag/locale/UserFlag.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
+"POT-Creation-Date: 2010-11-04 18:25+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"
@@ -44,23 +44,19 @@ msgstr[1] ""
msgid "Flagged by %s"
msgstr ""
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr ""
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr ""
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr ""
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -93,7 +89,7 @@ msgid "Flag profile for review."
msgstr ""
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr ""
diff --git a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po
index 277ce5650..f2c84969a 100644
--- a/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/fr/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: French <http://translatewiki.net/wiki/Portal:fr>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -48,23 +48,19 @@ msgstr[1] "Marqué par %1$s et %2$d autres"
msgid "Flagged by %s"
msgstr "Marqué par %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "Déjà marqué."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Marqué pour vérification"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Marqué"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -99,7 +95,7 @@ msgid "Flag profile for review."
msgstr "Marquer le profil pour vérification."
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Impossible de marquer le profil « %d » pour vérification."
diff --git a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po
index d58458b05..2917da732 100644
--- a/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/ia/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: Interlingua <http://translatewiki.net/wiki/Portal:ia>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -48,23 +48,19 @@ msgstr[1] "Marcate per %1$s e %2$d alteres"
msgid "Flagged by %s"
msgstr "Marcate per %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "Le marca ja existe."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Marcate pro revision"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Marcate"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -98,7 +94,7 @@ msgid "Flag profile for review."
msgstr "Marcar profilo pro revision."
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Non poteva marcar profilo \"%d\" pro revision."
diff --git a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po
index ab9c1b2e4..8d934141e 100644
--- a/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/mk/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -48,23 +48,19 @@ msgstr[1] "Означено од %1$s и уште %2$d други"
msgid "Flagged by %s"
msgstr "Означено од %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "Ознаката веќе постои."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Означено за преглед"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Означено"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -99,7 +95,7 @@ msgid "Flag profile for review."
msgstr "Означи профил за преглед."
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Не можев да го означам профилот „%d“ за преглед."
diff --git a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po
index 115b63433..766776a9e 100644
--- a/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/nl/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: Dutch <http://translatewiki.net/wiki/Portal:nl>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -48,23 +48,19 @@ msgstr[1] "Gemarkeerd door %1$s en %2$d anderen"
msgid "Flagged by %s"
msgstr "Gemarkeerd door %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "De markering bestaat al."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Gemarkeerd voor controle"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Gemarkeerd"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -100,7 +96,7 @@ msgid "Flag profile for review."
msgstr "Profiel voor controle markeren"
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Het was niet mogelijk het profiel \"%d\" voor controle te markeren."
diff --git a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po
index c476cf2f7..ea71be24e 100644
--- a/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/pt/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: Portuguese <http://translatewiki.net/wiki/Portal:pt>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -48,23 +48,19 @@ msgstr[1] "Sinalizado por %1$s e mais %2$d pessoas"
msgid "Flagged by %s"
msgstr "Sinalizado por %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "Já existe uma sinalização."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Sinalizado para análise"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Sinalizado"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -99,7 +95,7 @@ msgid "Flag profile for review."
msgstr "Sinalizar perfil para análise."
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Não foi possível sinalizar o perfil \"%d\" para análise."
diff --git a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po
index c6dd6e40d..ae0e9b03f 100644
--- a/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po
+++ b/plugins/UserFlag/locale/uk/LC_MESSAGES/UserFlag.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - UserFlag\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:54+0000\n"
+"POT-Creation-Date: 2010-11-07 20:25+0000\n"
+"PO-Revision-Date: 2010-11-07 20:29:20+0000\n"
"Language-Team: Ukrainian <http://translatewiki.net/wiki/Portal:uk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-23 19:01:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-11-05 00:29:34+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r76266); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: #out-statusnet-plugin-userflag\n"
@@ -50,23 +50,19 @@ msgstr[2] "Відмічено %1$s та ще %2$d користувачами"
msgid "Flagged by %s"
msgstr "Відмічено %s"
-#. TRANS: Client error when setting flag that has already been set for a profile.
-#: flagprofile.php:66
-msgid "Flag already exists."
-msgstr "Відмітка вже стоїть."
-
#. TRANS: AJAX form title for a flagged profile.
-#: flagprofile.php:126
+#: flagprofile.php:125
msgid "Flagged for review"
msgstr "Відмічені для розгляду"
#. TRANS: Body text for AJAX form when a profile has been flagged for review.
-#: flagprofile.php:130
+#. TRANS: Message added to a profile if it has been flagged for review.
+#: flagprofile.php:129 UserFlagPlugin.php:173
msgid "Flagged"
msgstr "Відмічені"
#. TRANS: Plugin description.
-#: UserFlagPlugin.php:292
+#: UserFlagPlugin.php:294
msgid ""
"This plugin allows flagging of profiles for review and reviewing flagged "
"profiles."
@@ -101,7 +97,7 @@ msgid "Flag profile for review."
msgstr "Відмітити профіль для розгляду."
#. TRANS: Server exception.
-#: User_flag_profile.php:145
+#: User_flag_profile.php:160
#, php-format
msgid "Couldn't flag profile \"%d\" for review."
msgstr "Не вдалося відмітити профіль «%d» для розгляду."
diff --git a/plugins/UserLimit/locale/fi/LC_MESSAGES/UserLimit.po b/plugins/UserLimit/locale/fi/LC_MESSAGES/UserLimit.po
new file mode 100644
index 000000000..5c768546a
--- /dev/null
+++ b/plugins/UserLimit/locale/fi/LC_MESSAGES/UserLimit.po
@@ -0,0 +1,26 @@
+# Translation of StatusNet - UserLimit to Finnish (Suomi)
+# Expored from translatewiki.net
+#
+# Author: Centerlink
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - UserLimit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-02 22:51+0000\n"
+"PO-Revision-Date: 2010-11-02 22:55:20+0000\n"
+"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r75875); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fi\n"
+"X-Message-Group: #out-statusnet-plugin-userlimit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: UserLimitPlugin.php:89
+msgid "Limit the number of users who can register."
+msgstr "Rajoita niiden käyttäjien lukumäärää, jotka voivat rekisteröityä."
diff --git a/plugins/UserLimit/locale/lv/LC_MESSAGES/UserLimit.po b/plugins/UserLimit/locale/lv/LC_MESSAGES/UserLimit.po
new file mode 100644
index 000000000..eb4e3d545
--- /dev/null
+++ b/plugins/UserLimit/locale/lv/LC_MESSAGES/UserLimit.po
@@ -0,0 +1,27 @@
+# Translation of StatusNet - UserLimit to Latvian (Latviešu)
+# Expored from translatewiki.net
+#
+# Author: Geimeris
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - UserLimit\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:37+0000\n"
+"Language-Team: Latvian <http://translatewiki.net/wiki/Portal:lv>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-11-02 23:07:31+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: lv\n"
+"X-Message-Group: #out-statusnet-plugin-userlimit\n"
+"Plural-Forms: nplurals=3; plural=(n%10 == 1 && n%100 != 11) ? 0 : ( (n != "
+"0) ? 1 : 2 );\n"
+
+#: UserLimitPlugin.php:89
+msgid "Limit the number of users who can register."
+msgstr "Ierobežotais lietotāju skaits, kuri var reģistrēties."
diff --git a/plugins/WikiHashtags/locale/de/LC_MESSAGES/WikiHashtags.po b/plugins/WikiHashtags/locale/de/LC_MESSAGES/WikiHashtags.po
new file mode 100644
index 000000000..f8258343e
--- /dev/null
+++ b/plugins/WikiHashtags/locale/de/LC_MESSAGES/WikiHashtags.po
@@ -0,0 +1,30 @@
+# Translation of StatusNet - WikiHashtags to German (Deutsch)
+# Expored from translatewiki.net
+#
+# Author: The Evil IP address
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - WikiHashtags\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:38+0000\n"
+"Language-Team: German <http://translatewiki.net/wiki/Portal:de>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: de\n"
+"X-Message-Group: #out-statusnet-plugin-wikihashtags\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: WikiHashtagsPlugin.php:110
+msgid ""
+"Gets hashtag descriptions from <a href=\"http://hashtags.wikia.com/"
+"\">WikiHashtags</a>."
+msgstr ""
+"Holt Hashtag-Beschreibungen aus <a href=\"http://hashtags.wikia.com/"
+"\">WikiHashtags</a>."
diff --git a/plugins/WikiHashtags/locale/mk/LC_MESSAGES/WikiHashtags.po b/plugins/WikiHashtags/locale/mk/LC_MESSAGES/WikiHashtags.po
index b15fb0cf6..f88501dc7 100644
--- a/plugins/WikiHashtags/locale/mk/LC_MESSAGES/WikiHashtags.po
+++ b/plugins/WikiHashtags/locale/mk/LC_MESSAGES/WikiHashtags.po
@@ -9,13 +9,13 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet - WikiHashtags\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-10-27 23:43+0000\n"
-"PO-Revision-Date: 2010-10-27 23:47:55+0000\n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:38+0000\n"
"Language-Team: Macedonian <http://translatewiki.net/wiki/Portal:mk>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-POT-Import-Date: 2010-10-18 20:34:15+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75596); Translate extension (2010-09-17)\n"
+"X-POT-Import-Date: 2010-10-29 16:14:14+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: #out-statusnet-plugin-wikihashtags\n"
@@ -26,5 +26,5 @@ msgid ""
"Gets hashtag descriptions from <a href=\"http://hashtags.wikia.com/"
"\">WikiHashtags</a>."
msgstr ""
-"Презема описи на хеш-ознаки од <a href=\"http://hashtags.wikia.com/"
+"Презема описи на тарабни ознаки од <a href=\"http://hashtags.wikia.com/"
"\">WikiHashtags</a>."
diff --git a/plugins/XCache/locale/fi/LC_MESSAGES/XCache.po b/plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
new file mode 100644
index 000000000..c0ce345eb
--- /dev/null
+++ b/plugins/XCache/locale/fi/LC_MESSAGES/XCache.po
@@ -0,0 +1,30 @@
+# Translation of StatusNet - XCache to Finnish (Suomi)
+# Expored from translatewiki.net
+#
+# Author: Centerlink
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - XCache\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-10-30 23:18+0000\n"
+"PO-Revision-Date: 2010-10-30 23:23:06+0000\n"
+"Language-Team: Finnish <http://translatewiki.net/wiki/Portal:fi>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:46+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r75708); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: fi\n"
+"X-Message-Group: #out-statusnet-plugin-xcache\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: XCachePlugin.php:120
+msgid ""
+"Use the <a href=\"http://xcache.lighttpd.net/\">XCache</a> variable cache to "
+"cache query results."
+msgstr ""
+"Käytä <a href=\"http://xcache.lighttpd.net/\">XCache</a>-muuttujavälimuistia "
+"kyselyn tulosten tallentamiseksi välimuistiin."
diff --git a/plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po b/plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po
new file mode 100644
index 000000000..027b05a1e
--- /dev/null
+++ b/plugins/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po
@@ -0,0 +1,268 @@
+# Translation of StatusNet - YammerImport to Galician (Galego)
+# Expored from translatewiki.net
+#
+# Author: Toliño
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet - YammerImport\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-11-29 15:37+0000\n"
+"PO-Revision-Date: 2010-11-29 15:42:43+0000\n"
+"Language-Team: Galician <http://translatewiki.net/wiki/Portal:gl>\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-POT-Import-Date: 2010-10-29 16:14:46+0000\n"
+"X-Generator: MediaWiki 1.17alpha (r77421); Translate extension (2010-09-17)\n"
+"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: gl\n"
+"X-Message-Group: #out-statusnet-plugin-yammerimport\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: YammerImportPlugin.php:98
+msgid "Yammer"
+msgstr ""
+
+#: YammerImportPlugin.php:99 actions/yammeradminpanel.php:135
+msgid "Yammer import"
+msgstr ""
+
+#: lib/yammerauthinitform.php:48 lib/yammerauthverifyform.php:56
+#: lib/yammerprogressform.php:68 actions/yammerauth.php:71
+msgid "Connect to Yammer"
+msgstr ""
+
+#: lib/yammerauthinitform.php:62
+msgid "Start authentication"
+msgstr ""
+
+#: lib/yammerauthinitform.php:62
+msgid "Request authorization to connect to Yammer account"
+msgstr ""
+
+#: lib/yammerauthinitform.php:63
+msgid "Change API key"
+msgstr ""
+
+#: lib/yammerimporter.php:230
+msgid "Expertise:"
+msgstr ""
+
+#: lib/yammerimporter.php:433
+#, php-format
+msgid "Invalid avatar URL %s."
+msgstr ""
+
+#: lib/yammerimporter.php:441
+#, php-format
+msgid "Unable to fetch avatar from %s."
+msgstr ""
+
+#: lib/yammerapikeyform.php:56
+msgid "Yammer API registration"
+msgstr ""
+
+#: lib/yammerapikeyform.php:72
+msgid ""
+"Before we can connect to your Yammer network, you will need to register the "
+"importer as an application authorized to pull data on your behalf. This "
+"registration will work only for your own network. Follow this link to "
+"register the app at Yammer; you will be prompted to log in if necessary:"
+msgstr ""
+
+#: lib/yammerapikeyform.php:84
+msgid "Open Yammer application registration form"
+msgstr ""
+
+#: lib/yammerapikeyform.php:87
+msgid "Copy the consumer key and secret you are given into the form below:"
+msgstr ""
+
+#: lib/yammerapikeyform.php:91
+msgid "Consumer key:"
+msgstr "Clave do consumidor:"
+
+#: lib/yammerapikeyform.php:94
+msgid "Consumer secret:"
+msgstr "Pregunta secreta do consumidor:"
+
+#: lib/yammerapikeyform.php:98
+msgid "Save"
+msgstr "Gardar"
+
+#: lib/yammerapikeyform.php:98
+msgid "Save these consumer keys"
+msgstr ""
+
+#: lib/yammerauthverifyform.php:72
+msgid ""
+"Follow this link to confirm authorization at Yammer; you will be prompted to "
+"log in if necessary:"
+msgstr ""
+
+#: lib/yammerauthverifyform.php:87
+msgid "Open Yammer authentication window"
+msgstr ""
+
+#: lib/yammerauthverifyform.php:90
+msgid "Copy the verification code you are given below:"
+msgstr ""
+
+#: lib/yammerauthverifyform.php:94
+msgid "Verification code:"
+msgstr "Código de verificación:"
+
+#: lib/yammerauthverifyform.php:98 lib/yammerprogressform.php:164
+msgid "Continue"
+msgstr "Continuar"
+
+#: lib/yammerauthverifyform.php:98
+msgid "Save code and begin import"
+msgstr ""
+
+#: lib/yammerprogressform.php:63
+msgid "Initialize"
+msgstr "Iniciar"
+
+#: lib/yammerprogressform.php:64
+msgid "No import running"
+msgstr ""
+
+#: lib/yammerprogressform.php:65
+msgid "Initiated Yammer server connection..."
+msgstr ""
+
+#: lib/yammerprogressform.php:69
+msgid "Awaiting authorization..."
+msgstr "Agardando a autorización..."
+
+#: lib/yammerprogressform.php:70
+msgid "Connected."
+msgstr "Conectado."
+
+#: lib/yammerprogressform.php:73
+msgid "Import user accounts"
+msgstr ""
+
+#: lib/yammerprogressform.php:74
+#, php-format
+msgid "Importing %d user..."
+msgid_plural "Importing %d users..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:75
+#, php-format
+msgid "Imported %d user."
+msgid_plural "Imported %d users."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:78
+msgid "Import user groups"
+msgstr ""
+
+#: lib/yammerprogressform.php:79
+#, php-format
+msgid "Importing %d group..."
+msgid_plural "Importing %d groups..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:80
+#, php-format
+msgid "Imported %d group."
+msgid_plural "Imported %d groups."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:83
+msgid "Prepare public notices for import"
+msgstr ""
+
+#: lib/yammerprogressform.php:84
+#, php-format
+msgid "Preparing %d notice..."
+msgid_plural "Preparing %d notices..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:85
+#, php-format
+msgid "Prepared %d notice."
+msgid_plural "Prepared %d notices."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:88
+msgid "Import public notices"
+msgstr ""
+
+#: lib/yammerprogressform.php:89
+#, php-format
+msgid "Importing %d notice..."
+msgid_plural "Importing %d notices..."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:90
+#, php-format
+msgid "Imported %d notice."
+msgid_plural "Imported %d notices."
+msgstr[0] ""
+msgstr[1] ""
+
+#: lib/yammerprogressform.php:93
+msgid "Done"
+msgstr "Feito"
+
+#: lib/yammerprogressform.php:94 lib/yammerprogressform.php:95
+msgid "Import is complete!"
+msgstr "Completouse a importación!"
+
+#: lib/yammerprogressform.php:108
+msgid "Import status"
+msgstr "Estado da importación"
+
+#: lib/yammerprogressform.php:132
+msgid "Waiting..."
+msgstr "Agarde..."
+
+#: lib/yammerprogressform.php:146
+msgid "Reset import state"
+msgstr "Reiniciar o estado da importación"
+
+#: lib/yammerprogressform.php:151
+msgid "Pause import"
+msgstr "Pausar a importación"
+
+#: lib/yammerprogressform.php:160
+#, php-format
+msgid "Encountered error \"%s\""
+msgstr "Atopouse o erro \"%s\""
+
+#: lib/yammerprogressform.php:162
+msgid "Paused"
+msgstr "En pausa"
+
+#: lib/yammerprogressform.php:165
+msgid "Abort import"
+msgstr "Abortar a importación"
+
+#: actions/yammeradminpanel.php:45
+msgid "Yammer Import"
+msgstr "Importación Yammer"
+
+#: actions/yammeradminpanel.php:55
+msgid ""
+"This Yammer import tool is still undergoing testing, and is incomplete in "
+"some areas. Currently user subscriptions and group memberships are not "
+"transferred; in the future this may be supported for imports done by "
+"verified administrators on the Yammer side."
+msgstr ""
+
+#: actions/yammeradminpanel.php:102
+msgid "Paused from admin panel."
+msgstr "En pausa desde o panel de administración."