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.po12
-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/Autocomplete.js71
-rw-r--r--plugins/Autocomplete/AutocompletePlugin.php2
-rw-r--r--plugins/Autocomplete/README11
-rw-r--r--plugins/Autocomplete/autocomplete.php36
-rw-r--r--plugins/Autocomplete/locale/be-tarask/LC_MESSAGES/Autocomplete.po33
-rw-r--r--plugins/Awesomeness/AwesomenessPlugin.php110
-rw-r--r--plugins/BitlyUrl/BitlyUrlPlugin.php6
-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.po29
-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/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.js247
-rw-r--r--plugins/LinkPreview/linkpreview.min.js1
-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.php87
-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.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/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/ModPlusPlugin.php116
-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/ModPlus/modplus.css23
-rw-r--r--plugins/ModPlus/modplus.js23
-rw-r--r--plugins/ModPlus/remoteprofileaction.php106
-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.php46
-rw-r--r--plugins/OStatus/actions/userxrd.php65
-rw-r--r--plugins/OStatus/lib/xrdaction.php127
-rw-r--r--plugins/OStatus/locale/OStatus.pot48
-rw-r--r--plugins/OStatus/locale/br/LC_MESSAGES/OStatus.po756
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po54
-rw-r--r--plugins/OStatus/locale/gl/LC_MESSAGES/OStatus.po756
-rw-r--r--plugins/OStatus/locale/ia/LC_MESSAGES/OStatus.po54
-rw-r--r--plugins/OStatus/locale/mk/LC_MESSAGES/OStatus.po54
-rw-r--r--plugins/OStatus/locale/nl/LC_MESSAGES/OStatus.po54
-rw-r--r--plugins/OStatus/locale/uk/LC_MESSAGES/OStatus.po54
-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/RealtimePlugin.php2
-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/ne/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.js306
-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/Notice_to_status.php7
-rw-r--r--plugins/TwitterBridge/TwitterBridgePlugin.php30
-rwxr-xr-xplugins/TwitterBridge/daemons/twitterstatusfetcher.php5
-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/twitter.php64
-rw-r--r--plugins/TwitterBridge/twitteradminpanel.php5
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php14
-rw-r--r--plugins/TwitterBridge/twitterimport.php52
-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/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/YammerImport/locale/gl/LC_MESSAGES/YammerImport.po268
270 files changed, 20115 insertions, 1587 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 66ffa6b7a..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-30 23:18+0000\n"
-"PO-Revision-Date: 2010-10-30 23:20:58+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-29 16:11:50+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75708); 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"
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/Autocomplete.js b/plugins/Autocomplete/Autocomplete.js
index 3eff685a8..c3f022702 100644
--- a/plugins/Autocomplete/Autocomplete.js
+++ b/plugins/Autocomplete/Autocomplete.js
@@ -1,37 +1,38 @@
$(document).ready(function(){
- $('#notice_data-text').autocomplete($('address .url')[0].href+'/plugins/Autocomplete/autocomplete.json', {
- multiple: true,
- multipleSeparator: " ",
- minChars: 1,
- formatItem: function(row, i, max){
- row = eval("(" + row + ")");
- switch(row.type)
- {
- case 'user':
- return row.nickname + ' (' + row.fullname + ')';
- case 'group':
- return row.nickname + ' (' + row.fullname + ')';
- }
- },
- formatMatch: function(row, i, max){
- row = eval("(" + row + ")");
- switch(row.type)
- {
- case 'user':
- return row.nickname;
- case 'group':
- return row.nickname;
- }
- },
- formatResult: function(row){
- row = eval("(" + row + ")");
- switch(row.type)
- {
- case 'user':
- return '@' + row.nickname;
- case 'group':
- return '!' + row.nickname;
- }
- }
- });
+ function fullName(row) {
+ if (typeof row.fullname == "string" && row.fullname != '') {
+ return row.nickname + ' (' + row.fullname + ')';
+ } else {
+ return row.nickname;
+ }
+ }
+ $('#notice_data-text').autocomplete($('address .url')[0].href+'main/autocomplete/suggest', {
+ multiple: true,
+ multipleSeparator: " ",
+ minChars: 1,
+ formatItem: function(row, i, max){
+ row = eval("(" + row + ")");
+ // the display:inline is because our INSANE stylesheets
+ // override the standard display of all img tags for no
+ // good reason.
+ var div = $('<div><img style="display:inline; vertical-align: middle"> <span></span></div>')
+ .find('img').attr('src', row.avatar).end()
+ .find('span').text(fullName(row)).end()
+ return div.html();
+ },
+ formatMatch: function(row, i, max){
+ row = eval("(" + row + ")");
+ return row.nickname;
+ },
+ formatResult: function(row){
+ row = eval("(" + row + ")");
+ switch(row.type)
+ {
+ case 'user':
+ return '@' + row.nickname;
+ case 'group':
+ return '!' + row.nickname;
+ }
+ }
+ });
});
diff --git a/plugins/Autocomplete/AutocompletePlugin.php b/plugins/Autocomplete/AutocompletePlugin.php
index 620b5e7b0..230ba089d 100644
--- a/plugins/Autocomplete/AutocompletePlugin.php
+++ b/plugins/Autocomplete/AutocompletePlugin.php
@@ -66,7 +66,7 @@ class AutocompletePlugin extends Plugin
function onRouterInitialized($m)
{
if (common_logged_in()) {
- $m->connect('plugins/Autocomplete/autocomplete.json', array('action'=>'autocomplete'));
+ $m->connect('main/autocomplete/suggest', array('action'=>'autocomplete'));
}
}
diff --git a/plugins/Autocomplete/README b/plugins/Autocomplete/README
index 1db4c6565..f5feb94a7 100644
--- a/plugins/Autocomplete/README
+++ b/plugins/Autocomplete/README
@@ -1,6 +1,13 @@
-Autocomplete 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 friends' screen names.
+Autocomplete allows users to autocomplete screen names in @ replies and
+! group references.
-Note: This plugin doesn't work if the site is in Private mode, i.e. when $config['site']['private'] is set to true.
+When an "@" or "!" is typed into the notice text area, an autocomplete box
+is displayed populated with the user's friends' screen names or group
+memberships.
+
+Completion suggestions can be selected via the mouse or arrow keys, and the
+suggestion can be inserted either by clicking or hitting tab. Hitting enter
+will also select the suggestion, but will submit your message too!
Installation
============
diff --git a/plugins/Autocomplete/autocomplete.php b/plugins/Autocomplete/autocomplete.php
index a4e2d9baa..c92002245 100644
--- a/plugins/Autocomplete/autocomplete.php
+++ b/plugins/Autocomplete/autocomplete.php
@@ -59,7 +59,7 @@ class AutocompleteAction extends Action
{
$max=0;
foreach($this->users as $user){
- $max = max($max,strtotime($user->modified),strtotime($user->profile->modified));
+ $max = max($max,strtotime($user->modified),strtotime($user->getProfile()->modified));
}
foreach($this->groups as $group){
$max = max($max,strtotime($group->modified));
@@ -87,7 +87,15 @@ class AutocompleteAction extends Action
function prepare($args)
{
+ // If we die, show short error messages.
+ StatusNet::setApi(true);
+
parent::prepare($args);
+
+ $cur = common_current_user();
+ if (!$cur) {
+ throw new ClientException('Access forbidden', true);
+ }
$this->groups=array();
$this->users=array();
$q = $this->arg('q');
@@ -126,10 +134,32 @@ class AutocompleteAction extends Action
$results = array();
foreach($this->users as $user){
$profile = $user->getProfile();
- $results[]=array('nickname' => $user->nickname, 'fullname'=> $profile->fullname, 'type'=>'user');
+ $avatar = $profile->getAvatar(AVATAR_MINI_SIZE);
+ // sigh.... encapsulate this upstream!
+ if ($avatar) {
+ $avatar = $avatar->displayUrl();
+ } else {
+ $avatar = Avatar::defaultImage(AVATAR_MINI_SIZE);
+ }
+ $results[] = array(
+ 'nickname' => $user->nickname,
+ 'fullname'=> $profile->fullname,
+ 'avatar' => $avatar,
+ 'type' => 'user'
+ );
}
foreach($this->groups as $group){
- $results[]=array('nickname' => $group->nickname, 'fullname'=> $group->fullname, 'type'=>'group');
+ // sigh.... encapsulate this upstream!
+ if ($group->mini_logo) {
+ $avatar = $group->mini_logo;
+ } else {
+ $avatar = User_group::defaultLogo(AVATAR_MINI_SIZE);
+ }
+ $results[] = array(
+ 'nickname' => $group->nickname,
+ 'fullname'=> $group->fullname,
+ 'avatar' => $avatar,
+ 'type' => 'group');
}
foreach($results as $result) {
print json_encode($result) . "\n";
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/Awesomeness/AwesomenessPlugin.php b/plugins/Awesomeness/AwesomenessPlugin.php
new file mode 100644
index 000000000..294f09438
--- /dev/null
+++ b/plugins/Awesomeness/AwesomenessPlugin.php
@@ -0,0 +1,110 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to add adittional awesomenss to StatusNet
+ *
+ * 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 Jeroen De Dauw <jeroendedauw@gmail.com>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Fun sample plugin: tweaks input data and adds a 'Cornify' widget to sidebar.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Jeroen De Dauw <jeroendedauw@gmail.com>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class AwesomenessPlugin extends Plugin
+{
+
+ const VERSION = '0.0.42';
+
+ public function onPluginVersion(&$versions)
+ {
+ $versions[] = array(
+ 'name' => 'Awesomeness',
+ 'version' => self::VERSION,
+ 'author' => 'Jeroen De Dauw',
+ 'homepage' => 'http://status.net/wiki/Plugin:Awesomeness',
+ 'rawdescription' => _m(
+ 'The Awesomeness plugin adds adittional awesomeness ' .
+ 'to your StatusNet install. '
+ )
+ );
+ return true;
+ }
+
+ /**
+ * Add the conrnify button
+ *
+ * @param Action $action the current action
+ *
+ * @return void
+ */
+
+ function onEndShowSections(Action $action)
+ {
+ $action->elementStart('div', array('id' => 'cornify_section',
+ 'class' => 'section'));
+
+ $action->raw(
+ <<<EOT
+ <a href="http://www.cornify.com" onclick="cornify_add();return false;">
+ <img src="http://www.cornify.com/assets/cornify.gif" width="61" height="16" border="0" alt="Cornify" />
+ </a>
+ <script type="text/javascript">(function() {
+ var js = document.createElement('script');
+ js.type = 'text/javascript';
+ js.async = true;
+ js.src = 'http://www.cornify.com/js/cornify.js';
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(js);
+})();</script>
+EOT
+ );
+
+ $action->elementEnd('div');
+ }
+
+ /**
+ * Hook for new-notice form processing to take our HTML goodies;
+ * won't affect API posting etc.
+ *
+ * @param NewNoticeAction $action
+ * @param User $user
+ * @param string $content
+ * @param array $options
+ * @return boolean hook return
+ */
+ function onStartSaveNewNoticeWeb($action, $user, &$content, &$options)
+ {
+ $content = htmlspecialchars($content);
+ $options['rendered'] = preg_replace("/(^|\s|-)((?:awesome|awesomeness)[\?!\.\,]?)(\s|$)/i", " <b>$2</b> ", $content);
+ }
+
+} \ No newline at end of file
diff --git a/plugins/BitlyUrl/BitlyUrlPlugin.php b/plugins/BitlyUrl/BitlyUrlPlugin.php
index f4d987489..532e66fbc 100644
--- a/plugins/BitlyUrl/BitlyUrlPlugin.php
+++ b/plugins/BitlyUrl/BitlyUrlPlugin.php
@@ -116,7 +116,7 @@ class BitlyUrlPlugin extends UrlShortenerPlugin
$params = http_build_query(array(
'login' => $this->getLogin(),
'apiKey' => $this->getApiKey()), '', '&');
- $serviceUrl = sprintf($this->serviceUrl, $url) . '&' . $params;
+ $serviceUrl = sprintf($this->serviceUrl, urlencode($url)) . '&' . $params;
$request = HTTPClient::start();
return $request->get($serviceUrl);
@@ -143,6 +143,10 @@ class BitlyUrlPlugin extends UrlShortenerPlugin
common_log(LOG_INFO, $body);
$json = json_decode($body, true);
if ($json['statusCode'] == 'OK') {
+ if (!isset($json['results'][$url])) {
+ common_log(LOG_ERR, "bit.ly returned OK response, but didn't find expected URL $url in $body");
+ return false;
+ }
$data = $json['results'][$url];
if (isset($data['shortUrl'])) {
return true;
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 0680fec71..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-30 23:18+0000\n"
-"PO-Revision-Date: 2010-10-30 23:21:30+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-29 16:12:45+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75708); 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"
@@ -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/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..65f896ca2
--- /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.min.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..407934c5a
--- /dev/null
+++ b/plugins/LinkPreview/linkpreview.js
@@ -0,0 +1,247 @@
+/**
+ * (c) 2010 StatusNet, Inc.
+ */
+
+(function() {
+ /**
+ * Quickie wrapper around ooembed JSON lookup
+ */
+ 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()
+ };
+ $.ajax({
+ url: oEmbed.api,
+ data: params,
+ dataType: 'json',
+ success: function(data, xhr) {
+ callback(data);
+ },
+ error: function(xhr, textStatus, errorThrown) {
+ callback(null);
+ }
+ });
+ }
+ };
+
+ var LinkPreview = {
+ links: [],
+ state: [],
+ refresh: [],
+
+ /**
+ * 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 {number} col: column number to insert preview into
+ */
+ prepLinkPreview: function(col)
+ {
+ var id = 'link-preview-' + col;
+ var url = LinkPreview.links[col];
+ LinkPreview.refresh[col] = false;
+ LinkPreview.markLoading(col);
+
+ oEmbed.lookup(url, function(data) {
+ var thumb = null;
+ var width = 100;
+ if (data && 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 && 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).empty();
+ $('#' + id).append(link);
+ } else {
+ // No thumbnail available or error retriving it.
+ LinkPreview.clearLink(col);
+ }
+
+ if (LinkPreview.refresh[col]) {
+ // Darn user has typed more characters.
+ // Go fetch another link!
+ LinkPreview.prepLinkPreview(col);
+ } else {
+ LinkPreview.markDone(col);
+ }
+ });
+ },
+
+ /**
+ * 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 i;
+ var old = LinkPreview.links;
+ var links = LinkPreview.findLinks(text);
+ LinkPreview.links = links;
+
+ // Check for existing common elements...
+ for (i = 0; i < old.length && i < links.length; i++) {
+ if (links[i] != old[i]) {
+ if (LinkPreview.state[i] == "loading") {
+ // Slate this column for a refresh when this one's done.
+ LinkPreview.refresh[i] = true;
+ } else {
+ // Change an existing entry!
+ LinkPreview.prepLinkPreview(i);
+ }
+ }
+ }
+ if (links.length > old.length) {
+ // Adding new entries, whee!
+ for (i = old.length; i < links.length; i++) {
+ LinkPreview.addPreviewArea(i);
+ LinkPreview.prepLinkPreview(i);
+ }
+ } else if (old.length > links.length) {
+ // Remove preview entries for links that have been removed.
+ for (i = links.length; i < old.length; i++) {
+ LinkPreview.clearLink(i);
+ }
+ }
+ },
+
+ addPreviewArea: function(col) {
+ var id = 'link-preview-' + col;
+ $('#link-preview').append('<span id="' + id + '"></span>');
+ },
+
+ clearLink: function(col) {
+ var id = 'link-preview-' + col;
+ $('#' + id).html('');
+ },
+
+ markLoading: function(col) {
+ LinkPreview.state[col] = "loading";
+ var id = 'link-preview-' + col;
+ $('#' + id).attr('style', 'opacity: 0.5');
+ },
+
+ markDone: function(col) {
+ LinkPreview.state[col] = "done";
+ var id = 'link-preview-' + col;
+ $('#' + id).removeAttr('style');
+ },
+
+ /**
+ * 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/linkpreview.min.js b/plugins/LinkPreview/linkpreview.min.js
new file mode 100644
index 000000000..a6fb9dba8
--- /dev/null
+++ b/plugins/LinkPreview/linkpreview.min.js
@@ -0,0 +1 @@
+(function(){var a={api:"http://oohembed.com/oohembed",width:100,height:75,cache:{},callbacks:{},lookup:function(c,d){if(typeof a.cache[c]=="object"){d(a.cache[c])}else{if(typeof a.callbacks[c]=="undefined"){a.callbacks[c]=[d];a.rawLookup(c,function(g){a.cache[c]=g;var f=a.callbacks[c];a.callbacks[c]=undefined;for(var e=0;e<f.length;e++){f[e](g)}})}else{a.callbacks[c].push(d)}}},rawLookup:function(c,e){var d={url:c,format:"json",maxwidth:a.width,maxheight:a.height,token:$("#token").val()};$.ajax({url:a.api,data:d,dataType:"json",success:function(f,g){e(f)},error:function(g,h,f){e(null)}})}};var b={links:[],state:[],refresh:[],findLinks:function(f){var d=/(?:^| )(https?:\/\/.+?\/.+?)(?= |$)/mg;var c=[];var e;while((e=d.exec(f))!==null){c.push(e[1])}return c},prepLinkPreview:function(d){var e="link-preview-"+d;var c=b.links[d];b.refresh[d]=false;b.markLoading(d);a.lookup(c,function(i){var f=null;var g=100;if(i&&typeof i.thumbnail_url=="string"){f=i.thumbnail_url;if(typeof i.thumbnail_width!=="undefined"){if(i.thumbnail_width<g){g=i.thumbnail_width}}}else{if(i&&i.type=="photo"&&typeof i.url=="string"){f=i.url;if(typeof i.width!=="undefined"){if(i.width<g){g=i.width}}}}if(f){var h=$('<span class="inline-attachment"><a><img/></a></span>');h.find("a").attr("href",c).attr("target","_blank").last().find("img").attr("src",f).attr("width",g).attr("title",i.title||i.url||c);$("#"+e).empty();$("#"+e).append(h)}else{b.clearLink(d)}if(b.refresh[d]){b.prepLinkPreview(d)}else{b.markDone(d)}})},previewLinks:function(f){var e;var c=b.links;var d=b.findLinks(f);b.links=d;for(e=0;e<c.length&&e<d.length;e++){if(d[e]!=c[e]){if(b.state[e]=="loading"){b.refresh[e]=true}else{b.prepLinkPreview(e)}}}if(d.length>c.length){for(e=c.length;e<d.length;e++){b.addPreviewArea(e);b.prepLinkPreview(e)}}else{if(c.length>d.length){for(e=d.length;e<c.length;e++){b.clearLink(e)}}}},addPreviewArea:function(c){var d="link-preview-"+c;$("#link-preview").append('<span id="'+d+'"></span>')},clearLink:function(c){var d="link-preview-"+c;$("#"+d).html("")},markLoading:function(c){b.state[c]="loading";var d="link-preview-"+c;$("#"+d).attr("style","opacity: 0.5")},markDone:function(c){b.state[c]="done";var d="link-preview-"+c;$("#"+d).removeAttr("style")},clear:function(){b.links=[];$("#link-preview").empty()}};SN.Init.LinkPreview=function(c){if(c.api){a.api=c.api}if(c.width){a.width=c.width}if(c.height){a.height=c.height}$("#form_notice").append('<div id="link-preview" class="thumbnails"></div>').bind("reset",function(){b.clear()});var d=SN.U.Counter;SN.U.Counter=function(e){b.previewLinks($("#notice_data-text").val());return d(e)}}})(); \ No newline at end of file
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..bc80ee5cf
--- /dev/null
+++ b/plugins/LinkPreview/oembedproxyaction.php
@@ -0,0 +1,87 @@
+<?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)
+ {
+ // Trigger short error responses; not a human-readable web page.
+ StatusNet::setApi(true);
+
+ // 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 08465e0a7..d1a7bd0ed 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;
}
@@ -156,7 +156,8 @@ class MapstractionPlugin extends Plugin
' var user = null; '.
(($actionName == 'showstream') ? ' user = scrapeUser(); ' : '') .
' var notices = scrapeNotices(user); ' .
- ' showMapstraction($("#map_canvas"), notices); '.
+ ' var canvas = $("#map_canvas")[0]; ' .
+ ' if (typeof(canvas) != "undefined") { showMapstraction(canvas, notices); } '.
'});');
}
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/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/ModPlusPlugin.php b/plugins/ModPlus/ModPlusPlugin.php
new file mode 100644
index 000000000..3e7a8c745
--- /dev/null
+++ b/plugins/ModPlus/ModPlusPlugin.php
@@ -0,0 +1,116 @@
+<?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 ModPlusPlugin
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+class ModPlusPlugin extends Plugin
+{
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'ModPlus',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Brion Vibber',
+ 'homepage' => 'http://status.net/wiki/Plugin:ModPlus',
+ 'rawdescription' =>
+ _m('UI extensions for profile moderation actions.'));
+
+ 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) {
+ $action->script('plugins/ModPlus/modplus.js');
+ }
+ return true;
+ }
+
+ function onEndShowStatusNetStyles($action) {
+ $action->cssLink('plugins/ModPlus/modplus.css');
+ return true;
+ }
+
+ /**
+ * Autoloader
+ *
+ * Loads our classes if they're requested.
+ *
+ * @param string $cls Class requested
+ *
+ * @return boolean hook return
+ */
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'RemoteprofileAction':
+ case 'RemoteProfileAction':
+ require_once dirname(__FILE__) . '/remoteprofileaction.php';
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ /**
+ * Add OpenID-related paths to the router table
+ *
+ * Hook for RouterInitialized event.
+ *
+ * @param Net_URL_Mapper $m URL mapper
+ *
+ * @return boolean hook return
+ */
+ function onStartInitializeRouter($m)
+ {
+ $m->connect('user/remote/:id',
+ array('action' => 'remoteprofile'),
+ array('id' => '[\d]+'));
+
+ return true;
+ }
+
+ function onStartShowNoticeItem($item)
+ {
+ $profile = $item->profile;
+ $isRemote = !(User::staticGet('id', $profile->id));
+ if ($isRemote) {
+ $target = common_local_url('remoteprofile', array('id' => $profile->id));
+ $label = _m('Remote profile options...');
+ $item->out->elementStart('div', 'remote-profile-options');
+ $item->out->element('a', array('href' => $target), $label);
+ $item->out->elementEnd('div');
+ }
+ }
+}
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/ModPlus/modplus.css b/plugins/ModPlus/modplus.css
new file mode 100644
index 000000000..8d2fc8fba
--- /dev/null
+++ b/plugins/ModPlus/modplus.css
@@ -0,0 +1,23 @@
+.remote-profile-options {
+ position: absolute;
+ z-index: 999;
+
+ background: url(../../theme/base/images/icons/twotone/green/admin.gif) no-repeat 8px 8px white;
+ border: solid 1px #c0c0c0;
+
+ margin-top: 56px;
+
+ padding: 6px 16px;
+ padding-left: 32px;
+
+ -moz-border-radius: 8px;
+ -webkit-border-radius: 8px;
+ -msie-border-radius: 8px;
+ border-radius: 8px;
+
+ box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+ -moz-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+ -webkit-box-shadow:3px 3px 7px rgba(194, 194, 194, 0.3);
+
+ display: none;
+}
diff --git a/plugins/ModPlus/modplus.js b/plugins/ModPlus/modplus.js
new file mode 100644
index 000000000..2e90de4f1
--- /dev/null
+++ b/plugins/ModPlus/modplus.js
@@ -0,0 +1,23 @@
+/**
+ * modplus.js
+ * (c) 2010 StatusNet, Inc
+ */
+
+$(function() {
+ function ModPlus_setup(notice) {
+ if ($(notice).find('.remote-profile-options').size()) {
+ var $options = $(notice).find('.remote-profile-options');
+ $options.prepend($())
+ $(notice).find('.author').mouseenter(function(event) {
+ $(notice).find('.remote-profile-options').fadeIn();
+ });
+ $(notice).mouseleave(function(event) {
+ $(notice).find('.remote-profile-options').fadeOut();
+ });
+ }
+ }
+
+ $('.notice').each(function() {
+ ModPlus_setup(this);
+ });
+});
diff --git a/plugins/ModPlus/remoteprofileaction.php b/plugins/ModPlus/remoteprofileaction.php
new file mode 100644
index 000000000..caa5e6fbf
--- /dev/null
+++ b/plugins/ModPlus/remoteprofileaction.php
@@ -0,0 +1,106 @@
+<?php
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+class RemoteProfileAction extends ShowstreamAction
+{
+ function prepare($args)
+ {
+ OwnerDesignAction::prepare($args); // skip the ProfileAction code and replace it...
+
+ $id = $this->arg('id');
+ $this->user = false;
+ $this->profile = Profile::staticGet('id', $id);
+
+ if (!$this->profile) {
+ $this->serverError(_('User has no profile.'));
+ return false;
+ }
+
+ $user = User::staticGet('id', $this->profile->id);
+ if ($user) {
+ // This is a local user -- send to their regular profile.
+ $url = common_local_url('showstream', array('nickname' => $user->nickname));
+ common_redirect($url);
+ return false;
+ }
+
+ $this->tag = $this->trimmed('tag');
+ $this->page = ($this->arg('page')) ? ($this->arg('page')+0) : 1;
+ common_set_returnto($this->selfUrl());
+ return true;
+ }
+
+ function handle($args)
+ {
+ // skip yadis thingy
+ $this->showPage();
+ }
+
+ function title()
+ {
+ // maybe fixed in 0.9.x
+ if (!empty($this->profile->fullname)) {
+ $base = $this->profile->fullname . ' (' . $this->profile->nickname . ') ';
+ } else {
+ $base = $this->profile->nickname;
+ }
+ $host = parse_url($this->profile->profileurl, PHP_URL_HOST);
+ return sprintf(_m('%s on %s'), $base, $host);
+ }
+
+ /**
+ * Instead of showing notices, link to the original offsite profile.
+ */
+ function showNotices()
+ {
+ $url = $this->profile->profileurl;
+ $host = parse_url($url, PHP_URL_HOST);
+ $markdown = sprintf(
+ _m('This remote profile is registered on another site; see [%s\'s original profile page on %s](%s).'),
+ $this->profile->nickname,
+ $host,
+ $url);
+ $html = common_markup_to_html($markdown);
+ $this->raw($html);
+
+ if ($this->profile->hasRole(Profile_role::SILENCED)) {
+ $markdown = _m('Site moderators have silenced this profile, which prevents delivery of new messages to any users on this site.');
+ $this->raw(common_markup_to_html($markdown));
+ }
+ }
+
+ function getFeeds()
+ {
+ // none
+ }
+
+ /**
+ * Don't do various extra stuff, and also trim some things to avoid crawlers.
+ */
+ function extraHead()
+ {
+ $this->element('meta', array('name' => 'robots',
+ 'content' => 'noindex,nofollow'));
+ }
+
+ function showLocalNav()
+ {
+ $nav = new PublicGroupNav($this);
+ $nav->show();
+ }
+
+ function showSections()
+ {
+ ProfileAction::showSections();
+ // skip tag cloud
+ }
+
+ function showStatistics()
+ {
+ // skip
+ }
+
+} \ No newline at end of file
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 e38d52d3d..f846a2fc8 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -52,8 +52,6 @@ class OStatusPlugin extends Plugin
function onRouterInitialized($m)
{
// Discovery actions
- $m->connect('main/xrd',
- array('action' => 'userxrd'));
$m->connect('main/ownerxrd',
array('action' => 'ownerxrd'));
$m->connect('main/ostatus',
@@ -1010,11 +1008,43 @@ class OStatusPlugin extends Plugin
return true;
}
- function onStartHostMetaLinks(&$links) {
- $url = common_local_url('userxrd');
- $url.= '?uri={uri}';
- $links[] = array('rel' => Discovery::LRDD_REL,
- 'template' => $url,
- 'title' => array('Resource Descriptor'));
+ 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/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/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 745a87c98..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-11-02 22:51+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>."
@@ -344,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 ""
@@ -423,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 2d0a49c31..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-11-02 22:51+0000\n"
-"PO-Revision-Date: 2010-11-02 22:54:51+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-29 16:13:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75875); 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>."
@@ -371,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."
@@ -459,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 f2f322de0..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-11-02 22:51+0000\n"
-"PO-Revision-Date: 2010-11-02 22:54:51+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-29 16:13:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75875); 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>."
@@ -356,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."
@@ -438,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 fe2cb7e10..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-11-02 22:51+0000\n"
-"PO-Revision-Date: 2010-11-02 22:54:51+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-29 16:13:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75875); 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>."
@@ -360,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 "Не можам да го пронајдам јавниот клуч на потписникот."
@@ -441,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 d37b8cb01..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-11-02 22:51+0000\n"
-"PO-Revision-Date: 2010-11-02 22:54:51+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-29 16:13:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75875); 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>."
@@ -373,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 ""
@@ -459,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 88ba205b1..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-11-02 22:51+0000\n"
-"PO-Revision-Date: 2010-11-02 22:54:51+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-29 16:13:55+0000\n"
-"X-Generator: MediaWiki 1.17alpha (r75875); 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>."
@@ -362,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 "Не вдалося знайти публічного ключа підписанта."
@@ -445,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 07bf0396d..d1a6786fa 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -757,4 +757,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/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index 99d1ff9c1..113187e1e 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -322,7 +322,7 @@ class RealtimePlugin extends Plugin
function _getScripts()
{
- return array('plugins/Realtime/realtimeupdate.js');
+ return array('plugins/Realtime/realtimeupdate.min.js');
}
/**
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/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/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.js b/plugins/Realtime/realtimeupdate.js
index f49cef95e..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);
@@ -271,6 +480,15 @@ RealtimeUpdate = {
});
},
+ /**
+ * 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);
@@ -284,6 +502,17 @@ RealtimeUpdate = {
});
},
+ /**
+ * 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;
@@ -292,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) {
@@ -303,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(
@@ -329,11 +585,38 @@ 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"></button>');
@@ -348,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/Notice_to_status.php b/plugins/TwitterBridge/Notice_to_status.php
index 2e32ba963..3b8f816cf 100644
--- a/plugins/TwitterBridge/Notice_to_status.php
+++ b/plugins/TwitterBridge/Notice_to_status.php
@@ -144,6 +144,7 @@ class Notice_to_status extends Memcached_DataObject
/**
* Save a mapping between a notice and a status
+ * Warning: status_id values may not fit in 32-bit integers.
*
* @param integer $notice_id ID of the notice in StatusNet
* @param integer $status_id ID of the status in Twitter
@@ -153,12 +154,18 @@ class Notice_to_status extends Memcached_DataObject
static function saveNew($notice_id, $status_id)
{
+ if (empty($notice_id)) {
+ throw new Exception("Invalid notice_id $notice_id");
+ }
$n2s = Notice_to_status::staticGet('notice_id', $notice_id);
if (!empty($n2s)) {
return $n2s;
}
+ if (empty($status_id)) {
+ throw new Exception("Invalid status_id $status_id");
+ }
$n2s = Notice_to_status::staticGet('status_id', $status_id);
if (!empty($n2s)) {
diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php
index f5c361250..b2dce6f1c 100644
--- a/plugins/TwitterBridge/TwitterBridgePlugin.php
+++ b/plugins/TwitterBridge/TwitterBridgePlugin.php
@@ -438,10 +438,14 @@ class TwitterBridgePlugin extends Plugin
return true;
}
- $token = TwitterOAuthClient::unpackToken($flink->credentials);
- $client = new TwitterOAuthClient($token->key, $token->secret);
+ try {
+ $token = TwitterOAuthClient::unpackToken($flink->credentials);
+ $client = new TwitterOAuthClient($token->key, $token->secret);
- $client->statusesDestroy($n2s->status_id);
+ $client->statusesDestroy($n2s->status_id);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Error attempting to delete bridged notice from Twitter: " . $e->getMessage());
+ }
$n2s->delete();
}
@@ -475,10 +479,14 @@ class TwitterBridgePlugin extends Plugin
return true;
}
- $token = TwitterOAuthClient::unpackToken($flink->credentials);
- $client = new TwitterOAuthClient($token->key, $token->secret);
+ try {
+ $token = TwitterOAuthClient::unpackToken($flink->credentials);
+ $client = new TwitterOAuthClient($token->key, $token->secret);
- $client->favoritesCreate($status_id);
+ $client->favoritesCreate($status_id);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Error attempting to favorite bridged notice on Twitter: " . $e->getMessage());
+ }
return true;
}
@@ -511,10 +519,14 @@ class TwitterBridgePlugin extends Plugin
return true;
}
- $token = TwitterOAuthClient::unpackToken($flink->credentials);
- $client = new TwitterOAuthClient($token->key, $token->secret);
+ try {
+ $token = TwitterOAuthClient::unpackToken($flink->credentials);
+ $client = new TwitterOAuthClient($token->key, $token->secret);
- $client->favoritesDestroy($status_id);
+ $client->favoritesDestroy($status_id);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Error attempting to unfavorite bridged notice on Twitter: " . $e->getMessage());
+ }
return true;
}
diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
index 9298d9e3a..06ce43037 100755
--- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
+++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
@@ -205,8 +205,9 @@ 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
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/twitter.php b/plugins/TwitterBridge/twitter.php
index cd1ad70b9..e8d11f3b6 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -128,6 +128,44 @@ function is_twitter_notice($id)
return (!empty($n2s));
}
+/**
+ * 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
+ *
+ * This function is meant to be called directly from TwitterQueueHandler.
+ *
+ * @param Notice $notice
+ * @return boolean true if complete or successful, false if we should retry
+ */
function broadcast_twitter($notice)
{
$flink = Foreign_link::getByUserID($notice->profile_id,
@@ -137,8 +175,13 @@ function broadcast_twitter($notice)
if (!empty($flink) && TwitterOAuthClient::isPackedToken($flink->credentials)) {
if (!empty($notice->repeat_of) && is_twitter_notice($notice->repeat_of)) {
$retweet = retweet_notice($flink, Notice::staticGet('id', $notice->repeat_of));
- if (!empty($retweet)) {
- Notice_to_status::saveNew($notice->id, $retweet->id);
+ if (is_object($retweet)) {
+ Notice_to_status::saveNew($notice->id, twitter_id($retweet));
+ return true;
+ } else {
+ // Our error processing will have decided if we need to requeue
+ // this or can discard safely.
+ return $retweet;
}
} else if (is_twitter_bound($notice, $flink)) {
return broadcast_oauth($notice, $flink);
@@ -148,6 +191,21 @@ function broadcast_twitter($notice)
return true;
}
+/**
+ * Send a retweet to Twitter for a notice that has been previously bridged
+ * in or out.
+ *
+ * Warning: the return value is not guaranteed to be an object; some error
+ * conditions will return a 'true' which should be passed on to a calling
+ * queue handler.
+ *
+ * No local information about the resulting retweet is saved: it's up to
+ * caller to save new mappings etc if appropriate.
+ *
+ * @param Foreign_link $flink
+ * @param Notice $notice
+ * @return mixed object with resulting Twitter status data on success, or true/false/null on error conditions.
+ */
function retweet_notice($flink, $notice)
{
$token = TwitterOAuthClient::unpackToken($flink->credentials);
@@ -212,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/twitteradminpanel.php b/plugins/TwitterBridge/twitteradminpanel.php
index d05a2c6b3..1a83b47d5 100644
--- a/plugins/TwitterBridge/twitteradminpanel.php
+++ b/plugins/TwitterBridge/twitteradminpanel.php
@@ -133,6 +133,11 @@ class TwitteradminpanelAction extends AdminPanelAction
$config->query('COMMIT');
+ // Flush the router cache: we may have enabled/disabled bridging,
+ // which will add or remove some actions.
+ $cache = Cache::instance();
+ $cache->delete(Router::cacheKey());
+
return;
}
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
index 07a9cf95f..143543d8e 100644
--- a/plugins/TwitterBridge/twitterimport.php
+++ b/plugins/TwitterBridge/twitterimport.php
@@ -56,7 +56,7 @@ class TwitterImport
if (preg_match("/$source/", mb_strtolower($status->source))) {
common_debug($this->name() . ' - Skipping import of status ' .
- $status->id . ' with source ' . $source);
+ twitter_id($status) . ' with source ' . $source);
return null;
}
@@ -86,23 +86,24 @@ class TwitterImport
return null;
}
- $statusUri = $this->makeStatusURI($status->user->screen_name, $status->id);
+ $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', $status->id);
+ $n2s = Notice_to_status::staticGet('status_id', $statusId);
if (!empty($n2s)) {
common_log(
LOG_INFO,
$this->name() .
- " - Ignoring duplicate import: {$status->id}"
+ " - 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 {$status->id} is a retweet of {$status->retweeted_status->id}.");
+ 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;
@@ -126,7 +127,7 @@ class TwitterImport
'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);
+ Notice_to_status::saveNew($repeat->id, $statusId);
return $repeat;
}
}
@@ -145,17 +146,18 @@ class TwitterImport
$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);
+ $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 {$status->in_reply_to_status_id}");
+ 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 {$status->in_reply_to_status_id}");
+ common_log(LOG_INFO, "Couldn't find local notice for status {$replyTo}");
} else {
- common_log(LOG_INFO, "Found local notice {$reply->id} for status {$status->in_reply_to_status_id}");
+ common_log(LOG_INFO, "Found local notice {$reply->id} for status {$replyTo}");
$notice->reply_to = $reply->id;
$notice->conversation = $reply->conversation;
}
@@ -165,7 +167,7 @@ class TwitterImport
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}.");
+ common_log(LOG_INFO, "No known conversation for status {$statusId} so making a new one {$conv->id}.");
}
$notice->is_local = Notice::GATEWAY;
@@ -186,9 +188,10 @@ class TwitterImport
Event::handle('EndNoticeSave', array($notice));
}
- Notice_to_status::saveNew($notice->id, $status->id);
+ Notice_to_status::saveNew($notice->id, $statusId);
$this->saveStatusMentions($notice, $status);
+ $this->saveStatusAttachments($notice, $status);
$notice->blowOnInsert();
@@ -542,7 +545,8 @@ class TwitterImport
$text = $status->text;
if (empty($status->entities)) {
- common_log(LOG_WARNING, "No entities data for {$status->id}; trying to fake up links ourselves.");
+ $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);
@@ -648,4 +652,22 @@ class TwitterImport
}
}
}
+
+ /**
+ * 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/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/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/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."