summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--EVENTS.txt54
-rw-r--r--Makefile18
-rw-r--r--actions/all.php87
-rw-r--r--actions/apiblockcreate.php11
-rw-r--r--actions/designadminpanel.php53
-rw-r--r--actions/forward.php122
-rw-r--r--actions/groupdesignsettings.php13
-rw-r--r--actions/login.php12
-rw-r--r--actions/subscribers.php2
-rw-r--r--actions/subscriptions.php2
-rw-r--r--actions/twitapisearchatom.php2
-rw-r--r--actions/userbyid.php2
-rw-r--r--actions/userdesignsettings.php14
-rw-r--r--classes/Design.php2
-rw-r--r--classes/Forward.php126
-rw-r--r--classes/Login_token.php42
-rw-r--r--classes/Notice.php34
-rw-r--r--classes/Notice_inbox.php42
-rw-r--r--classes/Profile.php8
-rw-r--r--classes/User.php24
-rw-r--r--classes/statusnet.ini10
-rw-r--r--config.php.sample7
-rw-r--r--db/08to09.sql23
-rw-r--r--db/08to09_pg.sql10
-rw-r--r--db/statusnet.sql21
-rw-r--r--db/statusnet_pg.sql12
-rw-r--r--extlib/DB/DataObject.php258
-rw-r--r--extlib/DB/DataObject/Generator.php21
-rw-r--r--js/util.js33
-rw-r--r--lib/action.php2
-rw-r--r--lib/api.php11
-rw-r--r--lib/command.php32
-rw-r--r--lib/commandinterpreter.php6
-rw-r--r--lib/default.php3
-rw-r--r--lib/designsettings.php66
-rw-r--r--lib/error.php2
-rw-r--r--lib/forwardform.php147
-rw-r--r--lib/htmloutputter.php100
-rw-r--r--lib/language.php125
-rw-r--r--lib/messageform.php3
-rw-r--r--lib/noticeform.php3
-rw-r--r--lib/noticelist.php21
-rw-r--r--lib/plugin.php29
-rw-r--r--lib/router.php4
-rw-r--r--lib/rssaction.php2
-rw-r--r--lib/schema.php18
-rw-r--r--lib/subs.php6
-rw-r--r--lib/util.php27
-rw-r--r--lib/xmloutputter.php5
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po156
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po270
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po231
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po406
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po165
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po157
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po401
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po3155
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po131
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po133
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po140
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po220
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po133
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po133
-rw-r--r--locale/statusnet.po123
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po2517
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po199
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po129
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po129
-rw-r--r--plugins/Facebook/FBConnectAuth.php62
-rw-r--r--plugins/Facebook/FBConnectLogin.php6
-rw-r--r--plugins/Facebook/FBConnectSettings.php30
-rw-r--r--plugins/Facebook/FacebookPlugin.php14
-rw-r--r--plugins/Facebook/facebookaction.php36
-rw-r--r--plugins/Facebook/facebookhome.php20
-rw-r--r--plugins/Facebook/facebookinvite.php12
-rw-r--r--plugins/Facebook/facebooklogin.php2
-rw-r--r--plugins/Facebook/facebookremove.php2
-rw-r--r--plugins/Facebook/facebooksettings.php20
-rw-r--r--plugins/Facebook/facebookutil.php6
-rw-r--r--plugins/Facebook/locale/Facebook.po394
-rw-r--r--plugins/FeedSub/FeedSubPlugin.php5
-rw-r--r--plugins/FeedSub/actions/feedsubsettings.php40
-rw-r--r--plugins/FeedSub/feedmunger.php2
-rw-r--r--plugins/FeedSub/locale/FeedSub.po104
-rw-r--r--plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po106
-rw-r--r--plugins/FeedSub/tests/gettext-speedtest.php78
-rw-r--r--plugins/FirePHP/FirePHPPlugin.php59
-rw-r--r--plugins/FirePHP/README21
-rw-r--r--plugins/FirePHP/extlib/FirePHP/CHANGELOG110
-rw-r--r--plugins/FirePHP/extlib/FirePHP/CREDITS12
-rw-r--r--plugins/FirePHP/extlib/FirePHP/README32
-rw-r--r--plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php1529
-rw-r--r--plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php41292
-rw-r--r--plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE29
-rw-r--r--plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php261
-rw-r--r--plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4251
-rw-r--r--plugins/GeonamesPlugin.php80
-rw-r--r--plugins/GoogleAnalyticsPlugin.php8
-rw-r--r--plugins/Mapstraction/MapstractionPlugin.php82
-rw-r--r--plugins/Mapstraction/allmap.php72
-rw-r--r--plugins/Mapstraction/locale/Mapstraction.po48
-rw-r--r--plugins/Mapstraction/map.php167
-rw-r--r--plugins/Mapstraction/usermap.js87
-rw-r--r--plugins/Mapstraction/usermap.php70
-rw-r--r--plugins/Minify/MinifyPlugin.php168
-rw-r--r--plugins/Minify/README34
-rw-r--r--plugins/Minify/extlib/minify/HISTORY.txt75
-rw-r--r--plugins/Minify/extlib/minify/LICENSE.txt26
-rw-r--r--plugins/Minify/extlib/minify/README.txt53
-rw-r--r--plugins/Minify/extlib/minify/UPGRADING.txt35
-rw-r--r--plugins/Minify/extlib/minify/min/README.txt132
-rw-r--r--plugins/Minify/extlib/minify/min/builder/_index.js242
-rw-r--r--plugins/Minify/extlib/minify/min/builder/bm.js36
-rw-r--r--plugins/Minify/extlib/minify/min/builder/index.php182
-rw-r--r--plugins/Minify/extlib/minify/min/builder/ocCheck.php36
-rw-r--r--plugins/Minify/extlib/minify/min/builder/rewriteTest.js1
-rw-r--r--plugins/Minify/extlib/minify/min/groupsConfig.php34
-rw-r--r--plugins/Minify/extlib/minify/min/index.php66
-rw-r--r--plugins/Minify/extlib/minify/min/lib/FirePHP.php1370
-rw-r--r--plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php348
-rw-r--r--plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php326
-rw-r--r--plugins/Minify/extlib/minify/min/lib/JSMin.php314
-rw-r--r--plugins/Minify/extlib/minify/min/lib/JSMinPlus.php1872
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify.php532
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Build.php103
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/CSS.php83
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php250
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php270
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php130
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php125
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php137
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php90
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php202
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php78
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php94
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php132
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php82
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php118
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/HTML.php245
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php157
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Lines.php131
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Logger.php45
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Packer.php37
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/Source.php187
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php139
-rw-r--r--plugins/Minify/extlib/minify/min/lib/Solar/Dir.php199
-rw-r--r--plugins/Minify/extlib/minify/min/utils.php90
-rw-r--r--plugins/Minify/minify.php117
-rw-r--r--plugins/MobileProfile/MobileProfilePlugin.php13
-rw-r--r--plugins/OpenID/OpenIDPlugin.php8
-rw-r--r--plugins/OpenID/finishaddopenid.php20
-rw-r--r--plugins/OpenID/finishopenidlogin.php62
-rw-r--r--plugins/OpenID/locale/OpenID.po344
-rw-r--r--plugins/OpenID/openid.php18
-rw-r--r--plugins/OpenID/openidlogin.php22
-rw-r--r--plugins/OpenID/openidserver.php4
-rw-r--r--plugins/OpenID/openidsettings.php30
-rw-r--r--plugins/OpenID/openidtrust.php10
-rw-r--r--plugins/PiwikAnalyticsPlugin.php15
-rw-r--r--plugins/Realtime/RealtimePlugin.php15
-rw-r--r--plugins/Realtime/realtimeupdate.js77
-rw-r--r--plugins/Recaptcha/RecaptchaPlugin.php32
-rw-r--r--plugins/RequireValidatedEmail/README21
-rw-r--r--plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php52
-rw-r--r--plugins/Sample/SamplePlugin.php59
-rw-r--r--plugins/TwitterBridge/TwitterBridgePlugin.php11
-rwxr-xr-xplugins/TwitterBridge/daemons/twitterstatusfetcher.php21
-rw-r--r--plugins/TwitterBridge/locale/TwitterBridge.po128
-rw-r--r--plugins/TwitterBridge/twitter.php4
-rw-r--r--plugins/TwitterBridge/twitterauthorization.php10
-rw-r--r--plugins/TwitterBridge/twittersettings.php42
-rw-r--r--plugins/UserFlag/UserFlagPlugin.php6
-rwxr-xr-xscripts/fixup_utf8.php8
-rwxr-xr-xscripts/setup_status_network.sh4
-rwxr-xr-xscripts/update_po_templates.php211
-rwxr-xr-xscripts/update_pot.sh13
-rw-r--r--scripts/updateavatarurl.php8
-rw-r--r--theme/base/css/display.css7
-rw-r--r--theme/base/images/illustrations/illu_pattern-01.pngbin0 -> 538 bytes
-rw-r--r--theme/default/css/display.css22
-rw-r--r--theme/identica/css/display.css22
195 files changed, 23400 insertions, 4602 deletions
diff --git a/EVENTS.txt b/EVENTS.txt
index 34a222e8f..e0516f8f4 100644
--- a/EVENTS.txt
+++ b/EVENTS.txt
@@ -574,3 +574,57 @@ EndShortenUrl: After a URL has been shortened
- $shortenerName: name of the requested shortener
- $shortenedUrl: short version of the url
+StartCssLinkElement: Before a <link rel="stylesheet"..> element is written
+- $action
+- &$src
+- &$theme
+- &$media
+
+EndCssLinkElement: After a <link rel="stylesheet"..> element is written
+- $action
+- $src
+- $theme
+- $media
+
+StartStyleElement: Before a <style...> element is written
+- $action
+- &$code
+- &$type
+- &$media
+
+EndStyleElement: After a <style...> element is written
+- $action
+- $code
+- $type
+- $media
+
+StartScriptElement: Before a <script...> element is written
+- $action
+- &$src
+- &$type
+
+EndScriptElement: After a <script...> element is written
+- $action
+- $src
+- $type
+
+StartInlineScriptElement: Before a <script...> element is written
+- $action
+- &$code
+- &$type
+
+EndInlineScriptElement: After a <script...> element is written
+- $action
+- $code
+- $type
+
+StartLog: Before writing to the logs
+- &$priority
+- &$msg
+- &$filename
+
+EndLog: After writing to the logs
+- $priority
+- $msg
+- $filename
+
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000..6f45c1b83
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,18 @@
+# Warning: do not transform tabs to spaces in this file.
+
+all : translations
+
+core_mo = $(patsubst %.po,%.mo,$(wildcard locale/*/LC_MESSAGES/statusnet.po))
+plugin_mo = $(patsubst %.po,%.mo,$(wildcard plugins/*/locale/*/LC_MESSAGES/*.po))
+
+translations : $(core_mo) $(plugin_mo)
+
+clean :
+ rm -f $(core_mo) $(plugin_mo)
+
+updatepo :
+ php scripts/update_po_templates.php --all
+
+%.mo : %.po
+ msgfmt -o $@ $<
+
diff --git a/actions/all.php b/actions/all.php
index 61cedce74..2c96298fa 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -144,7 +144,7 @@ class AllAction extends ProfileAction
function showContent()
{
- $nl = new NoticeList($this->notice, $this);
+ $nl = new InboxNoticeList($this->notice, $this->user, $this);
$cnt = $nl->show();
@@ -160,12 +160,95 @@ class AllAction extends ProfileAction
function showPageTitle()
{
- $user =& common_current_user();
+ $user = common_current_user();
if ($user && ($user->id == $this->user->id)) {
$this->element('h1', null, _("You and friends"));
} else {
$this->element('h1', null, sprintf(_('%s and friends'), $this->user->nickname));
}
}
+}
+
+class InboxNoticeList extends NoticeList
+{
+ var $owner = null;
+
+ function __construct($notice, $owner, $out=null)
+ {
+ parent::__construct($notice, $out);
+ $this->owner = $owner;
+ }
+
+ function newListItem($notice)
+ {
+ return new InboxNoticeListItem($notice, $this->owner, $this->out);
+ }
+}
+class InboxNoticeListItem extends NoticeListItem
+{
+ var $owner = null;
+ var $ib = null;
+
+ function __construct($notice, $owner, $out=null)
+ {
+ parent::__construct($notice, $out);
+ $this->owner = $owner;
+
+ $this->ib = Notice_inbox::pkeyGet(array('user_id' => $owner->id,
+ 'notice_id' => $notice->id));
+ }
+
+ function showAuthor()
+ {
+ parent::showAuthor();
+ if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) {
+ $this->out->element('span', 'forward', _('Fwd'));
+ }
+ }
+
+ function showEnd()
+ {
+ if ($this->ib->source == NOTICE_INBOX_SOURCE_FORWARD) {
+
+ $forward = new Forward();
+
+ // FIXME: scary join!
+
+ $forward->query('SELECT profile_id '.
+ 'FROM forward JOIN subscription ON forward.profile_id = subscription.subscribed '.
+ 'WHERE subscription.subscriber = ' . $this->owner->id . ' '.
+ 'AND forward.notice_id = ' . $this->notice->id . ' '.
+ 'ORDER BY forward.created ');
+
+ $n = 0;
+
+ $firstForwarder = null;
+
+ while ($forward->fetch()) {
+ if (empty($firstForwarder)) {
+ $firstForwarder = Profile::staticGet('id', $forward->profile_id);
+ }
+ $n++;
+ }
+
+ $forward->free();
+ unset($forward);
+
+ $this->out->elementStart('span', 'forwards');
+
+ $link = XMLStringer::estring('a', array('href' => $firstForwarder->profileurl),
+ $firstForwarder->nickname);
+
+ if ($n == 1) {
+ $this->out->raw(sprintf(_('Forwarded by %s'), $link));
+ } else {
+ // XXX: use that cool ngettext thing
+ $this->out->raw(sprintf(_('Forwarded by %s and %d other(s)'), $link, $n - 1));
+ }
+
+ $this->out->elementEnd('span');
+ }
+ parent::showEnd();
+ }
}
diff --git a/actions/apiblockcreate.php b/actions/apiblockcreate.php
index 4f941f6c3..e79dec32d 100644
--- a/actions/apiblockcreate.php
+++ b/actions/apiblockcreate.php
@@ -98,6 +98,17 @@ class ApiBlockCreateAction extends ApiAuthAction
return;
}
+ // Don't allow blocking yourself!
+
+ if ($this->user->id == $this->other->id) {
+ $this->clientError(
+ _("You cannot block yourself!"),
+ 403,
+ $this->format
+ );
+ return;
+ }
+
if ($this->user->hasBlocked($this->other)
|| $this->user->block($this->other)
) {
diff --git a/actions/designadminpanel.php b/actions/designadminpanel.php
index 8bc8c4450..f862aff0e 100644
--- a/actions/designadminpanel.php
+++ b/actions/designadminpanel.php
@@ -129,8 +129,6 @@ class DesignadminpanelAction extends AdminPanelAction
$bgimage = $this->saveBackgroundImage();
- common_debug("background image: $bgimage");
-
static $settings = array('theme', 'logo');
$values = array();
@@ -141,13 +139,28 @@ class DesignadminpanelAction extends AdminPanelAction
$this->validate($values);
- // assert(all values are valid);
+ $oldtheme = common_config('site', 'theme');
+
+ $config = new Config();
+
+ $config->query('BEGIN');
+
+ // Only update colors if the theme has not changed.
+
+ if ($oldtheme == $values['theme']) {
- $bgcolor = new WebColor($this->trimmed('design_background'));
- $ccolor = new WebColor($this->trimmed('design_content'));
- $sbcolor = new WebColor($this->trimmed('design_sidebar'));
- $tcolor = new WebColor($this->trimmed('design_text'));
- $lcolor = new WebColor($this->trimmed('design_links'));
+ $bgcolor = new WebColor($this->trimmed('design_background'));
+ $ccolor = new WebColor($this->trimmed('design_content'));
+ $sbcolor = new WebColor($this->trimmed('design_sidebar'));
+ $tcolor = new WebColor($this->trimmed('design_text'));
+ $lcolor = new WebColor($this->trimmed('design_links'));
+
+ Config::save('design', 'backgroundcolor', $bgcolor->intValue());
+ Config::save('design', 'contentcolor', $ccolor->intValue());
+ Config::save('design', 'sidebarcolor', $sbcolor->intValue());
+ Config::save('design', 'textcolor', $tcolor->intValue());
+ Config::save('design', 'linkcolor', $lcolor->intValue());
+ }
$onoff = $this->arg('design_background-image_onoff');
@@ -162,9 +175,11 @@ class DesignadminpanelAction extends AdminPanelAction
$tile = $this->boolean('design_background-image_repeat');
- $config = new Config();
+ // Hack to use Design's bit setter
+ $scratch = new Design();
+ $scratch->setDisposition($on, $off, $tile);
- $config->query('BEGIN');
+ Config::save('design', 'disposition', $scratch->disposition);
foreach ($settings as $setting) {
Config::save('site', $setting, $values[$setting]);
@@ -174,21 +189,7 @@ class DesignadminpanelAction extends AdminPanelAction
Config::save('design', 'backgroundimage', $bgimage);
}
- Config::save('design', 'backgroundcolor', $bgcolor->intValue());
- Config::save('design', 'contentcolor', $ccolor->intValue());
- Config::save('design', 'sidebarcolor', $sbcolor->intValue());
- Config::save('design', 'textcolor', $tcolor->intValue());
- Config::save('design', 'linkcolor', $lcolor->intValue());
-
- // Hack to use Design's bit setter
- $scratch = new Design();
- $scratch->setDisposition($on, $off, $tile);
-
- Config::save('design', 'disposition', $scratch->disposition);
-
$config->query('COMMIT');
-
- return;
}
/**
@@ -212,6 +213,10 @@ class DesignadminpanelAction extends AdminPanelAction
}
// XXX: Should we restore the default dir settings, etc.? --Z
+
+ // XXX: I can't get it to show the new settings without forcing
+ // this terrible reload -- FIX ME!
+ common_redirect(common_local_url('designadminpanel'), 303);
}
/**
diff --git a/actions/forward.php b/actions/forward.php
new file mode 100644
index 000000000..194833fe0
--- /dev/null
+++ b/actions/forward.php
@@ -0,0 +1,122 @@
+<?php
+
+/**
+ * Forward action.
+ *
+ * PHP version 5
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ *
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Forward action
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ForwardAction extends Action
+{
+ var $user = null;
+ var $notice = null;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $this->user = common_current_user();
+
+ if (empty($this->user)) {
+ $this->clientError(_("Only logged-in users can forward notices."));
+ return false;
+ }
+
+ $id = $this->trimmed('notice');
+
+ if (empty($id)) {
+ $this->clientError(_("No notice specified."));
+ return false;
+ }
+
+ $this->notice = Notice::staticGet('id', $id);
+
+ if (empty($this->notice)) {
+ $this->clientError(_("No notice specified."));
+ return false;
+ }
+
+ if ($this->user->id == $this->notice->profile_id) {
+ $this->clientError(_("You can't forward your own notice."));
+ return false;
+ }
+
+ $token = $this->trimmed('token-'.$id);
+
+ if (empty($token) || $token != common_session_token()) {
+ $this->clientError(_("There was a problem with your session token. Try again, please."));
+ return false;
+ }
+
+ $profile = $this->user->getProfile();
+
+ if ($profile->hasForwarded($id)) {
+ $this->clientError(_("You already forwarded that notice."));
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Class handler.
+ *
+ * @param array $args query arguments
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ $forward = Forward::saveNew($this->user->id, $this->notice->id);
+
+ if ($this->boolean('ajax')) {
+ $this->startHTML('text/xml;charset=utf-8');
+ $this->elementStart('head');
+ $this->element('title', null, _('Forwarded'));
+ $this->elementEnd('head');
+ $this->elementStart('body');
+ $this->element('p', array('id' => 'forward_response'), _('Forwarded!'));
+ $this->elementEnd('body');
+ $this->elementEnd('html');
+ } else {
+ // FIXME!
+ }
+ }
+}
diff --git a/actions/groupdesignsettings.php b/actions/groupdesignsettings.php
index b87b7d156..1c998efe1 100644
--- a/actions/groupdesignsettings.php
+++ b/actions/groupdesignsettings.php
@@ -173,17 +173,12 @@ class GroupDesignSettingsAction extends DesignSettingsAction
function getWorkingDesign()
{
-
$design = null;
if (isset($this->group)) {
$design = $this->group->getDesign();
}
- if (empty($design)) {
- $design = $this->defaultDesign();
- }
-
return $design;
}
@@ -197,7 +192,13 @@ class GroupDesignSettingsAction extends DesignSettingsAction
function showContent()
{
- $this->showDesignForm($this->getWorkingDesign());
+ $design = $this->getWorkingDesign();
+
+ if (empty($design)) {
+ $design = Design::siteDesign();
+ }
+
+ $this->showDesignForm($design);
}
/**
diff --git a/actions/login.php b/actions/login.php
index cd1326813..a6f86c0ca 100644
--- a/actions/login.php
+++ b/actions/login.php
@@ -75,10 +75,15 @@ class LoginAction extends Action
function handle($args)
{
parent::handle($args);
+
+ $disabled = common_config('logincommand','disabled');
+
if (common_is_real_login()) {
$this->clientError(_('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$this->checkLogin();
+ } else if (!isset($disabled) && isset($args['user_id']) && isset($args['token'])){
+ $this->checkLogin($args['user_id'],$args['token']);
} else {
common_ensure_session();
$this->showForm();
@@ -95,7 +100,7 @@ class LoginAction extends Action
* @return void
*/
- function checkLogin()
+ function checkLogin($user_id=null, $token=null)
{
if(isset($token) && isset($user_id)){
//Token based login (from the LoginCommand)
@@ -137,11 +142,6 @@ class LoginAction extends Action
$user = common_check_user($nickname, $password);
}
- $nickname = common_canonical_nickname($this->trimmed('nickname'));
- $password = $this->arg('password');
-
- $user = common_check_user($nickname, $password);
-
if (!$user) {
$this->showForm(_('Incorrect username or password.'));
return;
diff --git a/actions/subscribers.php b/actions/subscribers.php
index df9ec9961..cc9452820 100644
--- a/actions/subscribers.php
+++ b/actions/subscribers.php
@@ -57,7 +57,7 @@ class SubscribersAction extends GalleryAction
function showPageNotice()
{
- $user =& common_current_user();
+ $user = common_current_user();
if ($user && ($user->id == $this->profile->id)) {
$this->element('p', null,
_('These are the people who listen to '.
diff --git a/actions/subscriptions.php b/actions/subscriptions.php
index cc7b38ee4..0dc5ee762 100644
--- a/actions/subscriptions.php
+++ b/actions/subscriptions.php
@@ -59,7 +59,7 @@ class SubscriptionsAction extends GalleryAction
function showPageNotice()
{
- $user =& common_current_user();
+ $user = common_current_user();
if ($user && ($user->id == $this->profile->id)) {
$this->element('p', null,
_('These are the people whose notices '.
diff --git a/actions/twitapisearchatom.php b/actions/twitapisearchatom.php
index 526ca2ae8..1cb8d7efe 100644
--- a/actions/twitapisearchatom.php
+++ b/actions/twitapisearchatom.php
@@ -71,7 +71,7 @@ class TwitapisearchatomAction extends ApiAction
* @see Action::__construct
*/
- function __construct($output='php://output', $indent=true)
+ function __construct($output='php://output', $indent=null)
{
parent::__construct($output, $indent);
}
diff --git a/actions/userbyid.php b/actions/userbyid.php
index 86a61f20b..ebff7e4a7 100644
--- a/actions/userbyid.php
+++ b/actions/userbyid.php
@@ -69,7 +69,7 @@ class UserbyidAction extends Action
if (!$id) {
$this->clientError(_('No id.'));
}
- $user =& User::staticGet($id);
+ $user = User::staticGet($id);
if (!$user) {
$this->clientError(_('No such user.'));
}
diff --git a/actions/userdesignsettings.php b/actions/userdesignsettings.php
index 568c1d624..31a097970 100644
--- a/actions/userdesignsettings.php
+++ b/actions/userdesignsettings.php
@@ -96,14 +96,8 @@ class UserDesignSettingsAction extends DesignSettingsAction
function getWorkingDesign()
{
-
$user = common_current_user();
$design = $user->getDesign();
-
- if (empty($design)) {
- $design = $this->defaultDesign();
- }
-
return $design;
}
@@ -117,7 +111,13 @@ class UserDesignSettingsAction extends DesignSettingsAction
function showContent()
{
- $this->showDesignForm($this->getWorkingDesign());
+ $design = $this->getWorkingDesign();
+
+ if (empty($design)) {
+ $design = Design::siteDesign();
+ }
+
+ $this->showDesignForm($design);
}
/**
diff --git a/classes/Design.php b/classes/Design.php
index 89ae50c8c..4e7d7dfb2 100644
--- a/classes/Design.php
+++ b/classes/Design.php
@@ -101,7 +101,7 @@ class Design extends Memcached_DataObject
}
if (0 != mb_strlen($css)) {
- $out->element('style', array('type' => 'text/css'), $css);
+ $out->style($css);
}
}
diff --git a/classes/Forward.php b/classes/Forward.php
new file mode 100644
index 000000000..e9b83a58b
--- /dev/null
+++ b/classes/Forward.php
@@ -0,0 +1,126 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Table Definition for location_namespace
+ */
+
+require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
+
+class Forward extends Memcached_DataObject
+{
+ ###START_AUTOCODE
+ /* the code below is auto generated do not remove the above tag */
+
+ public $__table = 'forward'; // table name
+ public $profile_id; // int(4) primary_key not_null
+ public $notice_id; // int(4) primary_key not_null
+ public $created; // datetime not_null default_0000-00-00%2000%3A00%3A00
+
+ /* Static get */
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Forward',$k,$v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+
+ function &pkeyGet($kv)
+ {
+ return Memcached_DataObject::pkeyGet('Forward', $kv);
+ }
+
+ static function saveNew($profile_id, $notice_id)
+ {
+ $forward = new Forward();
+
+ $forward->profile_id = $profile_id;
+ $forward->notice_id = $notice_id;
+ $forward->created = common_sql_now();
+
+ $forward->query('BEGIN');
+
+ if (!$forward->insert()) {
+ throw new ServerException(_("Couldn't insert forward."));
+ }
+
+ $ni = $forward->addToInboxes();
+
+ $forward->query('COMMIT');
+
+ $forward->blowCache($ni);
+
+ return $forward;
+ }
+
+ function addToInboxes()
+ {
+ $inbox = new Notice_inbox();
+
+ $user = new User();
+
+ $user->query('SELECT user.* FROM user JOIN subscription ON user.id = subscription.subscriber '.
+ 'WHERE subscription.subscribed = '.$this->profile_id);
+
+ $ni = array();
+
+ $notice = Notice::staticGet('id', $this->notice_id);
+
+ $author = Profile::staticGet('id', $notice->profile_id);
+
+ while ($user->fetch()) {
+ $inbox = Notice_inbox::pkeyGet(array('user_id' => $user->id,
+ 'notice_id' => $this->notice_id));
+
+ if (empty($inbox)) {
+ if (!$user->hasBlocked($author)) {
+ $ni[$user->id] = NOTICE_INBOX_SOURCE_FORWARD;
+ }
+ } else {
+ $inbox->free();
+ }
+ }
+
+ $user->free();
+ $author->free();
+
+ unset($user);
+ unset($author);
+
+ Notice_inbox::bulkInsert($this->notice_id, $this->created, $ni);
+
+ return $ni;
+ }
+
+ function blowCache($ni)
+ {
+ $cache = common_memcache();
+
+ if (!empty($cache)) {
+ foreach ($ni as $id => $source) {
+ $cache->delete(common_cache_key('notice_inbox:by_user:'.$id));
+ $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id));
+ $cache->delete(common_cache_key('notice_inbox:by_user:'.$id.';last'));
+ $cache->delete(common_cache_key('notice_inbox:by_user_own:'.$id.';last'));
+ }
+ }
+ }
+}
diff --git a/classes/Login_token.php b/classes/Login_token.php
new file mode 100644
index 000000000..c172b30ab
--- /dev/null
+++ b/classes/Login_token.php
@@ -0,0 +1,42 @@
+<?php
+/**
+ * Table Definition for login_token
+ *
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+require_once INSTALLDIR.'/classes/Memcached_DataObject.php';
+
+class Login_token extends Memcached_DataObject
+{
+ ###START_AUTOCODE
+ /* the code below is auto generated do not remove the above tag */
+
+ public $__table = 'login_token'; // table name
+ public $user_id; // int(4) primary_key not_null
+ public $token; // char(32) not_null
+ public $created; // datetime() not_null
+ public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
+
+ /* Static get */
+ function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Login_token',$k,$v); }
+
+ /* the code above is auto generated do not remove the tag below */
+ ###END_AUTOCODE
+}
diff --git a/classes/Notice.php b/classes/Notice.php
index 661072156..bcd7947bd 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -948,39 +948,7 @@ class Notice extends Memcached_DataObject
}
}
- $cnt = 0;
-
- $qryhdr = 'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES ';
- $qry = $qryhdr;
-
- foreach ($ni as $id => $source) {
- if ($cnt > 0) {
- $qry .= ', ';
- }
- $qry .= '('.$id.', '.$this->id.', '.$source.", '".$this->created. "') ";
- $cnt++;
- if (rand() % NOTICE_INBOX_SOFT_LIMIT == 0) {
- // FIXME: Causes lag in replicated servers
- // Notice_inbox::gc($id);
- }
- if ($cnt >= MAX_BOXCARS) {
- $inbox = new Notice_inbox();
- $result = $inbox->query($qry);
- if (PEAR::isError($result)) {
- common_log_db_error($inbox, $qry);
- }
- $qry = $qryhdr;
- $cnt = 0;
- }
- }
-
- if ($cnt > 0) {
- $inbox = new Notice_inbox();
- $result = $inbox->query($qry);
- if (PEAR::isError($result)) {
- common_log_db_error($inbox, $qry);
- }
- }
+ Notice_inbox::bulkInsert($this->id, $this->created, $ni);
return;
}
diff --git a/classes/Notice_inbox.php b/classes/Notice_inbox.php
index d3e7853b1..b39006542 100644
--- a/classes/Notice_inbox.php
+++ b/classes/Notice_inbox.php
@@ -32,6 +32,7 @@ define('NOTICE_INBOX_SOFT_LIMIT', 1000);
define('NOTICE_INBOX_SOURCE_SUB', 1);
define('NOTICE_INBOX_SOURCE_GROUP', 2);
define('NOTICE_INBOX_SOURCE_REPLY', 3);
+define('NOTICE_INBOX_SOURCE_FORWARD', 4);
define('NOTICE_INBOX_SOURCE_GATEWAY', -1);
class Notice_inbox extends Memcached_DataObject
@@ -83,7 +84,7 @@ class Notice_inbox extends Memcached_DataObject
$inbox->whereAdd('created > \'' . date('Y-m-d H:i:s', $since) . '\'');
}
- $inbox->orderBy('notice_id DESC');
+ $inbox->orderBy('created DESC');
if (!is_null($offset)) {
$inbox->limit($offset, $limit);
@@ -141,4 +142,43 @@ class Notice_inbox extends Memcached_DataObject
'WHERE user_id = ' . $user_id . ' ' .
'AND notice_id in ('.implode(',', $notices).')');
}
+
+ static function bulkInsert($notice_id, $created, $ni)
+ {
+ $cnt = 0;
+
+ $qryhdr = 'INSERT INTO notice_inbox (user_id, notice_id, source, created) VALUES ';
+ $qry = $qryhdr;
+
+ foreach ($ni as $id => $source) {
+ if ($cnt > 0) {
+ $qry .= ', ';
+ }
+ $qry .= '('.$id.', '.$notice_id.', '.$source.", '".$created. "') ";
+ $cnt++;
+ if (rand() % NOTICE_INBOX_SOFT_LIMIT == 0) {
+ // FIXME: Causes lag in replicated servers
+ // Notice_inbox::gc($id);
+ }
+ if ($cnt >= MAX_BOXCARS) {
+ $inbox = new Notice_inbox();
+ $result = $inbox->query($qry);
+ if (PEAR::isError($result)) {
+ common_log_db_error($inbox, $qry);
+ }
+ $qry = $qryhdr;
+ $cnt = 0;
+ }
+ }
+
+ if ($cnt > 0) {
+ $inbox = new Notice_inbox();
+ $result = $inbox->query($qry);
+ if (PEAR::isError($result)) {
+ common_log_db_error($inbox, $qry);
+ }
+ }
+
+ return;
+ }
}
diff --git a/classes/Profile.php b/classes/Profile.php
index 4b2e09006..4c14f62a0 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -716,4 +716,12 @@ class Profile extends Memcached_DataObject
}
return $result;
}
+
+ function hasForwarded($notice_id)
+ {
+ $forward = Forward::pkeyGet(array('profile_id' => $this->id,
+ 'notice_id' => $notice_id));
+
+ return (!empty($forward));
+ }
}
diff --git a/classes/User.php b/classes/User.php
index f905ea2b7..2a4fab7d4 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -502,6 +502,19 @@ class User extends Memcached_DataObject
{
// Add a new block record
+ // no blocking (and thus unsubbing from) yourself
+
+ if ($this->id == $other->id) {
+ common_log(LOG_WARNING,
+ sprintf(
+ "Profile ID %d (%s) tried to block his or herself.",
+ $profile->id,
+ $profile->nickname
+ )
+ );
+ return false;
+ }
+
$block = new Profile_block();
// Begin a transaction
@@ -520,16 +533,7 @@ class User extends Memcached_DataObject
// Cancel their subscription, if it exists
- $sub = Subscription::pkeyGet(array('subscriber' => $other->id,
- 'subscribed' => $this->id));
-
- if ($sub) {
- $result = $sub->delete();
- if (!$result) {
- common_log_db_error($sub, 'DELETE', __FILE__);
- return false;
- }
- }
+ subs_unsubscribe_to($other->getUser(),$this->getProfile());
$block->query('COMMIT');
diff --git a/classes/statusnet.ini b/classes/statusnet.ini
index 835faeb0b..a5126795b 100644
--- a/classes/statusnet.ini
+++ b/classes/statusnet.ini
@@ -1,3 +1,4 @@
+
[avatar]
profile_id = 129
original = 17
@@ -195,6 +196,15 @@ id = K
service = K
uri = U
+[forward]
+profile_id = 129
+notice_id = 129
+created = 142
+
+[forward__keys]
+profile_id = K
+notice_id = K
+
[group_alias]
alias = 130
group_id = 129
diff --git a/config.php.sample b/config.php.sample
index 97645e870..63daf8663 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -154,7 +154,7 @@ $config['sphinx']['port'] = 3312;
// $config['queue']['subsystem'] = 'stomp';
// $config['queue']['stomp_server'] = 'tcp://localhost:61613';
// use different queue_basename for each statusnet instance managed by the server
-// $config['queue']['queue_basename'] = 'statusnet';
+// $config['queue']['queue_basename'] = '/queue/statusnet/';
// The following customise the behaviour of the various daemons:
// $config['daemon']['piddir'] = '/var/run';
@@ -236,6 +236,11 @@ $config['sphinx']['port'] = 3312;
// Use a different hostname for SSL-encrypted pages
// $config['site']['sslserver'] = 'secure.example.org';
+// Indent HTML and XML
+// Enable (default) for easier to read markup for developers,
+// disable to save some bandwidth.
+// $config['site']['indent'] = true;
+
// If you have a lot of status networks on the same server, you can
// store the site data in a database and switch as follows
// Status_network::setupDB('localhost', 'statusnet', 'statuspass', 'statusnet');
diff --git a/db/08to09.sql b/db/08to09.sql
index 8d463fab4..a945416ea 100644
--- a/db/08to09.sql
+++ b/db/08to09.sql
@@ -72,4 +72,25 @@ create table location_namespace (
created datetime not null comment 'date the record was created',
modified timestamp comment 'date this record was modified'
-) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; \ No newline at end of file
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table login_token (
+ user_id integer not null comment 'user owning this token' references user (id),
+ token char(32) not null comment 'token useable for logging in',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified',
+
+ constraint primary key (user_id)
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table forward (
+
+ profile_id integer not null comment 'profile who forwarded the notice' references profile (id),
+ notice_id integer not null comment 'notice they forwarded' references notice (id),
+
+ created datetime not null comment 'date this record was created',
+
+ constraint primary key (profile_id, notice_id)
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
diff --git a/db/08to09_pg.sql b/db/08to09_pg.sql
index b312d47dd..0bd47dea5 100644
--- a/db/08to09_pg.sql
+++ b/db/08to09_pg.sql
@@ -39,6 +39,15 @@ create table profile_role (
);
+create table login_token (
+ user_id integer not null /* comment 'user owning this token'*/ references "user" (id),
+ token char(32) not null /* comment 'token useable for logging in'*/,
+ created timestamp not null DEFAULT CURRENT_TIMESTAMP /* comment 'date this record was created'*/,
+ modified timestamp /* comment 'date this record was modified'*/,
+
+ primary key (user_id)
+);
+
DROP index fave_user_id_idx;
CREATE index fave_user_id_idx on fave (user_id,modified);
@@ -60,4 +69,3 @@ ALTER TABLE profile ADD COLUMN lat decimal(10,7) /*comment 'latitude'*/ ;
ALTER TABLE profile ADD COLUMN lon decimal(10,7) /*comment 'longitude'*/;
ALTER TABLE profile ADD COLUMN location_id integer /* comment 'location id if possible'*/;
ALTER TABLE profile ADD COLUMN location_ns integer /* comment 'namespace for location'*/;
- \ No newline at end of file
diff --git a/db/statusnet.sql b/db/statusnet.sql
index f7b3b113b..b500b81f2 100644
--- a/db/statusnet.sql
+++ b/db/statusnet.sql
@@ -575,3 +575,24 @@ create table location_namespace (
modified timestamp comment 'date this record was modified'
) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table login_token (
+ user_id integer not null comment 'user owning this token' references user (id),
+ token char(32) not null comment 'token useable for logging in',
+ created datetime not null comment 'date this record was created',
+ modified timestamp comment 'date this record was modified',
+
+ constraint primary key (user_id)
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
+create table forward (
+
+ profile_id integer not null comment 'profile who forwarded the notice' references profile (id),
+ notice_id integer not null comment 'notice they forwarded' references notice (id),
+
+ created datetime not null comment 'date this record was created',
+
+ constraint primary key (profile_id, notice_id)
+
+) ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin;
+
diff --git a/db/statusnet_pg.sql b/db/statusnet_pg.sql
index cd72d66ea..81b329d1e 100644
--- a/db/statusnet_pg.sql
+++ b/db/statusnet_pg.sql
@@ -570,4 +570,14 @@ create table profile_role (
primary key (profile_id, role)
-); \ No newline at end of file
+);
+
+create table login_token (
+ user_id integer not null /* comment 'user owning this token'*/ references "user" (id),
+ token char(32) not null /* comment 'token useable for logging in'*/,
+ created timestamp not null DEFAULT CURRENT_TIMESTAMP /* comment 'date this record was created'*/,
+ modified timestamp /* comment 'date this record was modified'*/,
+
+ primary key (user_id)
+);
+
diff --git a/extlib/DB/DataObject.php b/extlib/DB/DataObject.php
index 60ff1441b..a69fbae86 100644
--- a/extlib/DB/DataObject.php
+++ b/extlib/DB/DataObject.php
@@ -15,7 +15,7 @@
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License 3.01
- * @version CVS: $Id: DataObject.php 284150 2009-07-15 23:27:59Z alan_k $
+ * @version CVS: $Id: DataObject.php 291349 2009-11-27 09:15:18Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/
@@ -235,7 +235,7 @@ class DB_DataObject extends DB_DataObject_Overload
* @access private
* @var string
*/
- var $_DB_DataObject_version = "1.8.12";
+ var $_DB_DataObject_version = "1.9.0";
/**
* The Database table (used by table extends)
@@ -309,7 +309,8 @@ class DB_DataObject extends DB_DataObject_Overload
/**
* An autoloading, caching static get method using key, value (based on get)
- *
+ * (depreciated - use ::get / and your own caching method)
+ *
* Usage:
* $object = DB_DataObject::staticGet("DbTable_mytable",12);
* or
@@ -942,9 +943,13 @@ class DB_DataObject extends DB_DataObject_Overload
}
$this->$key = $keyvalue;
}
-
-
-
+
+ // if we haven't set disable_null_strings to "full"
+ $ignore_null = !isset($options['disable_null_strings'])
+ || !is_string($options['disable_null_strings'])
+ || strtolower($options['disable_null_strings']) !== 'full' ;
+
+
foreach($items as $k => $v) {
// if we are using autoincrement - skip the column...
@@ -953,7 +958,10 @@ class DB_DataObject extends DB_DataObject_Overload
}
- if (!isset($this->$k)) {
+
+
+ // Ignore variables which aren't set to a value
+ if ( !isset($this->$k) && $ignore_null) {
continue;
}
// dont insert data into mysql timestamps
@@ -980,8 +988,7 @@ class DB_DataObject extends DB_DataObject_Overload
}
-
- if (!isset($options['disable_null_strings']) && is_string($this->$k) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) {
+ if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) {
$rightq .= " NULL ";
continue;
}
@@ -1194,8 +1201,14 @@ class DB_DataObject extends DB_DataObject_Overload
$options = $_DB_DATAOBJECT['CONFIG'];
+ $ignore_null = !isset($options['disable_null_strings'])
+ || !is_string($options['disable_null_strings'])
+ || strtolower($options['disable_null_strings']) !== 'full' ;
+
+
foreach($items as $k => $v) {
- if (!isset($this->$k)) {
+
+ if (!isset($this->$k) && $ignore_null) {
continue;
}
// ignore stuff thats
@@ -1234,7 +1247,7 @@ class DB_DataObject extends DB_DataObject_Overload
}
// special values ... at least null is handled...
- if (!isset($options['disable_null_strings']) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) {
+ if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) {
$settings .= "$kSql = NULL ";
continue;
}
@@ -1796,10 +1809,15 @@ class DB_DataObject extends DB_DataObject_Overload
}
-
+ $_DB_DATAOBJECT['INI'][$this->_database] = array();
foreach ($schemas as $ini) {
if (file_exists($ini) && is_file($ini)) {
- $_DB_DATAOBJECT['INI'][$this->_database] = parse_ini_file($ini, true);
+
+ $_DB_DATAOBJECT['INI'][$this->_database] = array_merge(
+ $_DB_DATAOBJECT['INI'][$this->_database],
+ parse_ini_file($ini, true)
+ );
+
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
if (!is_readable ($ini)) {
$this->debug("ini file is not readable: $ini","databaseStructure",1);
@@ -2478,7 +2496,8 @@ class DB_DataObject extends DB_DataObject_Overload
$x = new DB_DataObject;
$this->_query= $x->_query;
}
-
+
+
foreach($keys as $k => $v) {
// index keys is an indexed array
/* these filter checks are a bit suspicious..
@@ -2519,7 +2538,7 @@ class DB_DataObject extends DB_DataObject_Overload
continue;
}
- if (!isset($options['disable_null_strings']) && (strtolower($this->$k) === 'null') && !($v & DB_DATAOBJECT_NOTNULL)) {
+ if (!($v & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($this,$k)) {
$this->whereAdd(" $kSql IS NULL");
continue;
}
@@ -2624,15 +2643,31 @@ class DB_DataObject extends DB_DataObject_Overload
}
// does this need multi db support??
- $p = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ?
- $_DB_DATAOBJECT['CONFIG']['class_prefix'] : '';
- $class = $p . preg_replace('/[^A-Z0-9]/i','_',ucfirst($table));
- $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class);
+ $cp = isset($_DB_DATAOBJECT['CONFIG']['class_prefix']) ?
+ explode(PATH_SEPARATOR, $_DB_DATAOBJECT['CONFIG']['class_prefix']) : '';
+
+ // multiprefix support.
+ $tbl = preg_replace('/[^A-Z0-9]/i','_',ucfirst($table));
+ if (is_array($cp)) {
+ $class = array();
+ foreach($cp as $cpr) {
+ $ce = substr(phpversion(),0,1) > 4 ? class_exists($cpr . $tbl,false) : class_exists($cpr . $tbl);
+ if ($ce) {
+ $class = $cpr . $tbl;
+ break;
+ }
+ $class[] = $cpr . $tbl;
+ }
+ } else {
+ $class = $tbl;
+ $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class);
+ }
- $class = $ce ? $class : DB_DataObject::_autoloadClass($class);
+
+ $rclass = $ce ? $class : DB_DataObject::_autoloadClass($class, $table);
// proxy = full|light
- if (!$class && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) {
+ if (!$rclass && isset($_DB_DATAOBJECT['CONFIG']['proxy'])) {
DB_DataObject::debug("FAILED TO Autoload $database.$table - using proxy.","FACTORY",1);
@@ -2653,12 +2688,14 @@ class DB_DataObject extends DB_DataObject_Overload
return $x->$proxyMethod( $d->_database, $table);
}
- if (!$class) {
+ if (!$rclass) {
return DB_DataObject::raiseError(
- "factory could not find class $class from $table",
+ "factory could not find class " .
+ (is_array($class) ? implode(PATH_SEPARATOR, $class) : $class ).
+ "from $table",
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
}
- $ret = new $class;
+ $ret = new $rclass;
if (!empty($database)) {
DB_DataObject::debug("Setting database to $database","FACTORY",1);
$ret->database($database);
@@ -2668,11 +2705,12 @@ class DB_DataObject extends DB_DataObject_Overload
/**
* autoload Class
*
- * @param string $class Class
+ * @param string|array $class Class
+ * @param string $table Table trying to load.
* @access private
* @return string classname on Success
*/
- function _autoloadClass($class)
+ function _autoloadClass($class, $table=false)
{
global $_DB_DATAOBJECT;
@@ -2682,32 +2720,62 @@ class DB_DataObject extends DB_DataObject_Overload
$class_prefix = empty($_DB_DATAOBJECT['CONFIG']['class_prefix']) ?
'' : $_DB_DATAOBJECT['CONFIG']['class_prefix'];
- $table = substr($class,strlen($class_prefix));
+ $table = $table ? $table : substr($class,strlen($class_prefix));
// only include the file if it exists - and barf badly if it has parse errors :)
if (!empty($_DB_DATAOBJECT['CONFIG']['proxy']) || empty($_DB_DATAOBJECT['CONFIG']['class_location'])) {
return false;
}
+ // support for:
+ // class_location = mydir/ => maps to mydir/Tablename.php
+ // class_location = mydir/myfile_%s.php => maps to mydir/myfile_Tablename
+ // with directory sepr
+ // class_location = mydir/:mydir2/: => tries all of thes locations.
+ $cl = $_DB_DATAOBJECT['CONFIG']['class_location'];
- if (strpos($_DB_DATAOBJECT['CONFIG']['class_location'],'%s') !== false) {
- $file = sprintf($_DB_DATAOBJECT['CONFIG']['class_location'], preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)));
- } else {
- $file = $_DB_DATAOBJECT['CONFIG']['class_location'].'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php";
+ switch (true) {
+ case (strpos($cl ,'%s') !== false):
+ $file = sprintf($cl , preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)));
+ break;
+
+ case (strpos($cl , PATH_SEPARATOR) !== false):
+ $file = array();
+ foreach(explode(PATH_SEPARATOR, $cl ) as $p) {
+ $file[] = $p .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php";
+ }
+ break;
+ default:
+ $file = $cl .'/'.preg_replace('/[^A-Z0-9]/i','_',ucfirst($table)).".php";
+ break;
}
- if (!file_exists($file)) {
+ $cls = is_array($class) ? $class : array($class);
+
+ if (is_array($file) || !file_exists($file)) {
$found = false;
- foreach(explode(PATH_SEPARATOR, ini_get('include_path')) as $p) {
- if (file_exists("$p/$file")) {
- $file = "$p/$file";
- $found = true;
+
+ $file = is_array($file) ? $file : array($file);
+ $search = implode(PATH_SEPARATOR, $file);
+ foreach($file as $f) {
+ foreach(explode(PATH_SEPARATOR, '' . PATH_SEPARATOR . ini_get('include_path')) as $p) {
+ $ff = empty($p) ? $f : "$p/$f";
+
+ if (file_exists($ff)) {
+ $file = $ff;
+ $found = true;
+ break;
+ }
+ }
+ if ($found) {
break;
}
}
if (!$found) {
DB_DataObject::raiseError(
- "autoload:Could not find class {$class} using class_location value",
+ "autoload:Could not find class " . implode(',', $cls) .
+ " using class_location value :" . $search .
+ " using include_path value :" . ini_get('include_path'),
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
return false;
}
@@ -2715,12 +2783,18 @@ class DB_DataObject extends DB_DataObject_Overload
include_once $file;
-
- $ce = substr(phpversion(),0,1) > 4 ? class_exists($class,false) : class_exists($class);
-
+
+ $ce = false;
+ foreach($cls as $c) {
+ $ce = substr(phpversion(),0,1) > 4 ? class_exists($c,false) : class_exists($c);
+ if ($ce) {
+ $class = $c;
+ break;
+ }
+ }
if (!$ce) {
DB_DataObject::raiseError(
- "autoload:Could not autoload {$class}",
+ "autoload:Could not autoload " . implode(',', $cls) ,
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
return false;
}
@@ -2786,7 +2860,7 @@ class DB_DataObject extends DB_DataObject_Overload
}
-
+ $_DB_DATAOBJECT['LINKS'][$this->_database] = array();
foreach ($schemas as $ini) {
$links =
@@ -2794,9 +2868,13 @@ class DB_DataObject extends DB_DataObject_Overload
$_DB_DATAOBJECT['CONFIG']["links_{$this->_database}"] :
str_replace('.ini','.links.ini',$ini);
- if (empty($_DB_DATAOBJECT['LINKS'][$this->_database]) && file_exists($links) && is_file($links)) {
+ if (file_exists($links) && is_file($links)) {
/* not sure why $links = ... here - TODO check if that works */
- $_DB_DATAOBJECT['LINKS'][$this->_database] = parse_ini_file($links, true);
+ $_DB_DATAOBJECT['LINKS'][$this->_database] = array_merge(
+ $_DB_DATAOBJECT['LINKS'][$this->_database],
+ parse_ini_file($links, true)
+ );
+
if (!empty($_DB_DATAOBJECT['CONFIG']['debug'])) {
$this->debug("Loaded links.ini file: $links","links",1);
}
@@ -2977,14 +3055,12 @@ class DB_DataObject extends DB_DataObject_Overload
}
if ($link) {
if ($obj->get($link, $this->$row)) {
- $obj->free();
return $obj;
}
return false;
}
if ($obj->get($this->$row)) {
- $obj->free();
return $obj;
}
return false;
@@ -3315,14 +3391,23 @@ class DB_DataObject extends DB_DataObject_Overload
DB_DATAOBJECT_ERROR_INVALIDCONFIG);
return false;
}
+
+ $ignore_null = !isset($options['disable_null_strings'])
+ || !is_string($options['disable_null_strings'])
+ || strtolower($options['disable_null_strings']) !== 'full' ;
+
foreach($items as $k => $v) {
- if (!isset($obj->$k)) {
+ if (!isset($obj->$k) && $ignore_null) {
continue;
}
$kSql = ($quoteIdentifiers ? $DB->quoteIdentifier($k) : $k);
+ if (DB_DataObject::_is_null($obj,$k)) {
+ $obj->whereAdd("{$joinAs}.{$kSql} IS NULL");
+ continue;
+ }
if ($v & DB_DATAOBJECT_STR) {
$obj->whereAdd("{$joinAs}.{$kSql} = " . $this->_quote((string) (
@@ -3344,14 +3429,9 @@ class DB_DataObject extends DB_DataObject_Overload
if (PEAR::isError($value)) {
$this->raiseError($value->getMessage() ,DB_DATAOBJECT_ERROR_INVALIDARG);
return false;
- }
- if (!isset($options['disable_null_strings']) && strtolower($value) === 'null') {
- $obj->whereAdd("{$joinAs}.{$kSql} IS NULL");
- continue;
- } else {
- $obj->whereAdd("{$joinAs}.{$kSql} = $value");
- continue;
- }
+ }
+ $obj->whereAdd("{$joinAs}.{$kSql} = $value");
+ continue;
}
@@ -3514,7 +3594,7 @@ class DB_DataObject extends DB_DataObject_Overload
continue;
}
- if (!isset($from[sprintf($format,$k)])) {
+ if (!isset($from[sprintf($format,$k)]) && !DB_DataObject::_is_null($from, sprintf($format,$k))) {
continue;
}
@@ -3643,7 +3723,7 @@ class DB_DataObject extends DB_DataObject_Overload
// if not null - and it's not set.......
- if (!isset($this->$key) && ($val & DB_DATAOBJECT_NOTNULL)) {
+ if ($val & DB_DATAOBJECT_NOTNULL && DB_DataObject::_is_null($this, $key)) {
// dont check empty sequence key values..
if (($key == $seq[0]) && ($seq[1] == true)) {
continue;
@@ -3653,7 +3733,7 @@ class DB_DataObject extends DB_DataObject_Overload
}
- if (!isset($options['disable_null_strings']) && is_string($this->$key) && (strtolower($this->$key) == 'null')) {
+ if (DB_DataObject::_is_null($this, $key)) {
if ($val & DB_DATAOBJECT_NOTNULL) {
$this->debug("'null' field used for '$key', but it is defined as NOT NULL", 'VALIDATION', 4);
$ret[$key] = false;
@@ -3868,13 +3948,14 @@ class DB_DataObject extends DB_DataObject_Overload
//echo "FROM VALUE $col, {$cols[$col]}, $value\n";
switch (true) {
// set to null and column is can be null...
- case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && (!($cols[$col] & DB_DATAOBJECT_NOTNULL))):
+ case ((!($cols[$col] & DB_DATAOBJECT_NOTNULL)) && DB_DataObject::_is_null($value, false)):
case (is_object($value) && is_a($value,'DB_DataObject_Cast')):
$this->$col = $value;
return true;
// fail on setting null on a not null field..
- case (!isset($options['disable_null_strings']) && (strtolower($value) == 'null') && ($cols[$col] & DB_DATAOBJECT_NOTNULL)):
+ case (($cols[$col] & DB_DATAOBJECT_NOTNULL) && DB_DataObject::_is_null($value,false)):
+
return false;
case (($cols[$col] & DB_DATAOBJECT_DATE) && ($cols[$col] & DB_DATAOBJECT_TIME)):
@@ -4189,9 +4270,65 @@ class DB_DataObject extends DB_DataObject_Overload
if (isset($_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5])) {
$_DB_DATAOBJECT['CONNECTIONS'][$this->_database_dsn_md5]->num_rows = array();
}
+
+ if (is_array($this->_link_loaded)) {
+ foreach ($this->_link_loaded as $do) {
+ $do->free();
+ }
+ }
+
}
+ /**
+ * Evaluate whether or not a value is set to null, taking the 'disable_null_strings' option into account.
+ * If the value is a string set to "null" and the "disable_null_strings" option is not set to
+ * true, then the value is considered to be null.
+ * If the value is actually a PHP NULL value, and "disable_null_strings" has been set to
+ * the value "full", then it will also be considered null. - this can not differenticate between not set
+ *
+ *
+ * @param object|array $obj_or_ar
+ * @param string|false $prop prperty
+ * @access private
+ * @return bool object
+ */
+ function _is_null($obj_or_ar , $prop)
+ {
+ global $_DB_DATAOBJECT;
+
+
+ $isset = $prop === false ? isset($obj_or_ar) :
+ (is_array($obj_or_ar) ? isset($obj_or_ar[$prop]) : isset($obj_or_ar->$prop));
+
+ $value = $isset ?
+ ($prop === false ? $obj_or_ar :
+ (is_array($obj_or_ar) ? $obj_or_ar[$prop] : $obj_or_ar->$prop))
+ : null;
+
+
+
+ $options = $_DB_DATAOBJECT['CONFIG'];
+
+ $null_strings = !isset($options['disable_null_strings'])
+ || $options['disable_null_strings'] === false;
+
+ $crazy_null = isset($options['disable_null_strings'])
+ && is_string($options['disable_null_strings'])
+ && strtolower($options['disable_null_strings'] === 'full');
+
+ if ( $null_strings && $isset && is_string($value) && (strtolower($value) === 'null') ) {
+ return true;
+ }
+
+ if ( $crazy_null && !$isset ) {
+ return true;
+ }
+
+ return false;
+
+
+ }
/* ---- LEGACY BC METHODS - NOT DOCUMENTED - See Documentation on New Methods. ---*/
@@ -4214,3 +4351,4 @@ if (!defined('DB_DATAOBJECT_NO_OVERLOAD')) {
}
}
+
diff --git a/extlib/DB/DataObject/Generator.php b/extlib/DB/DataObject/Generator.php
index ff6e42c7d..17d310f57 100644
--- a/extlib/DB/DataObject/Generator.php
+++ b/extlib/DB/DataObject/Generator.php
@@ -15,7 +15,7 @@
* @author Alan Knowles <alan@akbkhome.com>
* @copyright 1997-2006 The PHP Group
* @license http://www.php.net/license/3_01.txt PHP License 3.01
- * @version CVS: $Id: Generator.php 284150 2009-07-15 23:27:59Z alan_k $
+ * @version CVS: $Id: Generator.php 289384 2009-10-09 00:17:26Z alan_k $
* @link http://pear.php.net/package/DB_DataObject
*/
@@ -33,7 +33,7 @@
/**
*
* Config _$ptions
- * [DB_DataObject_Generator]
+ * [DB_DataObject]
* ; optional default = DB/DataObject.php
* extends_location =
* ; optional default = DB_DataObject
@@ -775,11 +775,9 @@ class DB_DataObject_Generator extends DB_DataObject
//echo "Generating Class files: \n";
$options = &PEAR::getStaticProperty('DB_DataObject','options');
-
- if ($extends = @$options['extends']) {
- $this->_extends = $extends;
- $this->_extendsFile = $options['extends_location'];
- }
+ $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends'];
+ $this->_extendsFile = empty($options['extends_location']) ? $this->_extendsFile : $options['extends_location'];
+
foreach($this->tables as $this->table) {
$this->table = trim($this->table);
@@ -814,7 +812,7 @@ class DB_DataObject_Generator extends DB_DataObject
}
/**
- * class being extended (can be overridden by [DB_DataObject_Generator] extends=xxxx
+ * class being extended (can be overridden by [DB_DataObject] extends=xxxx
*
* @var string
* @access private
@@ -1142,10 +1140,9 @@ class DB_DataObject_Generator extends DB_DataObject
$options = &PEAR::getStaticProperty('DB_DataObject','options');
$class_prefix = empty($options['class_prefix']) ? '' : $options['class_prefix'];
- if ($extends = @$options['extends']) {
- $this->_extends = $extends;
- $this->_extendsFile = $options['extends_location'];
- }
+ $this->_extends = empty($options['extends']) ? $this->_extends : $options['extends'];
+ $this->_extendsFile = empty($options['extends_location']) ? $this->_extendsFile : $options['extends_location'];
+
$classname = $this->classname = $this->getClassNameFromTableName($this->table);
$out = $this->_generateClassTable();
diff --git a/js/util.js b/js/util.js
index 73fcf37be..67df73507 100644
--- a/js/util.js
+++ b/js/util.js
@@ -184,30 +184,33 @@ var SN = { // StatusNet
form.removeClass(SN.C.S.Processing);
$('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeClass(SN.C.S.Disabled);
$('#'+form_id+' #'+SN.C.S.NoticeActionSubmit).removeAttr(SN.C.S.Disabled, SN.C.S.Disabled);
+ $('#'+form_id+' .form_response').remove();
if (textStatus == 'timeout') {
- form.append('<p class="error>Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>');
+ form.append('<p class="form_response error">Sorry! We had trouble sending your notice. The servers are overloaded. Please try again, and contact the site administrator if this problem persists.</p>');
}
else {
if ($('.'+SN.C.S.Error, xhr.responseXML).length > 0) {
form.append(document._importNode($('.'+SN.C.S.Error, xhr.responseXML)[0], true));
}
else {
- if(jQuery.inArray(parseInt(xhr.status), SN.C.I.HTTP20x30x) < 0) {
- form.append('<p class="error>(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>');
+ if (parseInt(xhr.status) === 0 || jQuery.inArray(parseInt(xhr.status), SN.C.I.HTTP20x30x) >= 0) {
+ $('#'+form_id).resetForm();
+ $('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove();
+ SN.U.FormNoticeEnhancements($('#'+form_id));
}
else {
- $('#'+form_id+' #'+SN.C.S.NoticeDataText).val('');
- SN.U.FormNoticeEnhancements($('#'+form_id));
+ form.append('<p class="form_response error">(Sorry! We had trouble sending your notice ('+xhr.status+' '+xhr.statusText+'). Please report the problem to the site administrator if this happens again.</p>');
}
}
}
},
success: function(data, textStatus) {
+ $('#'+form_id+' .form_response').remove();
var result;
if ($('#'+SN.C.S.Error, data).length > 0) {
- result = document._importNode($('p', data)[0], true);
+ result = document._importNode($('p', data)[0], true);
result = result.textContent || result.innerHTML;
- form.append('<p class="error">'+result+'</p>');
+ form.append('<p class="form_response error">'+result+'</p>');
}
else {
if($('body')[0].id == 'bookmarklet') {
@@ -217,7 +220,7 @@ var SN = { // StatusNet
if ($('#'+SN.C.S.CommandResult, data).length > 0) {
result = document._importNode($('p', data)[0], true);
result = result.textContent || result.innerHTML;
- form.append('<p class="success">'+result+'</p>');
+ form.append('<p class="form_response success">'+result+'</p>');
}
else {
var notices = $('#notices_primary .notices');
@@ -245,12 +248,10 @@ var SN = { // StatusNet
else {
result = document._importNode($('title', data)[0], true);
result_title = result.textContent || result.innerHTML;
- form.append('<p class="success">'+result_title+'</p>');
+ form.append('<p class="form_response success">'+result_title+'</p>');
}
}
- $('#'+form_id+' #'+SN.C.S.NoticeDataText).val('');
- $('#'+form_id+' #'+SN.C.S.NoticeDataAttach).val('');
- $('#'+form_id+' #'+SN.C.S.NoticeInReplyTo).val('');
+ $('#'+form_id).resetForm();
$('#'+form_id+' #'+SN.C.S.NoticeDataAttachSelected).remove();
SN.U.FormNoticeEnhancements($('#'+form_id));
}
@@ -305,8 +306,12 @@ var SN = { // StatusNet
$('.form_disfavor').each(function() { SN.U.FormXHR($(this)); });
},
+ NoticeForward: function() {
+ $('.form_forward').each(function() { SN.U.FormXHR($(this)); });
+ },
+
NoticeAttachments: function() {
- $('.notice a.attachment').each(function() {
+ $('.notice a.attachment').each(function() {
SN.U.NoticeWithAttachment($(this).closest('.notice'));
});
},
@@ -438,7 +443,7 @@ var SN = { // StatusNet
Notices: function() {
if ($('body.user_in').length > 0) {
SN.U.NoticeFavor();
-
+ SN.U.NoticeForward();
SN.U.NoticeReply();
}
diff --git a/lib/action.php b/lib/action.php
index 8ad391755..87d8a4399 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -68,7 +68,7 @@ class Action extends HTMLOutputter // lawsuit
* @see XMLOutputter::__construct
* @see HTMLOutputter::__construct
*/
- function __construct($output='php://output', $indent=true)
+ function __construct($output='php://output', $indent=null)
{
parent::__construct($output, $indent);
}
diff --git a/lib/api.php b/lib/api.php
index e2ea87b43..eacb80dbe 100644
--- a/lib/api.php
+++ b/lib/api.php
@@ -134,20 +134,17 @@ class ApiAction extends Action
$twitter_user['protected'] = false; # not supported by StatusNet yet
$twitter_user['followers_count'] = $profile->subscriberCount();
- $defaultDesign = Design::siteDesign();
- $design = null;
$user = $profile->getUser();
+ $design = null;
// Note: some profiles don't have an associated user
+ $defaultDesign = Design::siteDesign();
+
if (!empty($user)) {
$design = $user->getDesign();
}
- if (empty($design)) {
- $design = $defaultDesign;
- }
-
$color = Design::toWebColor(empty($design->backgroundcolor) ? $defaultDesign->backgroundcolor : $design->backgroundcolor);
$twitter_user['profile_background_color'] = ($color == null) ? '' : '#'.$color->hexValue();
$color = Design::toWebColor(empty($design->textcolor) ? $defaultDesign->textcolor : $design->textcolor);
@@ -166,7 +163,7 @@ class ApiAction extends Action
$timezone = 'UTC';
- if ($user->timezone) {
+ if (!empty($user) && !empty($user->timezone)) {
$timezone = $user->timezone;
}
diff --git a/lib/command.php b/lib/command.php
index bcc551c81..e2a665511 100644
--- a/lib/command.php
+++ b/lib/command.php
@@ -579,6 +579,37 @@ class OnCommand extends Command
}
}
+class LoginCommand extends Command
+{
+ function execute($channel)
+ {
+ $disabled = common_config('logincommand','disabled');
+ if(isset($disabled)) {
+ $channel->error($this->user, _('Login command is disabled'));
+ return;
+ }
+ $login_token = Login_token::staticGet('user_id',$this->user->id);
+ if($login_token){
+ $login_token->delete();
+ }
+ $login_token = new Login_token();
+ $login_token->user_id = $this->user->id;
+ $login_token->token = common_good_rand(16);
+ $login_token->created = common_sql_now();
+ $result = $login_token->insert();
+ if (!$result) {
+ common_log_db_error($login_token, 'INSERT', __FILE__);
+ $channel->error($this->user, sprintf(_('Could not create login token for %s'),
+ $this->user->nickname));
+ return;
+ }
+ $channel->output($this->user,
+ sprintf(_('This link is useable only once, and is good for only 2 minutes: %s'),
+ common_local_url('login',
+ array('user_id'=>$login_token->user_id, 'token'=>$login_token->token))));
+ }
+}
+
class SubscriptionsCommand extends Command
{
function execute($channel)
@@ -666,6 +697,7 @@ class HelpCommand extends Command
"reply #<notice_id> - reply to notice with a given id\n".
"reply <nickname> - reply to the last notice from user\n".
"join <group> - join group\n".
+ "login - Get a link to login to the web interface\n".
"drop <group> - leave group\n".
"stats - get your stats\n".
"stop - same as 'off'\n".
diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php
index 25f2e4b3e..665015afc 100644
--- a/lib/commandinterpreter.php
+++ b/lib/commandinterpreter.php
@@ -41,6 +41,12 @@ class CommandInterpreter
return null;
}
return new HelpCommand($user);
+ case 'login':
+ if ($arg) {
+ return null;
+ } else {
+ return new LoginCommand($user);
+ }
case 'subscribers':
if ($arg) {
return null;
diff --git a/lib/default.php b/lib/default.php
index d4ef045ea..ebb6f8d01 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -53,6 +53,7 @@ $default =
'shorturllength' => 30,
'dupelimit' => 60, # default for same person saying the same thing
'textlimit' => 140,
+ 'indent' => true,
),
'db' =>
array('database' => 'YOU HAVE TO SET THIS IN config.php',
@@ -74,7 +75,7 @@ $default =
array('enabled' => false,
'subsystem' => 'db', # default to database, or 'stomp'
'stomp_server' => null,
- 'queue_basename' => 'statusnet',
+ 'queue_basename' => '/queue/statusnet/',
'stomp_username' => null,
'stomp_password' => null,
),
diff --git a/lib/designsettings.php b/lib/designsettings.php
index 99f44b5b7..b70ba0dfc 100644
--- a/lib/designsettings.php
+++ b/lib/designsettings.php
@@ -334,49 +334,6 @@ class DesignSettingsAction extends AccountSettingsAction
}
/**
- * Get a default design
- *
- * @return Design design
- */
-
- function defaultDesign()
- {
- $defaults = common_config('site', 'design');
-
- $design = new Design();
-
- try {
-
- $color = new WebColor();
-
- $color->parseColor($defaults['backgroundcolor']);
- $design->backgroundcolor = $color->intValue();
-
- $color->parseColor($defaults['contentcolor']);
- $design->contentcolor = $color->intValue();
-
- $color->parseColor($defaults['sidebarcolor']);
- $design->sidebarcolor = $color->intValue();
-
- $color->parseColor($defaults['textcolor']);
- $design->textcolor = $color->intValue();
-
- $color->parseColor($defaults['linkcolor']);
- $design->linkcolor = $color->intValue();
-
- $design->backgroundimage = $defaults['backgroundimage'];
-
- $design->disposition = $defaults['disposition'];
-
- } catch (WebColorException $e) {
- common_log(LOG_ERR, _('Bad default color settings: ' .
- $e->getMessage()));
- }
-
- return $design;
- }
-
- /**
* Save the background image, if any, and set its disposition
*
* @param Design $design a working design to attach the img to
@@ -445,24 +402,17 @@ class DesignSettingsAction extends AccountSettingsAction
function restoreDefaults()
{
- $design = $this->getWorkingDesign();
- $default = $this->defaultDesign();
- $original = clone($design);
-
- $design->backgroundcolor = $default->backgroundcolor;
- $design->contentcolor = $default->contentcolor;
- $design->sidebarcolor = $default->sidebarcolor;
- $design->textcolor = $default->textcolor;
- $design->linkcolor = $default->linkcolor;
+ $design = $this->getWorkingDesign();
- $design->setDisposition(false, true, false);
+ if (!empty($design)) {
- $result = $design->update($original);
+ $result = $design->delete();
- if ($result === false) {
- common_log_db_error($design, 'UPDATE', __FILE__);
- $this->showForm(_('Couldn\'t update your design.'));
- return;
+ if ($result === false) {
+ common_log_db_error($design, 'DELETE', __FILE__);
+ $this->showForm(_('Couldn\'t update your design.'));
+ return;
+ }
}
$this->showForm(_('Design defaults restored.'), true);
diff --git a/lib/error.php b/lib/error.php
index 3162cfe65..87a4d913b 100644
--- a/lib/error.php
+++ b/lib/error.php
@@ -50,7 +50,7 @@ class ErrorAction extends Action
var $message = null;
var $default = null;
- function __construct($message, $code, $output='php://output', $indent=true)
+ function __construct($message, $code, $output='php://output', $indent=null)
{
parent::__construct($output, $indent);
diff --git a/lib/forwardform.php b/lib/forwardform.php
new file mode 100644
index 000000000..2052856ae
--- /dev/null
+++ b/lib/forwardform.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Form for forwarding a notice
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Form
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+require_once INSTALLDIR.'/lib/form.php';
+
+/**
+ * Form for forwarding a notice
+ *
+ * @category Form
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class ForwardForm extends Form
+{
+ /**
+ * Notice to forward
+ */
+
+ var $notice = null;
+
+ /**
+ * Constructor
+ *
+ * @param HTMLOutputter $out output channel
+ * @param Notice $notice notice to forward
+ */
+
+ function __construct($out=null, $notice=null)
+ {
+ parent::__construct($out);
+
+ $this->notice = $notice;
+ }
+
+ /**
+ * ID of the form
+ *
+ * @return int ID of the form
+ */
+
+ function id()
+ {
+ return 'forward-' . $this->notice->id;
+ }
+
+ /**
+ * Action of the form
+ *
+ * @return string URL of the action
+ */
+
+ function action()
+ {
+ return common_local_url('forward');
+ }
+
+ /**
+ * Include a session token for CSRF protection
+ *
+ * @return void
+ */
+
+ function sessionToken()
+ {
+ $this->out->hidden('token-' . $this->notice->id,
+ common_session_token());
+ }
+
+ /**
+ * Legend of the Form
+ *
+ * @return void
+ */
+ function formLegend()
+ {
+ $this->out->element('legend', null, _('Forward this notice'));
+ }
+
+ /**
+ * Data elements
+ *
+ * @return void
+ */
+
+ function formData()
+ {
+ $this->out->hidden('notice-n'.$this->notice->id,
+ $this->notice->id,
+ 'notice');
+ }
+
+ /**
+ * Action elements
+ *
+ * @return void
+ */
+
+ function formActions()
+ {
+ $this->out->submit('forward-submit-' . $this->notice->id,
+ _('Forward'), 'submit', null, _('Forward this notice'));
+ }
+
+ /**
+ * Class of the form.
+ *
+ * @return string the form's class
+ */
+
+ function formClass()
+ {
+ return 'form_forward';
+ }
+}
diff --git a/lib/htmloutputter.php b/lib/htmloutputter.php
index d267526c8..2091c6e2c 100644
--- a/lib/htmloutputter.php
+++ b/lib/htmloutputter.php
@@ -67,7 +67,7 @@ class HTMLOutputter extends XMLOutputter
* @param boolean $indent Whether to indent output, default true
*/
- function __construct($output='php://output', $indent=true)
+ function __construct($output='php://output', $indent=null)
{
parent::__construct($output, $indent);
}
@@ -350,14 +350,43 @@ class HTMLOutputter extends XMLOutputter
*/
function script($src, $type='text/javascript')
{
- $url = parse_url($src);
- if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
- {
- $src = common_path($src) . '?version=' . STATUSNET_VERSION;
+ if(Event::handle('StartScriptElement', array($this,&$src,&$type))) {
+ $url = parse_url($src);
+ if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ {
+ $src = common_path($src) . '?version=' . STATUSNET_VERSION;
+ }
+ $this->element('script', array('type' => $type,
+ 'src' => $src),
+ ' ');
+ Event::handle('EndScriptElement', array($this,$src,$type));
+ }
+ }
+
+ /**
+ * output a script (almost always javascript) tag with inline
+ * code.
+ *
+ * @param string $code code to put in the script tag
+ * @param string $type 'type' attribute value of the tag
+ *
+ * @return void
+ */
+
+ function inlineScript($code, $type='text/javascript')
+ {
+ if(Event::handle('StartInlineScriptElement', array($this,&$code,&$type))) {
+ $this->elementStart('script', array('type' => $type));
+ if($type == 'text/javascript') {
+ $this->raw('/*<![CDATA[*/ '); // XHTML compat
+ }
+ $this->raw($code);
+ if($type == 'text/javascript') {
+ $this->raw(' /*]]>*/'); // XHTML compat
+ }
+ $this->elementEnd('script');
+ Event::handle('EndInlineScriptElement', array($this,$code,$type));
}
- $this->element('script', array('type' => $type,
- 'src' => $src),
- ' ');
}
/**
@@ -371,19 +400,44 @@ class HTMLOutputter extends XMLOutputter
*/
function cssLink($src,$theme=null,$media=null)
{
- $url = parse_url($src);
- if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
- {
- if(file_exists(Theme::file($src,$theme))){
- $src = Theme::path($src, $theme) . '?version=' . STATUSNET_VERSION;
- }else{
- $src = common_path($src);
+ if(Event::handle('StartCssLinkElement', array($this,&$src,&$theme,&$media))) {
+ $url = parse_url($src);
+ if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ {
+ if(file_exists(Theme::file($src,$theme))){
+ $src = Theme::path($src, $theme);
+ }else{
+ $src = common_path($src);
+ }
+ $src.= '?version=' . STATUSNET_VERSION;
}
+ $this->element('link', array('rel' => 'stylesheet',
+ 'type' => 'text/css',
+ 'href' => $src,
+ 'media' => $media));
+ Event::handle('EndCssLinkElement', array($this,$src,$theme,$media));
+ }
+ }
+
+ /**
+ * output a style (almost always css) tag with inline
+ * code.
+ *
+ * @param string $code code to put in the style tag
+ * @param string $type 'type' attribute value of the tag
+ * @param string $media 'media' attribute value of the tag
+ *
+ * @return void
+ */
+
+ function style($code, $type = 'text/css', $media = null)
+ {
+ if(Event::handle('StartStyleElement', array($this,&$code,&$type,&$media))) {
+ $this->elementStart('style', array('type' => $type, 'media' => $media));
+ $this->raw($code);
+ $this->elementEnd('style');
+ Event::handle('EndStyleElement', array($this,$code,$type,$media));
}
- $this->element('link', array('rel' => 'stylesheet',
- 'type' => 'text/css',
- 'href' => $src,
- 'media' => $media));
}
/**
@@ -414,7 +468,6 @@ class HTMLOutputter extends XMLOutputter
}
}
-
/**
* Internal script to autofocus the given element on page onload.
*
@@ -425,13 +478,10 @@ class HTMLOutputter extends XMLOutputter
*/
function autofocus($id)
{
- $this->elementStart('script', array('type' => 'text/javascript'));
- $this->raw('/*<![CDATA[*/'.
+ $this->inlineScript(
' $(document).ready(function() {'.
' var el = $("#' . $id . '");'.
' if (el.length) { el.focus(); }'.
- ' });'.
- ' /*]]>*/');
- $this->elementEnd('script');
+ ' });');
}
}
diff --git a/lib/language.php b/lib/language.php
index 4fc45bafe..ab46f1a65 100644
--- a/lib/language.php
+++ b/lib/language.php
@@ -36,6 +36,33 @@ if (!function_exists('gettext')) {
require_once("php-gettext/gettext.inc");
}
+
+if (!function_exists('dpgettext')) {
+ /**
+ * Context-aware dgettext wrapper; use when messages in different contexts
+ * won't be distinguished from the English source but need different translations.
+ * The context string will appear as msgctxt in the .po files.
+ *
+ * Not currently exposed in PHP's gettext module; implemented to be compat
+ * with gettext.h's macros.
+ *
+ * @param string $domain domain identifier, or null for default domain
+ * @param string $context context identifier, should be some key like "menu|file"
+ * @param string $msgid English source text
+ * @return string original or translated message
+ */
+ function dpgettext($domain, $context, $msg)
+ {
+ $msgid = $context . "\004" . $msg;
+ $out = dcgettext($domain, $msgid, LC_MESSAGES);
+ if ($out == $msgid) {
+ return $msg;
+ } else {
+ return $out;
+ }
+ }
+}
+
if (!function_exists('pgettext')) {
/**
* Context-aware gettext wrapper; use when messages in different contexts
@@ -51,8 +78,30 @@ if (!function_exists('pgettext')) {
*/
function pgettext($context, $msg)
{
+ return dpgettext(textdomain(NULL), $context, $msg);
+ }
+}
+
+if (!function_exists('dnpgettext')) {
+ /**
+ * Context-aware dngettext wrapper; use when messages in different contexts
+ * won't be distinguished from the English source but need different translations.
+ * The context string will appear as msgctxt in the .po files.
+ *
+ * Not currently exposed in PHP's gettext module; implemented to be compat
+ * with gettext.h's macros.
+ *
+ * @param string $domain domain identifier, or null for default domain
+ * @param string $context context identifier, should be some key like "menu|file"
+ * @param string $msg singular English source text
+ * @param string $plural plural English source text
+ * @param int $n number of items to control plural selection
+ * @return string original or translated message
+ */
+ function dnpgettext($domain, $context, $msg, $plural, $n)
+ {
$msgid = $context . "\004" . $msg;
- $out = dcgettext(textdomain(NULL), $msgid, LC_MESSAGES);
+ $out = dcngettext($domain, $msgid, $plural, $n, LC_MESSAGES);
if ($out == $msgid) {
return $msg;
} else {
@@ -78,14 +127,78 @@ if (!function_exists('npgettext')) {
*/
function npgettext($context, $msg, $plural, $n)
{
- $msgid = $context . "\004" . $msg;
- $out = dcngettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES);
- if ($out == $msgid) {
- return $msg;
+ return dnpgettext(textdomain(NULL), $msgid, $plural, $n, LC_MESSAGES);
+ }
+}
+
+/**
+ * Shortcut for *gettext functions with smart domain detection.
+ *
+ * If calling from a plugin, this function checks which plugin was
+ * being called from and uses that as text domain, which will have
+ * been set up during plugin initialization.
+ *
+ * Also handles plurals and contexts depending on what parameters
+ * are passed to it:
+ *
+ * gettext -> _m($msg)
+ * ngettext -> _m($msg1, $msg2, $n)
+ * pgettext -> _m($ctx, $msg)
+ * npgettext -> _m($ctx, $msg1, $msg2, $n)
+ *
+ * @fixme may not work properly in eval'd code
+ *
+ * @param string $msg
+ * @return string
+ */
+function _m($msg/*, ...*/)
+{
+ $domain = _mdomain(debug_backtrace(false));
+ $args = func_get_args();
+ switch(count($args)) {
+ case 1: return dgettext($domain, $msg);
+ case 2: return dpgettext($domain, $args[0], $args[1]);
+ case 3: return dngettext($domain, $args[0], $args[1], $args[2]);
+ case 4: return dnpgettext($domain, $args[0], $args[1], $args[2], $args[3]);
+ default: throw new Exception("Bad parameter count to _m()");
+ }
+}
+
+/**
+ * Looks for which plugin we've been called from to set the gettext domain.
+ *
+ * @param array $backtrace debug_backtrace() output
+ * @return string
+ * @private
+ * @fixme could explode if SN is under a 'plugins' folder or share name.
+ */
+function _mdomain($backtrace)
+{
+ /*
+ 0 =>
+ array
+ 'file' => string '/var/www/mublog/plugins/FeedSub/FeedSubPlugin.php' (length=49)
+ 'line' => int 77
+ 'function' => string '_m' (length=2)
+ 'args' =>
+ array
+ 0 => &string 'Feeds' (length=5)
+ */
+ static $cached;
+ $path = $backtrace[0]['file'];
+ if (!isset($cached[$path])) {
+ if (DIRECTORY_SEPARATOR !== '/') {
+ $path = strtr($path, DIRECTORY_SEPARATOR, '/');
+ }
+ $cut = strpos($path, '/plugins/') + 9;
+ $cut2 = strpos($path, '/', $cut);
+ if ($cut && $cut2) {
+ $cached[$path] = substr($path, $cut, $cut2 - $cut);
} else {
- return $out;
+ return null;
}
}
+ return $cached[$path];
}
diff --git a/lib/messageform.php b/lib/messageform.php
index b034be312..4df193c6d 100644
--- a/lib/messageform.php
+++ b/lib/messageform.php
@@ -154,8 +154,7 @@ class MessageForm extends Form
$contentLimit = Message::maxContent();
- $this->out->element('script', array('type' => 'text/javascript'),
- 'maxLength = ' . $contentLimit . ';');
+ $this->out->inlineScript('maxLength = ' . $contentLimit . ';');
if ($contentLimit > 0) {
$this->out->elementStart('dl', 'form_note');
diff --git a/lib/noticeform.php b/lib/noticeform.php
index ec8624597..0dd3f2d77 100644
--- a/lib/noticeform.php
+++ b/lib/noticeform.php
@@ -178,8 +178,7 @@ class NoticeForm extends Form
$contentLimit = Notice::maxContent();
- $this->out->element('script', array('type' => 'text/javascript'),
- 'maxLength = ' . $contentLimit . ';');
+ $this->out->inlineScript('maxLength = ' . $contentLimit . ';');
if ($contentLimit > 0) {
$this->out->elementStart('dl', 'form_note');
diff --git a/lib/noticelist.php b/lib/noticelist.php
index 21cec528f..d6ffc9ca9 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -212,6 +212,7 @@ class NoticeListItem extends Widget
$this->out->elementStart('div', 'notice-options');
$this->showFaveForm();
$this->showReplyLink();
+ $this->showForwardForm();
$this->showDeleteLink();
$this->out->elementEnd('div');
}
@@ -531,6 +532,26 @@ class NoticeListItem extends Widget
}
/**
+ * show the form to forward a notice
+ *
+ * @return void
+ */
+
+ function showForwardForm()
+ {
+ $user = common_current_user();
+ if ($user && $user->id != $this->notice->profile_id) {
+ $profile = $user->getProfile();
+ if ($profile->hasForwarded($this->notice->id)) {
+ $this->out->text(_('Forwarded'));
+ } else {
+ $ff = new ForwardForm($this->out, $this->notice);
+ $ff->show();
+ }
+ }
+ }
+
+ /**
* if the user is the author, let them delete the notice
*
* @return void
diff --git a/lib/plugin.php b/lib/plugin.php
index 87d7be5a7..de7313e59 100644
--- a/lib/plugin.php
+++ b/lib/plugin.php
@@ -65,6 +65,8 @@ class Plugin
Event::addHandler(mb_substr($method, 2), array($this, $method));
}
}
+
+ $this->setupGettext();
}
function initialize()
@@ -76,4 +78,31 @@ class Plugin
{
return true;
}
+
+ /**
+ * Checks if this plugin has localization that needs to be set up.
+ * Gettext localizations can be called via the _m() helper function.
+ */
+ protected function setupGettext()
+ {
+ $class = get_class($this);
+ if (substr($class, -6) == 'Plugin') {
+ $name = substr($class, 0, -6);
+ $path = INSTALLDIR . "/plugins/$name/locale";
+ if (file_exists($path) && is_dir($path)) {
+ bindtextdomain($name, $path);
+ }
+ }
+ }
+
+ protected function log($level, $msg)
+ {
+ common_log($level, get_class($this) . ': '.$msg);
+ }
+
+ protected function debug($msg)
+ {
+ $this->log(LOG_DEBUG, $msg);
+ }
}
+
diff --git a/lib/router.php b/lib/router.php
index 1a090861e..398135a3e 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -88,6 +88,8 @@ class Router
$m->connect('doc/:title', array('action' => 'doc'));
+ $m->connect('main/login?user_id=:user_id&token=:token', array('action'=>'login'), array('user_id'=> '[0-9]+', 'token'=>'.+'));
+
// main stuff is repetitive
$main = array('login', 'logout', 'register', 'subscribe',
@@ -97,7 +99,7 @@ class Router
'groupblock', 'groupunblock',
'sandbox', 'unsandbox',
'silence', 'unsilence',
- 'deleteuser');
+ 'deleteuser', 'forward');
foreach ($main as $a) {
$m->connect('main/'.$a, array('action' => $a));
diff --git a/lib/rssaction.php b/lib/rssaction.php
index d591c99ed..62e3f21b6 100644
--- a/lib/rssaction.php
+++ b/lib/rssaction.php
@@ -52,7 +52,7 @@ class Rss10Action extends Action
* @see Action::__construct
*/
- function __construct($output='php://output', $indent=true)
+ function __construct($output='php://output', $indent=null)
{
parent::__construct($output, $indent);
}
diff --git a/lib/schema.php b/lib/schema.php
index df7cb65f5..a8ba91b87 100644
--- a/lib/schema.php
+++ b/lib/schema.php
@@ -94,7 +94,7 @@ class Schema
public function getTableDef($name)
{
- $res =& $this->conn->query('DESCRIBE ' . $name);
+ $res = $this->conn->query('DESCRIBE ' . $name);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -213,7 +213,7 @@ class Schema
$sql .= "); ";
- $res =& $this->conn->query($sql);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -234,7 +234,7 @@ class Schema
public function dropTable($name)
{
- $res =& $this->conn->query("DROP TABLE $name");
+ $res = $this->conn->query("DROP TABLE $name");
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -269,7 +269,7 @@ class Schema
$name = "$table_".implode("_", $columnNames)."_idx";
}
- $res =& $this->conn->query("ALTER TABLE $table ".
+ $res = $this->conn->query("ALTER TABLE $table ".
"ADD INDEX $name (".
implode(",", $columnNames).")");
@@ -291,7 +291,7 @@ class Schema
public function dropIndex($table, $name)
{
- $res =& $this->conn->query("ALTER TABLE $table DROP INDEX $name");
+ $res = $this->conn->query("ALTER TABLE $table DROP INDEX $name");
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -314,7 +314,7 @@ class Schema
{
$sql = "ALTER TABLE $table ADD COLUMN " . $this->_columnSql($columndef);
- $res =& $this->conn->query($sql);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -339,7 +339,7 @@ class Schema
$sql = "ALTER TABLE $table MODIFY COLUMN " .
$this->_columnSql($columndef);
- $res =& $this->conn->query($sql);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -363,7 +363,7 @@ class Schema
{
$sql = "ALTER TABLE $table DROP COLUMN $columnName";
- $res =& $this->conn->query($sql);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -446,7 +446,7 @@ class Schema
$sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase);
- $res =& $this->conn->query($sql);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
diff --git a/lib/subs.php b/lib/subs.php
index 2fc3160de..4b6b03967 100644
--- a/lib/subs.php
+++ b/lib/subs.php
@@ -127,6 +127,12 @@ function subs_unsubscribe_to($user, $other)
if (!$user->isSubscribed($other))
return _('Not subscribed!');
+ // Don't allow deleting self subs
+
+ if ($user->id == $other->id) {
+ return _('Couldn\'t delete self-subscription.');
+ }
+
$sub = DB_DataObject::factory('subscription');
$sub->subscriber = $user->id;
diff --git a/lib/util.php b/lib/util.php
index 99a0a1db3..14d666503 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -127,7 +127,7 @@ function common_check_user($nickname, $password)
if (0 == strcmp(common_munge_password($password, $user->id),
$user->password)) {
//internal checking passed
- $authenticatedUser =& $user;
+ $authenticatedUser = $user;
}
}
}
@@ -1070,18 +1070,21 @@ function common_request_id()
function common_log($priority, $msg, $filename=null)
{
- $msg = '[' . common_request_id() . '] ' . $msg;
- $logfile = common_config('site', 'logfile');
- if ($logfile) {
- $log = fopen($logfile, "a");
- if ($log) {
- $output = common_log_line($priority, $msg);
- fwrite($log, $output);
- fclose($log);
+ if(Event::handle('StartLog', array(&$priority, &$msg, &$filename))){
+ $msg = '[' . common_request_id() . '] ' . $msg;
+ $logfile = common_config('site', 'logfile');
+ if ($logfile) {
+ $log = fopen($logfile, "a");
+ if ($log) {
+ $output = common_log_line($priority, $msg);
+ fwrite($log, $output);
+ fclose($log);
+ }
+ } else {
+ common_ensure_syslog();
+ syslog($priority, $msg);
}
- } else {
- common_ensure_syslog();
- syslog($priority, $msg);
+ Event::handle('EndLog', array($priority, $msg, $filename));
}
}
diff --git a/lib/xmloutputter.php b/lib/xmloutputter.php
index 5f06e491d..15b18e7d9 100644
--- a/lib/xmloutputter.php
+++ b/lib/xmloutputter.php
@@ -67,10 +67,13 @@ class XMLOutputter
* @param boolean $indent Whether to indent output, default true
*/
- function __construct($output='php://output', $indent=true)
+ function __construct($output='php://output', $indent=null)
{
$this->xw = new XMLWriter();
$this->xw->openURI($output);
+ if(is_null($indent)) {
+ $indent = common_config('site', 'indent');
+ }
$this->xw->setIndent($indent);
}
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index 2b8f80bdc..c7bb7a5e3 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:01+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:25:58+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
@@ -181,7 +181,12 @@ msgstr "ليس للمستخدم مل٠شخصي."
msgid "Could not save profile."
msgstr "تعذّر Ø­Ùظ المل٠الشخصي."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "لا يمكنك حذ٠المستخدمين."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Ùشل منع المستخدم."
@@ -560,7 +565,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -805,100 +810,100 @@ msgstr "التصميم"
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "مسار شعار غير صالح."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "السمة غير متوÙرة: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "غيّر الشعار"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "شعار الموقع"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "غيّر السمة"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "سمة الموقع"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "سمة الموقع."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "تغيير صورة الخلÙية"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "الخلÙية"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "مكّن"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "عطّل"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "مكّن صورة الخلÙية أو عطّلها."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "تغيير الألوان"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "المحتوى"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "الشريط الجانبي"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "النص"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "وصلات"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "استخدم المبدئيات"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "استعد التصميمات المبدئية"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "ارجع إلى المبدئي"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -908,7 +913,7 @@ msgstr "ارجع إلى المبدئي"
msgid "Save"
msgstr "أرسل"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "احÙظ التصميم"
@@ -1135,16 +1140,16 @@ msgstr ""
#: actions/favorited.php:65 lib/popularnoticesection.php:88
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr ""
+msgstr "إشعارات مشهورة"
#: actions/favorited.php:67
#, php-format
msgid "Popular notices, page %d"
-msgstr ""
+msgstr "إشعارات مشهورة، الصÙحة %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
-msgstr ""
+msgstr "أشهر الإشعارات على الموقع حاليًا."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
@@ -1306,11 +1311,11 @@ msgstr "لا تمنع هذا المستخدم من هذه المجموعة"
#: actions/groupblock.php:179
msgid "Block this user from this group"
-msgstr ""
+msgstr "امنع هذا المستخدم من هذه المجموعة"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
-msgstr ""
+msgstr "خطأ ÙÙŠ قاعدة البيانات أثناء منع المستخدم من المجموعة."
#: actions/groupbyid.php:74
msgid "No ID"
@@ -1330,18 +1335,18 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "تعذّر تحديث تصميمك."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
@@ -1637,7 +1642,7 @@ msgstr "رسالة شخصية"
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "أرسل"
@@ -1717,11 +1722,11 @@ msgstr ""
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "والج بالÙعل."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr ""
@@ -1922,8 +1927,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@@ -2500,7 +2505,7 @@ msgstr ""
#: actions/recoverpassword.php:352
msgid "Password must be 6 chars or more."
-msgstr ""
+msgstr "يجب أن تكون كلمة السر 6 محار٠أو أكثر."
#: actions/recoverpassword.php:356
msgid "Password and confirmation do not match."
@@ -2516,7 +2521,7 @@ msgstr ""
#: actions/register.php:85 actions/register.php:189 actions/register.php:404
msgid "Sorry, only invited people can register."
-msgstr ""
+msgstr "عذرًا، الأشخاص المدعوون وحدهم يستطيعون التسجيل."
#: actions/register.php:92
msgid "Sorry, invalid invitation code."
@@ -3062,9 +3067,8 @@ msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكتروني للاتصال بموقعك"
#: actions/siteadminpanel.php:290
-#, fuzzy
msgid "Local"
-msgstr "الموقع"
+msgstr "محلي"
#: actions/siteadminpanel.php:301
msgid "Default timezone"
@@ -3103,13 +3107,12 @@ msgid "Access"
msgstr "Ù†Ùاذ"
#: actions/siteadminpanel.php:334
-#, fuzzy
msgid "Private"
-msgstr "خصوصية"
+msgstr "خاص"
#: actions/siteadminpanel.php:336
msgid "Prohibit anonymous users (not logged in) from viewing site?"
-msgstr ""
+msgstr "أأمنع المستخدمين المجهولين (غير الوالجين) من عرض الموقع؟"
#: actions/siteadminpanel.php:340
#, fuzzy
@@ -4203,11 +4206,25 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "تعذّر إنشاء الكنى."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "لست Ù…Ùشتركًا بأي أحد."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "لست مشتركًا بأحد."
@@ -4217,11 +4234,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "لا أحد مشترك بك."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "لا أحد مشترك بك."
@@ -4231,11 +4248,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "لست عضوًا ÙÙŠ أي مجموعة."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "لست عضوًا ÙÙŠ أي مجموعة."
@@ -4245,7 +4262,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4264,6 +4281,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4320,16 +4338,11 @@ msgid "Upload file"
msgstr "ارÙع ملÙًا"
#: lib/designsettings.php:109
-#, fuzzy
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "هذا المل٠كبير جدًا. إن أقصى حجم للملÙات هو %s."
-
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
+msgstr "تستطيع رÙع صورتك الشخصية. أقصى حجم للمل٠هو 2 Ù….ب."
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "استعيدت مبدئيات التصميم."
@@ -4773,7 +4786,7 @@ msgstr "أرسل إشعارًا مباشرًا"
msgid "To"
msgstr "إلى"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "المحار٠المتوÙرة"
@@ -4786,11 +4799,11 @@ msgstr "أرسل إشعارًا"
msgid "What's up, %s?"
msgstr "ما الأخبار يا %s؟"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "أرÙÙ‚"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "أرÙÙ‚ ملÙًا"
@@ -4955,7 +4968,7 @@ msgstr "Ù…Ùختارون"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr ""
+msgstr "مشهورة"
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -5060,7 +5073,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "لست Ù…Ùشتركًا!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "تعذّر حذ٠الاشتراك."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "تعذّر حذ٠الاشتراك."
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index 8d020e084..e1d9bd777 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:07+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:01+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
@@ -180,7 +180,12 @@ msgstr "ПотребителÑÑ‚ нÑма профил."
msgid "Could not save profile."
msgstr "Грешка при запазване на профила."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Ðе можете да Ñпрете да Ñледите Ñебе Ñи!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -566,7 +571,7 @@ msgstr "ИзрÑзване"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -818,106 +823,106 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Ðеправилен размер."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Страницата не е доÑтъпна във вида медиÑ, който приемате"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "СмÑна на логото"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Покани"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "ПромÑна"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Ðова бележка"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Излизане от Ñайта"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "СмÑна на изображението за фон"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Фон"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Може да качите лого за групата ви."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Вкл."
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Изкл."
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "СмÑна на цветовете"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Съдържание"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Страничен панел"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "ТекÑÑ‚"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "СпиÑък"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -927,7 +932,7 @@ msgstr ""
msgid "Save"
msgstr "Запазване"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1370,20 +1375,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Грешка при обновÑване на потребителÑ."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Грешка при запиÑване наÑтройките за Twitter"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "ÐаÑтройките Ñа запазени."
@@ -1699,7 +1704,7 @@ msgstr "Лично Ñъобщение"
msgid "Optionally add a personal message to the invitation."
msgstr "Може да добавите и лично Ñъобщение към поканата."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Прати"
@@ -1806,11 +1811,11 @@ msgstr "Грешка при проÑледÑване — потребителÑÑ
msgid "%s left group %s"
msgstr "%s напуÑна групата %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Вече Ñте влезли."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Ðевалидно Ñъдържание на бележка"
@@ -2022,8 +2027,8 @@ msgstr "Свързване"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Ðеподдържан формат на данните"
@@ -4403,39 +4408,53 @@ msgstr "Уведомлението е включено."
msgid "Can't turn on notification."
msgstr "Грешка при включване на уведомлението."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Грешка при отбелÑзване като любима."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Ðе Ñте абонирани за този профил"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Вече Ñте абонирани за Ñледните потребители:"
msgstr[1] "Вече Ñте абонирани за Ñледните потребители:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Грешка при абониране на друг потребител за ваÑ."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Грешка при абониране на друг потребител за ваÑ."
msgstr[1] "Грешка при абониране на друг потребител за ваÑ."
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Ðе членувате в нито една група."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе членувате в тази група."
msgstr[1] "Ðе членувате в тази група."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4454,6 +4473,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4516,11 +4536,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Можете да качите личен аватар тук."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4978,7 +4994,7 @@ msgstr "Изпращане на прÑко Ñъобщеие"
msgid "To"
msgstr "До"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Ðалични знаци"
@@ -4991,11 +5007,11 @@ msgstr "Изпращане на бележка"
msgid "What's up, %s?"
msgstr "Какво Ñтава, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5272,7 +5288,12 @@ msgstr "Грешка при абониране на друг потребитеÐ
msgid "Not subscribed!"
msgstr "Ðе Ñте абонирани!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Грешка при изтриване на абонамента."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Грешка при изтриване на абонамента."
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index 23102cfb1..290866b5c 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:11+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:04+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@@ -80,6 +80,8 @@ msgstr "Canal dels amics de %s (Atom)"
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
+"Aquesta és la línia temporal de %s i amics, però ningú hi ha enviat res "
+"encara."
#: actions/all.php:132
#, php-format
@@ -183,7 +185,12 @@ msgstr "L'usuari no té perfil."
msgid "Could not save profile."
msgstr "No s'ha pogut guardar el perfil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "No podeu suprimir els usuaris."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Ha fallat el bloqueig d'usuari."
@@ -196,9 +203,9 @@ msgid "No message text!"
msgstr "No hi ha text al missatge!"
#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max message size is %d chars."
-msgstr "És massa llarg. Màxim del missatge és 140 caràcters."
+msgstr "És massa llarg. La mida màxima del missatge és %d caràcters."
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
@@ -251,9 +258,8 @@ msgid "No status found with that ID."
msgstr "No s'ha trobat cap estatus amb aquesta ID."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite!"
-msgstr "Aquesta nota ja és favorita."
+msgstr "Aquest estat ja és un preferit!"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
@@ -266,7 +272,7 @@ msgstr "Aquesta notificació no és un favorit!"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
-msgstr "No pots eliminar favorits."
+msgstr "No s'ha pogut suprimir el preferit."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
@@ -292,9 +298,8 @@ msgid "Two user ids or screen_names must be supplied."
msgstr "Dos ids d'usuari o screen_names has de ser substituïts."
#: actions/apifriendshipsshow.php:135
-#, fuzzy
msgid "Could not determine source user."
-msgstr "No s'ha pogut recuperar la conversa pública."
+msgstr "No s'ha pogut determinar l'usuari d'origen."
#: actions/apifriendshipsshow.php:143
#, fuzzy
@@ -352,9 +357,9 @@ msgstr "Hi ha massa àlies! Màxim %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Etiqueta no vàlida: \"%s\""
+msgstr "L'àlies no és vàlid «%s»"
#: actions/apigroupcreate.php:273 actions/editgroup.php:228
#: actions/newgroup.php:172
@@ -448,9 +453,8 @@ msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
-#, fuzzy
msgid "Unsupported format."
-msgstr "Format d'imatge no suportat."
+msgstr "El format no està implementat."
#: actions/apitimelinefavorites.php:107
#, php-format
@@ -573,7 +577,7 @@ msgstr "Crop"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -658,9 +662,8 @@ msgid "Unblock this user"
msgstr "Desbloquejar aquest usuari"
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
-msgstr "Ja havies bloquejat aquest usuari."
+msgstr "Ja heu blocat l'usuari."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
msgid "Block user"
@@ -696,9 +699,8 @@ msgid "Failed to save block information."
msgstr "Error al guardar la informació del block."
#: actions/bookmarklet.php:50
-#, fuzzy
msgid "Post to "
-msgstr "Foto"
+msgstr "Envia a "
#: actions/confirmaddress.php:75
msgid "No confirmation code."
@@ -834,102 +836,100 @@ msgstr "Disseny"
msgid "Design settings for this StatusNet site."
msgstr "Paràmetres de disseny d'aquest lloc StatusNet."
-#: actions/designadminpanel.php:270
-#, fuzzy
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
-msgstr "Mida invàlida."
+msgstr "L'URL del logotip no és vàlid."
-#: actions/designadminpanel.php:274
-#, fuzzy, php-format
+#: actions/designadminpanel.php:279
+#, php-format
msgid "Theme not available: %s"
-msgstr "Aquesta pàgina no està disponible en "
+msgstr "El tema no és disponible: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Canvia el logotip"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Logotip del lloc"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Canvia el tema"
-#: actions/designadminpanel.php:399
-#, fuzzy
+#: actions/designadminpanel.php:404
msgid "Site theme"
-msgstr "Avís del lloc"
+msgstr "Tema del lloc"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Tema del lloc."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Canvia la imatge de fons"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Fons"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Pots pujar una imatge de logo per al grup."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "Activada"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Desactivada"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Activa o desactiva la imatge de fons."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Posa en mosaic la imatge de fons"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Canvia els colors"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Contingut"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Barra lateral"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Text"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Enllaços"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -939,7 +939,7 @@ msgstr ""
msgid "Save"
msgstr "Guardar"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Desa el disseny"
@@ -949,7 +949,7 @@ msgstr "Aquesta notificació no és un favorit!"
#: actions/disfavor.php:94
msgid "Add to favorites"
-msgstr "Afegir a favorits"
+msgstr "Afegeix als preferits"
#: actions/doc.php:69
msgid "No such document."
@@ -974,18 +974,17 @@ msgid "Use this form to edit the group."
msgstr "Utilitza aquest formulari per editar el grup."
#: actions/editgroup.php:201 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
msgid "description is too long (max %d chars)."
-msgstr "la descripció és massa llarga (màx. 140 caràcters)."
+msgstr "la descripció és massa llarga (màx. %d caràcters)."
#: actions/editgroup.php:253
msgid "Could not update group."
msgstr "No s'ha pogut actualitzar el grup."
#: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
msgid "Could not create aliases."
-msgstr "No es pot crear favorit."
+msgstr "No s'han pogut crear els àlies."
#: actions/editgroup.php:269
msgid "Options saved."
@@ -1007,13 +1006,13 @@ msgstr "Adreça"
#: actions/emailsettings.php:105
msgid "Current confirmed email address."
-msgstr "Correu electrònic confirmat actualment."
+msgstr "Adreça electrònica confirmada actualment."
#: actions/emailsettings.php:107 actions/emailsettings.php:140
#: actions/imsettings.php:108 actions/smssettings.php:115
#: actions/smssettings.php:158
msgid "Remove"
-msgstr "Eliminar"
+msgstr "Suprimeix"
#: actions/emailsettings.php:113
msgid ""
@@ -1026,7 +1025,7 @@ msgstr ""
#: actions/emailsettings.php:117 actions/imsettings.php:120
#: actions/smssettings.php:126
msgid "Cancel"
-msgstr "Cancel·lar"
+msgstr "Cancel·la"
#: actions/emailsettings.php:121
msgid "Email Address"
@@ -1039,7 +1038,7 @@ msgstr "Correu electrònic, com Email address, like \"UserName@example.org\""
#: actions/emailsettings.php:126 actions/imsettings.php:133
#: actions/smssettings.php:145
msgid "Add"
-msgstr "Afegir"
+msgstr "Afegeix"
#: actions/emailsettings.php:133 actions/smssettings.php:152
msgid "Incoming email"
@@ -1048,7 +1047,7 @@ msgstr "Correu electrònic entrant"
#: actions/emailsettings.php:138 actions/smssettings.php:157
msgid "Send email to this address to post new notices."
msgstr ""
-"Enviar correu electrònic a aquesta direcció per publicar noves notificacions."
+"Envia correu electrònic a aquesta adreça per publicar noves notificacions."
#: actions/emailsettings.php:145 actions/smssettings.php:162
msgid "Make a new email address for posting to; cancels the old one."
@@ -1255,7 +1254,7 @@ msgstr "Sense adjuncions"
#: actions/file.php:51
msgid "No uploaded attachments"
-msgstr ""
+msgstr "No s'ha pujat cap adjunció"
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
@@ -1299,9 +1298,8 @@ msgid "No such group."
msgstr "No s'ha trobat el grup."
#: actions/getfile.php:75
-#, fuzzy
msgid "No such file."
-msgstr "No existeix aquest avís."
+msgstr "No existeix el fitxer."
#: actions/getfile.php:79
msgid "Cannot read file."
@@ -1384,20 +1382,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "No s'ha pogut actualitzar l'usuari."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "No s'ha pogut guardar la teva configuració de Twitter!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Preferències de sincronització guardades."
@@ -1447,7 +1445,7 @@ msgstr "Admin"
#: actions/groupmembers.php:346 lib/blockform.php:69
msgid "Block"
-msgstr "Bloquejar"
+msgstr "Bloca"
#: actions/groupmembers.php:441
#, fuzzy
@@ -1724,9 +1722,9 @@ msgstr "Missatge personal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalment pots afegir un missatge a la invitació."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
-msgstr "Enviar"
+msgstr "Envia"
#: actions/invite.php:226
#, php-format
@@ -1830,11 +1828,11 @@ msgstr "No s'ha pogut eliminar l'usuari %s del grup %s"
msgid "%s left group %s"
msgstr "%s ha abandonat el grup %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Ja estàs connectat."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "El contingut de l'avís és invàlid"
@@ -1937,7 +1935,7 @@ msgstr "Nou missatge"
#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:367
msgid "You can't send a message to this user."
-msgstr "No pots enviar un missatge a aquest usuari."
+msgstr "No podeu enviar un misssatge a aquest usuari."
#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:351
#: lib/command.php:424
@@ -2046,10 +2044,10 @@ msgstr "tipus de contingut "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@@ -2071,7 +2069,7 @@ msgstr "Gestionar altres vàries opcions."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr " (servei gratuït)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
@@ -2088,7 +2086,7 @@ msgstr "Configuració del perfil"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Mostra o amaga els dissenys de perfil."
#: actions/othersettings.php:153
msgid "URL shortening service is too long (max 50 chars)."
@@ -2210,9 +2208,8 @@ msgid "Path"
msgstr "Camí"
#: actions/pathsadminpanel.php:216
-#, fuzzy
msgid "Site path"
-msgstr "Avís del lloc"
+msgstr "Camí del lloc"
#: actions/pathsadminpanel.php:220
msgid "Path to locales"
@@ -2228,11 +2225,11 @@ msgstr "Tema"
#: actions/pathsadminpanel.php:232
msgid "Theme server"
-msgstr ""
+msgstr "Servidor dels temes"
#: actions/pathsadminpanel.php:236
msgid "Theme path"
-msgstr ""
+msgstr "Camí dels temes"
#: actions/pathsadminpanel.php:240
msgid "Theme directory"
@@ -3789,11 +3786,11 @@ msgstr ""
#: actions/useradminpanel.php:265
msgid "Sessions"
-msgstr ""
+msgstr "Sessions"
#: actions/useradminpanel.php:270
msgid "Handle sessions"
-msgstr ""
+msgstr "Gestiona les sessions"
#: actions/useradminpanel.php:272
msgid "Whether to handle sessions ourselves."
@@ -3823,9 +3820,8 @@ msgstr ""
"avisos de ningú, clica \"Cancel·lar\"."
#: actions/userauthorization.php:188
-#, fuzzy
msgid "License"
-msgstr "llicència."
+msgstr "Llicència"
#: actions/userauthorization.php:209
msgid "Accept"
@@ -4033,9 +4029,9 @@ msgid "Could not set group membership."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
#: classes/User.php:347
-#, fuzzy, php-format
+#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr "Missatge per a %1$s a %2$s"
+msgstr "Us donem la benvinguda a %1$s, @%2$s!"
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
@@ -4105,9 +4101,8 @@ msgid "Connect to services"
msgstr "No s'ha pogut redirigir al servidor: %s"
#: lib/action.php:440
-#, fuzzy
msgid "Change site configuration"
-msgstr "Navegació primària del lloc"
+msgstr "Canvia la configuració del lloc"
#: lib/action.php:444 lib/subgroupnav.php:105
msgid "Invite"
@@ -4253,9 +4248,8 @@ msgid "There was a problem with your session token."
msgstr "Ha ocorregut algun problema amb la teva sessió."
#: lib/adminpanelaction.php:96
-#, fuzzy
msgid "You cannot make changes to this site."
-msgstr "No pots enviar un missatge a aquest usuari."
+msgstr "No podeu fer canvis al lloc."
#: lib/adminpanelaction.php:195
#, fuzzy
@@ -4395,9 +4389,9 @@ msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d"
#: lib/command.php:439
-#, fuzzy, php-format
+#, php-format
msgid "Reply to %s sent"
-msgstr "respondre a aquesta nota"
+msgstr "S'ha enviat la resposta a %s"
#: lib/command.php:441
#, fuzzy
@@ -4442,40 +4436,53 @@ msgstr "Notificacions on."
msgid "Can't turn on notification."
msgstr "No es poden posar en on les notificacions."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "No s'han pogut crear els àlies."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "No estàs subscrit a aquest perfil."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ja estàs subscrit a aquests usuaris:"
msgstr[1] "Ja estàs subscrit a aquests usuaris:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "No pots subscriure a un altre a tu mateix."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "No pots subscriure a un altre a tu mateix."
msgstr[1] "No pots subscriure a un altre a tu mateix."
-#: lib/command.php:636
-#, fuzzy
+#: lib/command.php:667
msgid "You are not a member of any groups."
-msgstr "No ets membre d'aquest grup."
+msgstr "No sou membre de cap grup."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "No sou un membre del grup."
msgstr[1] "No sou un membre del grup."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4494,6 +4501,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4514,9 +4522,8 @@ msgid ""
msgstr ""
#: lib/common.php:199
-#, fuzzy
msgid "No configuration file found. "
-msgstr "Cap codi de confirmació."
+msgstr "No s'ha trobat cap fitxer de configuració. "
#: lib/common.php:200
msgid "I looked for configuration files in the following places: "
@@ -4527,9 +4534,8 @@ msgid "You may wish to run the installer to fix this."
msgstr ""
#: lib/common.php:202
-#, fuzzy
msgid "Go to the installer."
-msgstr "Accedir a aquest lloc"
+msgstr "Vés a l'instal·lador."
#: lib/connectsettingsaction.php:110
msgid "IM"
@@ -4558,11 +4564,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Pots pujar el teu avatar personal."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4657,9 +4659,8 @@ msgid "Group"
msgstr "Grup"
#: lib/groupnav.php:101
-#, fuzzy
msgid "Blocked"
-msgstr "Bloquejar"
+msgstr "Blocat"
#: lib/groupnav.php:102
#, fuzzy, php-format
@@ -4771,9 +4772,8 @@ msgid ""
msgstr ""
#: lib/mailbox.php:227 lib/noticelist.php:452
-#, fuzzy
msgid "from"
-msgstr " de "
+msgstr "de"
#: lib/mail.php:172
msgid "Email address confirmation"
@@ -5027,7 +5027,7 @@ msgstr "Enviar notificació directa"
msgid "To"
msgstr "A"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Caràcters disponibles"
@@ -5040,13 +5040,13 @@ msgstr "Enviar notificació"
msgid "What's up, %s?"
msgstr "Què tal, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Adjunta"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Adjunta un fitxer"
#: lib/noticelist.php:403
#, php-format
@@ -5135,7 +5135,7 @@ msgstr "Respostes"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr "Favorits"
+msgstr "Preferits"
#: lib/personalgroupnav.php:124
msgid "Inbox"
@@ -5263,14 +5263,12 @@ msgid "More..."
msgstr "Més…"
#: lib/silenceform.php:67
-#, fuzzy
msgid "Silence"
-msgstr "Avís del lloc"
+msgstr "Silencia"
#: lib/silenceform.php:78
-#, fuzzy
msgid "Silence this user"
-msgstr "Bloquejar aquest usuari"
+msgstr "Silencia l'usuari"
#: lib/subgroupnav.php:83
#, php-format
@@ -5322,7 +5320,12 @@ msgstr "No pots subscriure a un altre a tu mateix."
msgid "Not subscribed!"
msgstr "No estàs subscrit!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "No s'ha pogut eliminar la subscripció."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "No s'ha pogut eliminar la subscripció."
@@ -5345,12 +5348,11 @@ msgstr "Desbloquejar aquest usuari"
#: lib/unsilenceform.php:67
msgid "Unsilence"
-msgstr ""
+msgstr "Dessilencia"
#: lib/unsilenceform.php:78
-#, fuzzy
msgid "Unsilence this user"
-msgstr "Desbloquejar aquest usuari"
+msgstr "Dessilencia l'usuari"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index f1e002a9d..6d74b1761 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:14+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:08+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "Uživatel nemá profil."
msgid "Could not save profile."
msgstr "Nelze uložit profil"
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Nelze aktualizovat uživatele"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -265,7 +270,7 @@ msgstr ""
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
-msgstr ""
+msgstr "Nelze smazat oblíbenou položku."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
@@ -574,7 +579,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -609,25 +614,22 @@ msgid "Failed updating avatar."
msgstr "Nahrávání obrázku selhalo."
#: actions/avatarsettings.php:387
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Obrázek nahrán"
+msgstr "Avatar smazán."
#: actions/blockedfromgroup.php:73 actions/editgroup.php:84
#: actions/groupdesignsettings.php:84 actions/grouplogo.php:86
#: actions/groupmembers.php:76 actions/grouprss.php:91
#: actions/joingroup.php:76 actions/showgroup.php:121
-#, fuzzy
msgid "No nickname"
-msgstr "Žádná přezdívka."
+msgstr "Žádná přezdívka"
#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
#: actions/grouplogo.php:99 actions/groupmembers.php:83
#: actions/grouprss.php:98 actions/joingroup.php:83 actions/showgroup.php:137
-#, fuzzy
msgid "No such group"
-msgstr "Žádné takové oznámení."
+msgstr "Žádná taková skupina"
#: actions/blockedfromgroup.php:90
#, fuzzy, php-format
@@ -677,7 +679,7 @@ msgstr ""
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
msgid "No"
-msgstr ""
+msgstr "Ne"
#: actions/block.php:143 actions/deleteuser.php:147
#, fuzzy
@@ -687,12 +689,11 @@ msgstr "Žádný takový uživatel."
#: actions/block.php:144 actions/deletenotice.php:146
#: actions/deleteuser.php:148 actions/groupblock.php:179
msgid "Yes"
-msgstr ""
+msgstr "Ano"
#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
-#, fuzzy
msgid "Block this user"
-msgstr "Žádný takový uživatel."
+msgstr "Zablokovat tohoto uživatele"
#: actions/block.php:162
msgid "Failed to save block information."
@@ -770,7 +771,7 @@ msgstr "Nepřihlášen"
#: actions/deletenotice.php:71
msgid "Can't delete this notice."
-msgstr ""
+msgstr "Toto oznámení nelze odstranit."
#: actions/deletenotice.php:103
msgid ""
@@ -793,7 +794,7 @@ msgstr "Žádné takové oznámení."
#: actions/deletenotice.php:146 lib/noticelist.php:550
msgid "Delete this notice"
-msgstr ""
+msgstr "Odstranit toto oznámení"
#: actions/deletenotice.php:157
msgid "There was a problem with your session token. Try again, please."
@@ -820,122 +821,118 @@ msgid ""
msgstr ""
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
-#, fuzzy
msgid "Delete this user"
-msgstr "Žádný takový uživatel."
+msgstr "Odstranit tohoto uživatele"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/adminpanelaction.php:302 lib/groupnav.php:119
msgid "Design"
-msgstr ""
+msgstr "Vzhled"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Neplatná velikost"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Změnit heslo"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Nové sdělení"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Změnit"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Nové sdělení"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Pozadí"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
-#, fuzzy
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
-msgstr "Změnit heslo"
+msgstr "Změnit barvy"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
-#, fuzzy
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
-msgstr "Připojit"
+msgstr "Obsah"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Hledat"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
-#, fuzzy
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
-msgstr "Přihlásit"
+msgstr "Odkazy"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -945,7 +942,7 @@ msgstr ""
msgid "Save"
msgstr "Uložit"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -955,7 +952,7 @@ msgstr ""
#: actions/disfavor.php:94
msgid "Add to favorites"
-msgstr ""
+msgstr "Přidat do oblíbených"
#: actions/doc.php:69
msgid "No such document."
@@ -964,7 +961,7 @@ msgstr "Žádný takový dokument."
#: actions/editgroup.php:56
#, php-format
msgid "Edit %s group"
-msgstr ""
+msgstr "Upravit %s skupinu"
#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
msgid "You must be logged in to create a group."
@@ -995,13 +992,12 @@ msgid "Could not create aliases."
msgstr "Nelze uložin informace o obrázku"
#: actions/editgroup.php:269
-#, fuzzy
msgid "Options saved."
-msgstr "Nastavení uloženo"
+msgstr "Nastavení uloženo."
#: actions/emailsettings.php:60
msgid "Email Settings"
-msgstr ""
+msgstr "Nastavení E-mailu"
#: actions/emailsettings.php:71
#, php-format
@@ -1061,7 +1057,7 @@ msgstr ""
#: actions/emailsettings.php:148 actions/smssettings.php:164
msgid "New"
-msgstr ""
+msgstr "Nový"
#: actions/emailsettings.php:153 actions/imsettings.php:139
#: actions/smssettings.php:169
@@ -1244,9 +1240,8 @@ msgid "No notice id"
msgstr "Nové sdělení"
#: actions/file.php:38
-#, fuzzy
msgid "No notice"
-msgstr "Nové sdělení"
+msgstr "Žádné oznámení"
#: actions/file.php:42
msgid "No attachments"
@@ -1385,26 +1380,26 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Nelze aktualizovat uživatele"
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Nastavení uloženo"
#: actions/grouplogo.php:139 actions/grouplogo.php:192
msgid "Group logo"
-msgstr ""
+msgstr "Logo skupiny"
#: actions/grouplogo.php:150
#, php-format
@@ -1502,7 +1497,7 @@ msgstr ""
#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
-msgstr ""
+msgstr "Skupiny"
#: actions/groups.php:64
#, php-format
@@ -1712,7 +1707,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Odeslat"
@@ -1794,11 +1789,11 @@ msgstr "Nelze vytvořit OpenID z: %s"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Již přihlášen"
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Neplatný obsah sdělení"
@@ -1885,7 +1880,7 @@ msgstr ""
#: actions/newgroup.php:53
msgid "New group"
-msgstr ""
+msgstr "Nová skupina"
#: actions/newgroup.php:110
msgid "Use this form to create a new group."
@@ -2008,8 +2003,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -2313,9 +2308,8 @@ msgid "Describe yourself and your interests in %d chars"
msgstr "Popiš sebe a své zájmy ve 140 znacích"
#: actions/profilesettings.php:125 actions/register.php:463
-#, fuzzy
msgid "Describe yourself and your interests"
-msgstr "Popiš sebe a své zájmy ve 140 znacích"
+msgstr "Popište sebe a své zájmy"
#: actions/profilesettings.php:127 actions/register.php:465
msgid "Bio"
@@ -2345,7 +2339,7 @@ msgstr ""
#: actions/profilesettings.php:144 actions/siteadminpanel.php:307
msgid "Language"
-msgstr ""
+msgstr "Jazyk"
#: actions/profilesettings.php:145
msgid "Preferred language"
@@ -2629,7 +2623,7 @@ msgstr "Chyba v ověřovacím kódu"
#: actions/register.php:112
msgid "Registration successful"
-msgstr ""
+msgstr "Registrace úspěšná"
#: actions/register.php:114 actions/register.php:502 lib/action.php:455
#: lib/logingroupnav.php:85
@@ -2921,9 +2915,8 @@ msgstr ""
#: actions/showgroup.php:274 actions/tagother.php:128
#: actions/userauthorization.php:179 lib/userprofile.php:194
-#, fuzzy
msgid "Note"
-msgstr "Sdělení"
+msgstr "Poznámka"
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
@@ -3392,7 +3385,7 @@ msgstr ""
#: actions/smssettings.php:306
msgid "No phone number."
-msgstr ""
+msgstr "Žádné telefonní Äíslo."
#: actions/smssettings.php:311
msgid "No carrier selected."
@@ -3759,7 +3752,7 @@ msgstr ""
#: actions/userauthorization.php:188
msgid "License"
-msgstr ""
+msgstr "Licence"
#: actions/userauthorization.php:209
msgid "Accept"
@@ -4074,9 +4067,8 @@ msgid "Help"
msgstr "Nápověda"
#: lib/action.php:461
-#, fuzzy
msgid "Help me!"
-msgstr "Nápověda"
+msgstr "Pomoci mi!"
#: lib/action.php:464 lib/searchaction.php:127
msgid "Search"
@@ -4233,9 +4225,8 @@ msgid "Author"
msgstr ""
#: lib/attachmentlist.php:278
-#, fuzzy
msgid "Provider"
-msgstr "Profil"
+msgstr "Poskytovatel"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
@@ -4382,43 +4373,57 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Nelze uložin informace o obrázku"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Neodeslal jste nám profil"
msgstr[1] "Neodeslal jste nám profil"
msgstr[2] ""
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Vzdálený odběr"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Vzdálený odběr"
msgstr[1] "Vzdálený odběr"
msgstr[2] ""
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Neodeslal jste nám profil"
msgstr[1] "Neodeslal jste nám profil"
msgstr[2] ""
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4437,6 +4442,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4500,11 +4506,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4616,9 +4618,8 @@ msgid "Edit %s group properties"
msgstr ""
#: lib/groupnav.php:113
-#, fuzzy
msgid "Logo"
-msgstr "Odhlásit"
+msgstr "Logo"
#: lib/groupnav.php:114
#, php-format
@@ -4691,9 +4692,8 @@ msgid "[%s]"
msgstr ""
#: lib/joinform.php:114
-#, fuzzy
msgid "Join"
-msgstr "Přihlásit"
+msgstr "Přidat se"
#: lib/leaveform.php:114
#, fuzzy
@@ -4773,9 +4773,9 @@ msgstr ""
"%4$s.\n"
#: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
msgid "Location: %s\n"
-msgstr "Umístění %s\n"
+msgstr "Umístění: %s\n"
#: lib/mail.php:256
#, fuzzy, php-format
@@ -4968,7 +4968,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 a více znaků"
@@ -4983,11 +4983,11 @@ msgstr "Nové sdělení"
msgid "What's up, %s?"
msgstr "Co se děje %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5077,7 +5077,7 @@ msgstr "Odpovědi"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr ""
+msgstr "Oblíbené"
#: lib/personalgroupnav.php:124
msgid "Inbox"
@@ -5113,9 +5113,8 @@ msgid "Subscribers"
msgstr "Odběratelé"
#: lib/profileaction.php:157
-#, fuzzy
msgid "All subscribers"
-msgstr "Odběratelé"
+msgstr "Všichni odběratelé"
#: lib/profileaction.php:178
msgid "User ID"
@@ -5267,7 +5266,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "Nepřihlášen!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Nelze smazat odebírání"
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Nelze smazat odebírání"
@@ -5306,13 +5310,12 @@ msgid "Unsubscribe"
msgstr "Odhlásit"
#: lib/userprofile.php:116
-#, fuzzy
msgid "Edit Avatar"
-msgstr "Obrázek"
+msgstr "Upravit avatar"
#: lib/userprofile.php:236
msgid "User actions"
-msgstr ""
+msgstr "Akce uživatele"
#: lib/userprofile.php:248
#, fuzzy
@@ -5329,7 +5332,7 @@ msgstr ""
#: lib/userprofile.php:273
msgid "Message"
-msgstr ""
+msgstr "Zpráva"
#: lib/userprofile.php:311
msgid "Moderate"
@@ -5395,7 +5398,7 @@ msgstr ""
#: scripts/maildaemon.php:53
msgid "Not a registered user."
-msgstr ""
+msgstr "Není registrovaný uživatel."
#: scripts/maildaemon.php:57
msgid "Sorry, that is not your incoming email address."
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index e68bc1fd4..c1d24f11d 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:18+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:11+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@@ -180,7 +180,12 @@ msgstr "Benutzer hat kein Profil."
msgid "Could not save profile."
msgstr "Konnte Profil nicht speichern."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Du kannst dich nicht selbst entfolgen!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Blockieren des Benutzers fehlgeschlagen."
@@ -320,13 +325,13 @@ msgstr "Ungültiger Nutzername."
#: actions/register.php:217
msgid "Homepage is not a valid URL."
msgstr ""
-"Homepage ist kein gültiger URL. URL´s müssen ein Präfix wie http enthalten."
+"Homepage ist keine gültige URL. URL’s müssen ein Präfix wie http enthalten."
#: actions/apigroupcreate.php:205 actions/editgroup.php:198
#: actions/newgroup.php:142 actions/profilesettings.php:218
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
-msgstr "Ihr vollständiger Name ist zu lang (maximal 255 Zeichen)."
+msgstr "Der vollständige Name ist zu lang (maximal 255 Zeichen)."
#: actions/apigroupcreate.php:213
#, php-format
@@ -374,7 +379,7 @@ msgstr "Du bist bereits Mitglied dieser Gruppe"
#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
msgid "You have been blocked from that group by the admin."
-msgstr "Der Admin dieser Gruppe hat Sie gesperrt."
+msgstr "Der Admin dieser Gruppe hat dich gesperrt."
#: actions/apigroupjoin.php:138
#, php-format
@@ -498,7 +503,7 @@ msgstr "Nachrichten, die mit %s getagt sind"
#: actions/apitimelinetag.php:107 actions/tagrss.php:64
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Updates mit %1$s getagt auf %2$s!"
+msgstr "Aktualisierungen mit %1$s getagt auf %2$s!"
#: actions/apiusershow.php:96
msgid "Not found."
@@ -569,7 +574,7 @@ msgstr "Zuschneiden"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -686,9 +691,8 @@ msgid "Failed to save block information."
msgstr "Konnte Blockierungsdaten nicht speichern."
#: actions/bookmarklet.php:50
-#, fuzzy
msgid "Post to "
-msgstr "Foto"
+msgstr "Versenden an "
#: actions/confirmaddress.php:75
msgid "No confirmation code."
@@ -731,7 +735,7 @@ msgstr "Adresse bestätigen"
#: actions/confirmaddress.php:159
#, php-format
msgid "The address \"%s\" has been confirmed for your account."
-msgstr "Die Adresse „%s“\" wurde für dein Konto bestätigt."
+msgstr "Die Adresse „%s“ wurde für dein Konto bestätigt."
#: actions/conversation.php:99
msgid "Conversation"
@@ -773,7 +777,7 @@ msgstr "Notiz löschen"
#: actions/deletenotice.php:144
msgid "Are you sure you want to delete this notice?"
-msgstr "Sind sie sicher, dass sie diese Nachricht löschen wollen?"
+msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
#: actions/deletenotice.php:145
msgid "Do not delete this notice"
@@ -816,107 +820,104 @@ msgstr ""
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "Design-Einstellungen für diese StatusNet-Website."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "Ungültige URL für das Logo"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Theme nicht verfügbar: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Logo ändern"
-#: actions/designadminpanel.php:375
-#, fuzzy
+#: actions/designadminpanel.php:380
msgid "Site logo"
-msgstr "Einladen"
+msgstr "Seitenlogo"
-#: actions/designadminpanel.php:382
-#, fuzzy
+#: actions/designadminpanel.php:387
msgid "Change theme"
-msgstr "Ändern"
+msgstr "Theme ändern"
-#: actions/designadminpanel.php:399
-#, fuzzy
+#: actions/designadminpanel.php:404
msgid "Site theme"
-msgstr "Seitennachricht"
+msgstr "Seitentheme"
-#: actions/designadminpanel.php:400
-#, fuzzy
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
-msgstr "Von der Seite abmelden"
+msgstr "Theme dieser Seite."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Hintergrundbild ändern"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Hintergrund"
-#: actions/designadminpanel.php:422
-#, fuzzy, php-format
+#: actions/designadminpanel.php:427
+#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "Du kannst ein Logo für Deine Gruppe hochladen."
+msgstr ""
+"Du kannst ein Hintergrundbild für Deine Gruppe hochladen. Die maximale "
+"Dateigröße beträgt %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "An"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Aus"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Hintergrundbild ein- oder ausschalten."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Farben ändern"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Inhalt"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
-#, fuzzy
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
-msgstr "Suchen"
+msgstr "Seitenleiste"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Text"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Links"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Standard-Design wiederherstellen"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Standard wiederherstellen"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -926,7 +927,7 @@ msgstr "Standard wiederherstellen"
msgid "Save"
msgstr "Speichern"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Design speichern"
@@ -993,7 +994,7 @@ msgstr "Adresse"
#: actions/emailsettings.php:105
msgid "Current confirmed email address."
-msgstr "Aktuelle bestätigte E-Mail Adresse"
+msgstr "Aktuelle bestätigte E-Mail-Adresse."
#: actions/emailsettings.php:107 actions/emailsettings.php:140
#: actions/imsettings.php:108 actions/smssettings.php:115
@@ -1115,8 +1116,8 @@ msgid ""
"A confirmation code was sent to the email address you added. Check your "
"inbox (and spam box!) for the code and instructions on how to use it."
msgstr ""
-"Ein Bestätigungscode wurde an die angegebene E-Mail Adresse geschickt. "
-"Überprüfen Sie Ihren Posteingang (auch den Spamordner!) für den Code und "
+"Ein Bestätigungscode wurde an die angegebene E-Mail-Adresse geschickt. "
+"Überprüfe deinen Posteingang (auch den Spamordner!) für den Code und "
"Anweisungen, wie dieser benutzt wird."
#: actions/emailsettings.php:379 actions/imsettings.php:351
@@ -1126,7 +1127,7 @@ msgstr "Keine ausstehende Bestätigung, die abgebrochen werden kann."
#: actions/emailsettings.php:383 actions/imsettings.php:355
msgid "That is the wrong IM address."
-msgstr "Das ist die falsche IM Adresse."
+msgstr "Das ist die falsche IM-Adresse."
#: actions/emailsettings.php:395 actions/imsettings.php:367
#: actions/smssettings.php:386
@@ -1245,7 +1246,6 @@ msgid "Not expecting this response!"
msgstr "Unerwartete Antwort!"
#: actions/finishremotesubscribe.php:80
-#, fuzzy
msgid "User being listened to does not exist."
msgstr "Aufgeführte Nutzer existiert nicht."
@@ -1258,19 +1258,16 @@ msgid "That user has blocked you from subscribing."
msgstr "Dieser Benutzer erlaubt dir nicht ihn zu abonnieren."
#: actions/finishremotesubscribe.php:110
-#, fuzzy
msgid "You are not authorized."
-msgstr "Nicht autorisiert."
+msgstr "Du bist nicht autorisiert."
#: actions/finishremotesubscribe.php:113
-#, fuzzy
msgid "Could not convert request token to access token."
msgstr "Konnte Anfrage-Token nicht in Zugriffs-Token umwandeln."
#: actions/finishremotesubscribe.php:118
-#, fuzzy
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Unbekannte OMB-Protokollversion."
+msgstr "Service nutzt unbekannte OMB-Protokollversion."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
@@ -1287,9 +1284,8 @@ msgid "No such file."
msgstr "Datei nicht gefunden."
#: actions/getfile.php:79
-#, fuzzy
msgid "Cannot read file."
-msgstr "Daten verloren."
+msgstr "Datei konnte nicht gelesen werden."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1321,9 +1317,8 @@ msgid "User is not a member of group."
msgstr "Nutzer ist kein Mitglied dieser Gruppe."
#: actions/groupblock.php:136 actions/groupmembers.php:314
-#, fuzzy
msgid "Block user from group"
-msgstr "Benutzer blockieren"
+msgstr "Benutzerzugang zu der Gruppe blockieren"
#: actions/groupblock.php:162
#, php-format
@@ -1334,9 +1329,8 @@ msgid ""
msgstr ""
#: actions/groupblock.php:178
-#, fuzzy
msgid "Do not block this user from this group"
-msgstr "Liste der Benutzer in dieser Gruppe."
+msgstr "Diesen Benutzerzugang nicht für diese Gruppe blockieren."
#: actions/groupblock.php:179
msgid "Block this user from this group"
@@ -1344,7 +1338,7 @@ msgstr "Diesen Nutzer von der Gruppe sperren"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
-msgstr ""
+msgstr "Datenbank Fehler beim Versuch den Nutzer aus der Gruppe zu blockieren."
#: actions/groupbyid.php:74
msgid "No ID"
@@ -1356,7 +1350,7 @@ msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
#: actions/groupdesignsettings.php:141
msgid "Group design"
-msgstr "Gruppen Design"
+msgstr "Gruppen-Design"
#: actions/groupdesignsettings.php:152
msgid ""
@@ -1364,38 +1358,36 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
-#, fuzzy
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
-msgstr "Konnte Benutzerdaten nicht aktualisieren."
+msgstr "Konnte dein Design nicht aktualisieren."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
msgid "Unable to save your design settings!"
-msgstr "Konnte Twitter Einstellungen nicht speichern!"
+msgstr "Konnte die Design-Einstellungen nicht speichern!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr "Design Einstellungen gespeichert."
+msgstr "Design-Einstellungen gespeichert."
#: actions/grouplogo.php:139 actions/grouplogo.php:192
msgid "Group logo"
msgstr "Gruppen-Logo"
#: actions/grouplogo.php:150
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
-msgstr "Du kannst ein Logo für Deine Gruppe hochladen."
+msgstr ""
+"Du kannst ein Logo für Deine Gruppe hochladen. Die maximale Dateigröße ist %"
+"s."
#: actions/grouplogo.php:362
-#, fuzzy
msgid "Pick a square area of the image to be the logo."
-msgstr ""
-"Wähle eine quadratische Fläche aus dem Bild, um dein Avatar zu speichern"
+msgstr "Wähle eine quadratische Fläche aus dem Bild, um das Logo zu speichern."
#: actions/grouplogo.php:396
msgid "Logo updated."
@@ -1445,12 +1437,12 @@ msgid "Updates from members of %1$s on %2$s!"
msgstr "Aktualisierungen von %1$s auf %2$s!"
#: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Durchsuche die Namen, Orten oder Interessen der Nutzer von %%site.name%%. "
+"Durchsuche die Namen, Orte oder Interessen der Nutzer von %%site.name%%. "
"Trenne mehrere Suchbegriffe durch Leerzeichen. Ein Suchbegriff muss aus "
"mindestens 3 Zeichen bestehen."
@@ -1469,6 +1461,8 @@ msgid ""
"If you can't find the group you're looking for, you can [create it](%%action."
"newgroup%%) yourself."
msgstr ""
+"Wenn du die Gruppe die dich interessiert nicht finden kannst, dann [erstelle "
+"sie](%%action.newgroup%%) doch einfach."
#: actions/groupsearch.php:85
#, php-format
@@ -1503,7 +1497,7 @@ msgstr "Neue Gruppe erstellen"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
-msgstr "Nur Gruppen Administratoren können die Sperrung von Nutzern aufheben."
+msgstr "Nur Administratoren können Gruppenmitglieder entsperren."
#: actions/groupunblock.php:95
msgid "User is not blocked from group."
@@ -1515,7 +1509,7 @@ msgstr "Fehler beim Freigeben des Benutzers."
#: actions/imsettings.php:59
msgid "IM Settings"
-msgstr "IM Einstellungen"
+msgstr "IM-Einstellungen"
#: actions/imsettings.php:70
#, php-format
@@ -1527,9 +1521,8 @@ msgstr ""
"senden. Stelle deine Adresse und Einstellungen unten ein."
#: actions/imsettings.php:89
-#, fuzzy
msgid "IM is not available."
-msgstr "Diese Seite liegt in nicht verfügbar in einem "
+msgstr "IM ist nicht verfügbar."
#: actions/imsettings.php:106
msgid "Current confirmed Jabber/GTalk address."
@@ -1542,12 +1535,12 @@ msgid ""
"message with further instructions. (Did you add %s to your buddy list?)"
msgstr ""
"Warte auf Bestätigung dieser Adresse. Eine Nachricht mit weiteren Anweisung "
-"sollte in deinem Jabber/GTalk Konto eingehen. (Hast du %s zu deiner "
-"Freundeliste hinzugefügt?)"
+"sollte in deinem Jabber/GTalk-Konto eingehen. (Hast du %s zu deiner "
+"Freundesliste hinzugefügt?)"
#: actions/imsettings.php:124
msgid "IM Address"
-msgstr "IM Adresse"
+msgstr "IM-Adresse"
#: actions/imsettings.php:126
#, php-format
@@ -1555,8 +1548,8 @@ msgid ""
"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
"add %s to your buddy list in your IM client or on GTalk."
msgstr ""
-"Jabber- oder GoogleTalk-Adresse, z.B. \"UserName@example.org\". Aber "
-"versichere dich zuerst, dass du %s in deine Kontaktliste in deinem IM "
+"Jabber- oder GoogleTalk-Adresse, beispielsweise „Benutzername@example.org“. "
+"Aber versichere dich zuerst, dass du %s in deine Kontaktliste in deinem IM-"
"Programm oder GTalk aufgenommen hast."
#: actions/imsettings.php:143
@@ -1565,7 +1558,7 @@ msgstr "Schicke mir Nachrichten mittels Jabber/GTalk."
#: actions/imsettings.php:148
msgid "Post a notice when my Jabber/GTalk status changes."
-msgstr "Schicke eine Nachricht, wenn sich mein Jabber/GTalk Status verändert."
+msgstr "Schicke eine Nachricht, wenn sich mein Jabber/GTalk-Status verändert."
#: actions/imsettings.php:153
msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
@@ -1603,7 +1596,7 @@ msgid ""
"A confirmation code was sent to the IM address you added. You must approve %"
"s for sending messages to you."
msgstr ""
-"Ein Bestätigungscode wurde an die IM Adresse geschickt, die du hinzugefügt "
+"Ein Bestätigungscode wurde an die IM-Adresse geschickt, die du hinzugefügt "
"hast. Du musst zulassen, dass %s dir Nachrichten schicken darf."
#: actions/imsettings.php:387
@@ -1689,7 +1682,7 @@ msgstr "E-Mail-Adressen"
#: actions/invite.php:189
msgid "Addresses of friends to invite (one per line)"
msgstr ""
-"Addressen von Freunden, die Du einladen möchtest. (Jeweils eine Addresse pro "
+"Adressen von Freunden, die Du einladen möchtest. (Jeweils eine Adresse pro "
"Zeile)"
#: actions/invite.php:192
@@ -1702,7 +1695,7 @@ msgstr ""
"Wenn du möchtest kannst du zu der Einladung eine persönliche Nachricht "
"anfügen."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Senden"
@@ -1807,28 +1800,27 @@ msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
msgid "%s left group %s"
msgstr "%s hat die Gruppe %s verlassen"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Bereits angemeldet."
-#: actions/login.php:108 actions/login.php:118
-#, fuzzy
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
-msgstr "Ungültiger Nachrichteninhalt"
+msgstr "Token ungültig oder abgelaufen."
#: actions/login.php:146
msgid "Incorrect username or password."
msgstr "Falscher Benutzername oder Passwort."
#: actions/login.php:152
-#, fuzzy
msgid "Error setting user. You are probably not authorized."
-msgstr "Nicht autorisiert."
+msgstr ""
+"Fehler beim setzen des Benutzers. Du bist vermutlich nicht autorisiert."
#: actions/login.php:207 actions/login.php:260 lib/action.php:458
#: lib/logingroupnav.php:79
msgid "Login"
-msgstr "Einloggen"
+msgstr "Anmelden"
#: actions/login.php:246
msgid "Login to site"
@@ -1862,18 +1854,17 @@ msgid ""
"For security reasons, please re-enter your user name and password before "
"changing your settings."
msgstr ""
-"Bitte geben Sie aus Sicherheitsgründen ihren Benutzernamen und ihr Passwort "
-"ein, bevor die Änderungen an ihren Einstellungen übernommen werden."
+"Bitte gebe aus Sicherheitsgründen deinen Benutzernamen und dein Passwort "
+"ein, bevor die Änderungen an deinen Einstellungen übernommen werden."
#: actions/login.php:289
-#, fuzzy, php-format
+#, php-format
msgid ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
msgstr ""
"Melde dich mit Nutzernamen und Passwort an. Du hast noch keinen Nutzernamen? "
-"[Registriere](%%action.register%%) ein neues Konto oder versuche es mit "
-"[OpenID](%%action.openidlogin%%)."
+"[Registriere](%%action.register%%) ein neues Konto."
#: actions/makeadmin.php:91
msgid "Only an admin can make another user an admin."
@@ -1882,7 +1873,7 @@ msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen."
#: actions/makeadmin.php:95
#, php-format
msgid "%s is already an admin for group \"%s\"."
-msgstr "%s ist bereits ein Administrator der Gruppe &quot;%s&quot;."
+msgstr "%s ist bereits ein Administrator der Gruppe „%s“."
#: actions/makeadmin.php:132
#, php-format
@@ -1892,7 +1883,7 @@ msgstr ""
#: actions/makeadmin.php:145
#, php-format
msgid "Can't make %s an admin for group %s"
-msgstr ""
+msgstr "Konnte %s nicht zum Administrator der Gruppe %s machen"
#: actions/microsummary.php:69
msgid "No current status"
@@ -1965,9 +1956,9 @@ msgid "Text search"
msgstr "Volltextsuche"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%s\" on %s"
-msgstr "Suche im Stream nach \"%s\""
+msgstr "Suchergebnisse für „%s“ auf %s"
#: actions/noticesearch.php:121
#, php-format
@@ -1984,9 +1975,9 @@ msgid ""
msgstr ""
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "Updates von %1$s auf %2$s!"
+msgstr "Aktualisierungen mit „%s“"
#: actions/noticesearchrss.php:98
#, php-format
@@ -2018,16 +2009,15 @@ msgid "%1$s's status on %2$s"
msgstr "%1$s Status auf %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Verbinden"
+msgstr "Content-Typ "
#: actions/oembed.php:160
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@@ -2060,9 +2050,8 @@ msgid "Automatic shortening service to use."
msgstr "URL-Auto-Kürzungs-Dienst."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Profil Einstellungen"
+msgstr "Profil-Einstellungen ansehen"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
@@ -2070,7 +2059,7 @@ msgstr ""
#: actions/othersettings.php:153
msgid "URL shortening service is too long (max 50 chars)."
-msgstr "URL-Auto-Kürzungs-Dienst ist zu lange (max. 50 Zeichen)"
+msgstr "URL-Auto-Kürzungs-Dienst ist zu lang (max. 50 Zeichen)."
#: actions/outbox.php:58
#, php-format
@@ -2157,9 +2146,9 @@ msgid "Path and server settings for this StatusNet site."
msgstr ""
#: actions/pathsadminpanel.php:140
-#, fuzzy, php-format
+#, php-format
msgid "Theme directory not readable: %s"
-msgstr "Diese Seite liegt in nicht verfügbar in einem "
+msgstr "Theme-Verzeichnis nicht lesbar: %s"
#: actions/pathsadminpanel.php:146
#, php-format
@@ -2178,18 +2167,16 @@ msgstr ""
#: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:299
-#, fuzzy
msgid "Site"
-msgstr "Einladen"
+msgstr "Seite"
#: actions/pathsadminpanel.php:216
msgid "Path"
msgstr ""
#: actions/pathsadminpanel.php:216
-#, fuzzy
msgid "Site path"
-msgstr "Seitennachricht"
+msgstr "Seitenpfad"
#: actions/pathsadminpanel.php:220
msgid "Path to locales"
@@ -2216,24 +2203,20 @@ msgid "Theme directory"
msgstr ""
#: actions/pathsadminpanel.php:247
-#, fuzzy
msgid "Avatars"
-msgstr "Avatar"
+msgstr "Avatare"
#: actions/pathsadminpanel.php:252
-#, fuzzy
msgid "Avatar server"
-msgstr "Avatar-Einstellungen"
+msgstr "Avatar-Server"
#: actions/pathsadminpanel.php:256
-#, fuzzy
msgid "Avatar path"
-msgstr "Avatar aktualisiert."
+msgstr "Avatarpfad"
#: actions/pathsadminpanel.php:260
-#, fuzzy
msgid "Avatar directory"
-msgstr "Avatar aktualisiert."
+msgstr "Avatarverzeichnis"
#: actions/pathsadminpanel.php:269
msgid "Backgrounds"
@@ -2252,9 +2235,8 @@ msgid "Background directory"
msgstr ""
#: actions/pathsadminpanel.php:297
-#, fuzzy
msgid "Save paths"
-msgstr "Seitennachricht"
+msgstr "Speicherpfade"
#: actions/peoplesearch.php:52
#, php-format
@@ -2262,7 +2244,7 @@ msgid ""
"Search for people on %%site.name%% by their name, location, or interests. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Durchsuche die Namen, Orten oder Interessen der Nutzer von %%site.name%%. "
+"Durchsuche die Namen, Orte oder Interessen der Nutzer von %%site.name%%. "
"Trenne mehrere Suchbegriffe durch Leerzeichen. Ein Suchbegriff muss aus "
"mindestens 3 Zeichen bestehen."
@@ -2375,7 +2357,7 @@ msgstr "Zeitzone"
#: actions/profilesettings.php:155
msgid "What timezone are you normally in?"
-msgstr "In welcher Zeitzone befinden Sie sich üblicherweise?"
+msgstr "In welcher Zeitzone befindest du dich üblicherweise?"
#: actions/profilesettings.php:160
msgid ""
@@ -2437,19 +2419,16 @@ msgid "Public timeline"
msgstr "Öffentliche Zeitleiste"
#: actions/public.php:151
-#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Feed des öffentlichen Streams"
+msgstr "Feed des öffentlichen Streams (RSS 1.0)"
#: actions/public.php:155
-#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Feed des öffentlichen Streams"
+msgstr "Feed des öffentlichen Streams (RSS 2.0)"
#: actions/public.php:159
-#, fuzzy
msgid "Public Stream Feed (Atom)"
-msgstr "Feed des öffentlichen Streams"
+msgstr "Feed des öffentlichen Streams (Atom)"
#: actions/public.php:179
#, php-format
@@ -2478,14 +2457,15 @@ msgid ""
msgstr ""
#: actions/public.php:238
-#, fuzzy, php-format
+#, php-format
msgid ""
"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
"blogging) service based on the Free Software [StatusNet](http://status.net/) "
"tool."
msgstr ""
-"Dies ist %%site.name%%, ein [mikro-blogging] (http://de.wikipedia.org/wiki/"
-"Mikro-blogging) Dienst "
+"Dies ist %%site.name%%, ein [Mikro-blogging-Dienst](http://de.wikipedia.org/"
+"wiki/Mikro-blogging) basierend auf der freien Software [StatusNet](http://"
+"status.net/)."
#: actions/publictagcloud.php:57
msgid "Public tag cloud"
@@ -2643,9 +2623,8 @@ msgid "Sorry, only invited people can register."
msgstr "Es tut uns leid, zum Registrieren benötigst du eine Einladung."
#: actions/register.php:92
-#, fuzzy
msgid "Sorry, invalid invitation code."
-msgstr "Fehler beim Bestätigungscode."
+msgstr "Entschuldigung, ungültiger Bestätigungscode."
#: actions/register.php:112
msgid "Registration successful"
@@ -2721,12 +2700,11 @@ msgid "Creative Commons Attribution 3.0"
msgstr ""
#: actions/register.php:496
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-"außer folgende private Daten: Passwort, E-Mail, Adresse, IM Adresse, "
+"außer folgende private Daten: Passwort, E-Mail-Adresse, IM-Adresse und "
"Telefonnummer."
#: actions/register.php:537
@@ -2747,28 +2725,27 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Hallo %s, herzlich willkommen auf %%%%site.name%%%%.\n"
-"\n"
-"Danke für deine Anmeldung, wir hoffen das dir der Service gefällt.\n"
-"\n"
-"Als nächstes möchtest du eventuell …\n"
+"Hallo %s, herzlich willkommen auf %%%%site.name%%%%. Als nächstes möchtest "
+"du eventuell …\n"
"\n"
"* zu [deinem Profil gehen](%s) und deine erste Nachricht schreiben\n"
-"* deine [Jabber/GTalk Adresse](%%%%action.imsettings%%%%) eintragen damit du "
+"* deine [Jabber/GTalk-Adresse](%%%%action.imsettings%%%%) eintragen damit du "
"Nachrichten über diese Dienste schreiben kannst.\n"
"* [Leute suchen](%%%%action.peoplesearch%%%%) die du kennst oder die "
"gleichen Interessen wie du haben.\n"
"* deine [Profildaten ergänzen](%%%%action.profilesettings%%%%) um mehr über "
"dich zu veröffentlichen\n"
"* die [Dokumentation](%%%%doc.help%%%%) lesen um mehr über weitere Features "
-"zu erfahren"
+"zu erfahren\n"
+"\n"
+"Danke für deine Anmeldung, wir hoffen das dir der Service gefällt."
#: actions/register.php:561
msgid ""
"(You should receive a message by email momentarily, with instructions on how "
"to confirm your email address.)"
msgstr ""
-"(Sie sollten in Kürze eine E-Mail mit der Anleitung zur Überprüfung Ihrer "
+"(Du solltest in Kürze eine E-Mail mit der Anleitung zur Überprüfung deiner "
"Mailadresse erhalten.)"
#: actions/remotesubscribe.php:98
@@ -2818,16 +2795,15 @@ msgid "Invalid profile URL (bad format)"
msgstr "Ungültige Profil-URL (falsches Format)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Ungültige Profil-URL (kein YADIS-Dokument)."
+msgstr ""
+"Ungültige Profil-URL (kein YADIS-Dokument oder ungültige XRDS definiert)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
msgstr "Das ist ein lokales Profil! Zum Abonnieren anmelden."
#: actions/remotesubscribe.php:183
-#, fuzzy
msgid "Couldn’t get a request token."
msgstr "Konnte keinen Anfrage-Token bekommen."
@@ -2855,7 +2831,7 @@ msgstr "Feed der Antworten an %s (RSS 2.0)"
#: actions/replies.php:158
#, php-format
msgid "Replies feed for %s (Atom)"
-msgstr "Feed der Nachrichten von %s"
+msgstr "Feed der Nachrichten von %s (Atom)"
#: actions/replies.php:198
#, php-format
@@ -2879,9 +2855,9 @@ msgid ""
msgstr ""
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "Nachricht an %1$s auf %2$s"
+msgstr "Antworten an %1$s auf %2$s!"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
@@ -2905,17 +2881,17 @@ msgstr "Konnte Favoriten nicht abrufen."
#: actions/showfavorites.php:170
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Feed der Freunde von %s"
+msgstr "Feed der Freunde von %s (RSS 1.0)"
#: actions/showfavorites.php:177
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Feed der Freunde von %s"
+msgstr "Feed der Freunde von %s (RSS 2.0)"
#: actions/showfavorites.php:184
#, php-format
msgid "Feed for favorites of %s (Atom)"
-msgstr "Feed der Freunde von %s"
+msgstr "Feed der Freunde von %s (Atom)"
#: actions/showfavorites.php:205
msgid ""
@@ -3013,9 +2989,8 @@ msgid "Statistics"
msgstr "Statistiken"
#: actions/showgroup.php:432
-#, fuzzy
msgid "Created"
-msgstr "Erstellen"
+msgstr "Erstellt"
#: actions/showgroup.php:448
#, php-format
@@ -3028,15 +3003,17 @@ msgid ""
msgstr ""
#: actions/showgroup.php:454
-#, fuzzy, php-format
+#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
-"**%s** ist eine Benutzergruppe auf %%site.name%%, einem [mikro-blogging] "
-"(http://de.wikipedia.org/wiki/Mikro-blogging) Dienst "
+"**%s** ist eine Benutzergruppe auf %%%%site.name%%%%, einem [Mikro-blogging-"
+"Dienst](http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der "
+"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
+"kurze Nachrichten über Ihr Leben und Interessen. "
#: actions/showgroup.php:482
msgid "Admins"
@@ -3065,7 +3042,7 @@ msgid "Notice deleted."
msgstr "Nachricht gelöscht."
#: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
msgid " tagged %s"
msgstr "Nachrichten, die mit %s getagt sind"
@@ -3127,14 +3104,15 @@ msgid ""
msgstr ""
#: actions/showstream.php:239
-#, fuzzy, php-format
+#, php-format
msgid ""
"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
-"**%s** hat ein Konto auf %%site.name%%, einem [mikro-blogging] (http://de."
-"wikipedia.org/wiki/Mikro-blogging) Dienst "
+"**%s** hat ein Konto auf %%%%site.name%%%%, einem [Mikro-blogging-Dienst]"
+"(http://de.wikipedia.org/wiki/Mikro-blogging) basierend auf der Freien "
+"Software [StatusNet](http://status.net/). "
#: actions/silence.php:65 actions/unsilence.php:65
#, fuzzy
@@ -3155,14 +3133,13 @@ msgid "Site name must have non-zero length."
msgstr ""
#: actions/siteadminpanel.php:155
-#, fuzzy
msgid "You must have a valid contact email address"
-msgstr "Ungültige E-Mail-Adresse"
+msgstr "Du musst eine gültige E-Mail-Adresse haben"
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
-msgstr "Unbekannte Sprache &quot;%s&quot;"
+msgstr "Unbekannte Sprache „%s“"
#: actions/siteadminpanel.php:180
msgid "Invalid snapshot report URL."
@@ -3409,7 +3386,7 @@ msgstr "SMS ist nicht verfügbar."
#: actions/smssettings.php:112
msgid "Current confirmed SMS-enabled phone number."
-msgstr "Aktuelle für den SMS-Dienst bestätigte Telefon-Nummer."
+msgstr "Aktuelle für den SMS-Dienst bestätigte Telefonnummer."
#: actions/smssettings.php:123
msgid "Awaiting confirmation on this phone number."
@@ -3798,7 +3775,6 @@ msgid "Authorize subscription"
msgstr "Abonnement bestätigen"
#: actions/userauthorization.php:110
-#, fuzzy
msgid ""
"Please check these details to make sure that you want to subscribe to this "
"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
@@ -3806,7 +3782,7 @@ msgid ""
msgstr ""
"Bitte überprüfe diese Angaben, um sicher zu gehen, dass du die Nachrichten "
"dieses Nutzers abonnieren möchtest. Wenn du das nicht wolltest, klicke auf "
-"\"Abbrechen\"."
+"„Abbrechen“."
#: actions/userauthorization.php:188
msgid "License"
@@ -3906,7 +3882,7 @@ msgstr "Keine ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
-msgstr "Profil Design Einstellungen"
+msgstr "Profil-Design-Einstellungen"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
@@ -4037,7 +4013,7 @@ msgstr "Ändere dein Passwort"
#: lib/accountsettingsaction.php:120
msgid "Change email handling"
-msgstr "Ändere die E-Mail Verarbeitung"
+msgstr "Ändere die E-Mail-Verarbeitung"
#: lib/accountsettingsaction.php:124
#, fuzzy
@@ -4206,7 +4182,7 @@ msgid ""
"s, available under the [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-" Es wird mit der Microbloggingsoftware [StatusNet](http://status.net/) "
+"Es wird mit der Microbloggingsoftware [StatusNet](http://status.net/) "
"(Version %s) betrieben, die unter der [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist."
@@ -4428,40 +4404,54 @@ msgstr "Benachrichtigung aktiviert."
msgid "Can't turn on notification."
msgstr "Konnte Benachrichtigung nicht aktivieren."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Konnte keinen Favoriten erstellen."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Du hast dieses Profil nicht abonniert."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du hast diese Benutzer bereits abonniert:"
msgstr[1] "Du hast diese Benutzer bereits abonniert:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Die Gegenseite konnte Dich nicht abonnieren."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Die Gegenseite konnte Dich nicht abonnieren."
msgstr[1] "Die Gegenseite konnte Dich nicht abonnieren."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du bist kein Mitglied dieser Gruppe."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du bist kein Mitglied dieser Gruppe."
msgstr[1] "Du bist kein Mitglied dieser Gruppe."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4480,6 +4470,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4545,11 +4536,7 @@ msgid ""
msgstr ""
"Du kannst dein persönliches Avatar hochladen. Die maximale Dateigröße ist %s."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4635,10 +4622,10 @@ msgid "Description"
msgstr "Beschreibung"
#: lib/groupeditform.php:179
-#, fuzzy
msgid ""
"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Ort der Gruppe, optional, z.B. \"Stadt, Gebiet (oder Region), Land\""
+msgstr ""
+"Ort der Gruppe, optional, beispielsweise „Stadt, Gebiet (oder Region), Land“"
#: lib/groupeditform.php:187
#, php-format
@@ -5026,7 +5013,7 @@ msgstr "Versende eine direkte Nachricht"
msgid "To"
msgstr "An"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "Verfügbare Zeichen"
@@ -5041,11 +5028,11 @@ msgstr "Nachricht versenden"
msgid "What's up, %s?"
msgstr "Was ist los, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5327,7 +5314,12 @@ msgstr "Die Gegenseite konnte Dich nicht abonnieren."
msgid "Not subscribed!"
msgstr "Nicht abonniert!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Konnte Abonnement nicht löschen."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Konnte Abonnement nicht löschen."
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index 6ab4721c2..d6142aaa7 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Greek
#
+# Author@translatewiki.net: Omnipaedista
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -7,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:21+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:14+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
@@ -47,7 +48,7 @@ msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
#: lib/subs.php:34 lib/subs.php:116
msgid "No such user."
-msgstr ""
+msgstr "Κανένας τέτοιος χÏήστης."
#: actions/all.php:84
#, fuzzy, php-format
@@ -183,7 +184,12 @@ msgstr ""
msgid "Could not save profile."
msgstr "Απέτυχε η αποθήκευση του Ï€Ïοφίλ."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -398,14 +404,14 @@ msgid "%s groups"
msgstr ""
#: actions/apigrouplistall.php:94
-#, fuzzy, php-format
+#, php-format
msgid "groups on %s"
-msgstr "Î’Ïες ομάδες στο site"
+msgstr "ομάδες του χÏήστη %s"
#: actions/apigrouplist.php:95
-#, fuzzy, php-format
+#, php-format
msgid "%s's groups"
-msgstr "Ομάδες χÏηστών"
+msgstr "ομάδες των χÏηστών %s"
#: actions/apigrouplist.php:103
#, fuzzy, php-format
@@ -460,9 +466,9 @@ msgstr ""
#: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117
#: actions/grouprss.php:131 actions/userrss.php:90
-#, fuzzy, php-format
+#, php-format
msgid "%s timeline"
-msgstr "ΧÏονοδιάγÏαμμα του χÏήστη %s"
+msgstr "χÏονοδιάγÏαμμα του χÏήστη %s"
#: actions/apitimelinegroup.php:116 actions/apitimelineuser.php:125
#: actions/userrss.php:92
@@ -538,9 +544,8 @@ msgstr ""
#: actions/avatarsettings.php:119 actions/avatarsettings.php:194
#: actions/grouplogo.php:251
-#, fuzzy
msgid "Avatar settings"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις του άβαταÏ"
#: actions/avatarsettings.php:126 actions/avatarsettings.php:202
#: actions/grouplogo.php:199 actions/grouplogo.php:259
@@ -569,7 +574,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -612,9 +617,8 @@ msgstr "Ρυθμίσεις OpenID"
#: actions/groupdesignsettings.php:84 actions/grouplogo.php:86
#: actions/groupmembers.php:76 actions/grouprss.php:91
#: actions/joingroup.php:76 actions/showgroup.php:121
-#, fuzzy
msgid "No nickname"
-msgstr "Îέο ψευδώνυμο"
+msgstr "Κανένα ψευδώνυμο"
#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
@@ -669,7 +673,7 @@ msgstr ""
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
msgid "No"
-msgstr ""
+msgstr "Όχι"
#: actions/block.php:143 actions/deleteuser.php:147
#, fuzzy
@@ -737,9 +741,8 @@ msgid "The address \"%s\" has been confirmed for your account."
msgstr ""
#: actions/conversation.php:99
-#, fuzzy
msgid "Conversation"
-msgstr "Τοποθεσία"
+msgstr "Συζήτηση"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
#: lib/profileaction.php:216 lib/searchgroupnav.php:82
@@ -825,106 +828,106 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr ""
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Η αÏχική σελίδα δεν είναι έγκυÏο URL."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Αλλάξτε τον κωδικό σας"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr ""
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Αλλαγή"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Αλλαγή"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Αλλάξτε τον κωδικό σας"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "ΣÏνδεση"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr ""
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "ΣÏνδεση"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -934,7 +937,7 @@ msgstr ""
msgid "Save"
msgstr ""
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1370,19 +1373,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Απέτυχε η ενημέÏωση του χÏήστη."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Οι Ï€Ïοτιμήσεις αποθηκεÏτηκαν"
@@ -1688,7 +1691,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr ""
@@ -1768,11 +1771,11 @@ msgstr ""
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Ήδη συνδεδεμένος."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr ""
@@ -1979,8 +1982,8 @@ msgstr "ΣÏνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -2969,9 +2972,8 @@ msgid ""
msgstr ""
#: actions/showgroup.php:482
-#, fuzzy
msgid "Admins"
-msgstr "ΔιαχειÏιστής"
+msgstr "ΔιαχειÏιστές"
#: actions/showmessage.php:81
msgid "No such message."
@@ -3192,9 +3194,8 @@ msgid "Use fancy (more readable and memorable) URLs?"
msgstr ""
#: actions/siteadminpanel.php:331
-#, fuzzy
msgid "Access"
-msgstr "Αποδοχή"
+msgstr "ΠÏόσβαση"
#: actions/siteadminpanel.php:334
msgid "Private"
@@ -4317,40 +4318,54 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ομάδες με τα πεÏισσότεÏα μέλη"
msgstr[1] "Ομάδες με τα πεÏισσότεÏα μέλη"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4369,6 +4384,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4431,11 +4447,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4690,12 +4702,12 @@ msgid ""
msgstr ""
#: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
msgid "Location: %s\n"
msgstr "Τοποθεσία: %s\n"
#: lib/mail.php:256
-#, fuzzy, php-format
+#, php-format
msgid "Homepage: %s\n"
msgstr "ΑÏχική σελίδα: %s\n"
@@ -4887,7 +4899,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 ή πεÏισσότεÏοι χαÏακτήÏες"
@@ -4901,11 +4913,11 @@ msgstr ""
msgid "What's up, %s?"
msgstr ""
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5177,7 +5189,12 @@ msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές Ï
msgid "Not subscribed!"
msgstr "Απέτυχε η συνδÏομή."
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index fb598943c..782a5ec0a 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:24+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:19+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
@@ -181,7 +181,12 @@ msgstr "User has no profile."
msgid "Could not save profile."
msgstr "Couldn't save profile."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Couldn't update user."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Block user failed."
@@ -563,7 +568,7 @@ msgstr "Crop"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -818,106 +823,106 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Invalid size."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "This page is not available in a "
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Change logo"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Invite"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Change"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Site theme"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Logout from the site"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "You can upload a logo image for your group."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Change colours"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Connect"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Search"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Text"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Links"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -927,7 +932,7 @@ msgstr ""
msgid "Save"
msgstr "Save"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1365,20 +1370,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Couldn't update user."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Unable to save your Twitter settings!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Sync preferences saved."
@@ -1694,7 +1699,7 @@ msgstr "Personal message"
msgid "Optionally add a personal message to the invitation."
msgstr "Optionally add a personal message to the invitation."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Send"
@@ -1800,11 +1805,11 @@ msgstr "Could not remove user %s to group %s"
msgid "%s left group %s"
msgstr "%s left group %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Already logged in."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Invalid notice content"
@@ -2016,8 +2021,8 @@ msgstr "Connect"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Not a supported data format."
@@ -4387,40 +4392,54 @@ msgstr "Notification on."
msgid "Can't turn on notification."
msgstr "Can't turn on notification."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Could not create aliases"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "You are not subscribed to that profile."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "You are already subscribed to these users:"
msgstr[1] "You are already subscribed to these users:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Could not subscribe other to you."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Could not subscribe other to you."
msgstr[1] "Could not subscribe other to you."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "You are not a member of that group."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "You are not a member of that group."
msgstr[1] "You are not a member of that group."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4439,6 +4458,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4501,11 +4521,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "You can upload your personal avatar. The maximum file size is %s."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Bad default colour settings: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4971,7 +4987,7 @@ msgstr "Send a direct notice"
msgid "To"
msgstr "To"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Available characters"
@@ -4984,11 +5000,11 @@ msgstr "Send a notice"
msgid "What's up, %s?"
msgstr "What's up, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5259,7 +5275,12 @@ msgstr "Could not subscribe other to you."
msgid "Not subscribed!"
msgstr "Not subscribed!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Couldn't delete subscription."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Couldn't delete subscription."
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index 393a3c602..871040c9a 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:28+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:23+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@@ -188,7 +188,11 @@ msgstr "El usuario no tiene un perfil."
msgid "Could not save profile."
msgstr "No se pudo guardar el perfil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "¡No puedes bloquearte a tí mismo!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Falló bloquear usuario."
@@ -214,9 +218,9 @@ msgid "Can't send direct messages to users who aren't your friend."
msgstr "No se puede enviar mensajes directos a usuarios que no son tu amigo."
#: actions/apidirectmessage.php:89
-#, fuzzy, php-format
+#, php-format
msgid "Direct messages from %s"
-msgstr "Mensajes directos a %s"
+msgstr "Mensajes directos de %s"
#: actions/apidirectmessage.php:93
#, php-format
@@ -256,18 +260,16 @@ msgid "No status found with that ID."
msgstr "No se encontró estado para ese ID"
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite!"
-msgstr "¡Este aviso ya está en favoritos!"
+msgstr "¡Este status ya está en favoritos!"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "No se pudo crear favorito."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite!"
-msgstr "¡Este aviso no es un favorito!"
+msgstr "¡Este status no es un favorito!"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -283,27 +285,24 @@ msgid "Could not follow user: %s is already on your list."
msgstr "No puede seguir al usuario: %s ya esta en su lista."
#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
msgid "Could not unfollow user: User not found."
-msgstr "No puede seguir al usuario. Usuario no encontrado"
+msgstr "No se pudo dejar de seguir al usuario. Usuario no encontrado"
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself!"
-msgstr ""
+msgstr "¡No puedes dejar de seguirte a ti mismo!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
msgstr "Deben proveerse dos identificaciones de usuario o nombres en pantalla."
#: actions/apifriendshipsshow.php:135
-#, fuzzy
msgid "Could not determine source user."
-msgstr "No se pudo acceder a corriente pública."
+msgstr "No se pudo determinar el usuario fuente."
#: actions/apifriendshipsshow.php:143
-#, fuzzy
msgid "Could not find target user."
-msgstr "No se pudo encontrar ningún estado."
+msgstr "No se pudo encontrar ningún usuario de destino."
#: actions/apigroupcreate.php:164 actions/editgroup.php:182
#: actions/newgroup.php:126 actions/profilesettings.php:208
@@ -311,7 +310,7 @@ msgstr "No se pudo encontrar ningún estado."
msgid "Nickname must have only lowercase letters and numbers and no spaces."
msgstr ""
"El apodo debe tener solamente letras minúsculas y números y no puede tener "
-"espacios. "
+"espacios."
#: actions/apigroupcreate.php:173 actions/editgroup.php:186
#: actions/newgroup.php:130 actions/profilesettings.php:231
@@ -338,9 +337,9 @@ msgid "Full name is too long (max 255 chars)."
msgstr "Tu nombre es demasiado largo (max. 255 carac.)"
#: actions/apigroupcreate.php:213
-#, fuzzy, php-format
+#, php-format
msgid "Description is too long (max %d chars)."
-msgstr "Descripción es demasiado larga (máx. 140 caracteres)."
+msgstr "La descripción es demasiado larga (máx. %d caracteres)."
#: actions/apigroupcreate.php:224 actions/editgroup.php:204
#: actions/newgroup.php:148 actions/profilesettings.php:225
@@ -352,7 +351,7 @@ msgstr "La ubicación es demasiado larga (máx. 255 caracteres)."
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
-msgstr ""
+msgstr "¡Muchos seudónimos! El máximo es %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
@@ -577,7 +576,7 @@ msgstr "Cortar"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -840,107 +839,107 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Tamaño inválido."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Esta página no está disponible en un "
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Cambiar colores"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Invitar"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Cambiar"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Aviso de sitio"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Salir de sitio"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Puedes cargar una imagen de logo para tu grupo."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Cambiar colores"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Contenido"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Buscar"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texto"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Vínculos"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -950,7 +949,7 @@ msgstr ""
msgid "Save"
msgstr "Guardar"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1401,20 +1400,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "No se pudo actualizar el usuario."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "¡No se pudo guardar tu configuración de Twitter!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Preferencias de sincronización guardadas."
@@ -1740,7 +1739,7 @@ msgstr "Mensaje Personal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalmente añada un mensaje personalizado a su invitación."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Enviar"
@@ -1849,11 +1848,11 @@ msgstr "No se pudo eliminar a usuario %s de grupo %s"
msgid "%s left group %s"
msgstr "%s dejó grupo %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Ya estás conectado."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "El contenido del aviso es inválido"
@@ -2071,8 +2070,8 @@ msgstr "Conectarse"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@@ -4507,40 +4506,54 @@ msgstr "Notificación activada."
msgid "Can't turn on notification."
msgstr "No se puede activar notificación."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "No se pudo crear favorito."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "No estás suscrito a ese perfil."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ya estás suscrito a estos usuarios:"
msgstr[1] "Ya estás suscrito a estos usuarios:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "No se pudo suscribir otro a ti."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "No se pudo suscribir otro a ti."
msgstr[1] "No se pudo suscribir otro a ti."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "No eres miembro de ese grupo"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "No eres miembro de este grupo."
msgstr[1] "No eres miembro de este grupo."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4559,6 +4572,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4620,11 +4634,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Puedes cargar tu avatar personal."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5092,7 +5102,7 @@ msgstr "Enviar un aviso directo"
msgid "To"
msgstr "Para"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "Caracteres disponibles"
@@ -5107,11 +5117,11 @@ msgstr "Enviar un aviso"
msgid "What's up, %s?"
msgstr "¿Qué tal, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5388,7 +5398,12 @@ msgstr "No se pudo suscribir otro a ti."
msgid "Not subscribed!"
msgstr "¡No estás suscrito!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "No se pudo eliminar la suscripción."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "No se pudo eliminar la suscripción."
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index e5e8af795..c1b9febfe 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:32+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:26+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
@@ -188,7 +188,12 @@ msgstr "Käyttäjällä ei ole profiilia."
msgid "Could not save profile."
msgstr "Ei voitu tallentaa profiilia."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Et voi lopettaa itsesi tilausta!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Käyttäjän esto epäonnistui."
@@ -573,7 +578,7 @@ msgstr "Rajaa"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -828,107 +833,107 @@ msgstr "Ulkoasu"
msgid "Design settings for this StatusNet site."
msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Koko ei kelpaa."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Pikaviestin ei ole käytettävissä."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Vaihda salasanasi"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Kutsu"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Vaihda"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Palvelun ilmoitus"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Kirjaudu ulos palvelusta"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Vaihda tautakuva"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Tausta"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Voit ladata ryhmälle logokuvan. Maksimikoko on %s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "On"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Off"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Vaihda väriä"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Sisältö"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Haku"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Teksti"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Linkit"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Käytä oletusasetuksia"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -938,7 +943,7 @@ msgstr ""
msgid "Save"
msgstr "Tallenna"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1373,18 +1378,18 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ei voitu päivittää sinun sivusi ulkoasua."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Ei voitu tallentaa sinun ulkoasuasetuksia!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Ulkoasuasetukset tallennettu."
@@ -1703,7 +1708,7 @@ msgstr "Henkilökohtainen viesti"
msgid "Optionally add a personal message to the invitation."
msgstr "Voit myös lisätä oman viestisi kutsuun"
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Lähetä"
@@ -1808,11 +1813,11 @@ msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
msgid "%s left group %s"
msgstr "%s erosi ryhmästä %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Olet jo kirjautunut sisään."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Päivityksen sisältö ei kelpaa"
@@ -2029,8 +2034,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@@ -4435,40 +4440,54 @@ msgstr "Ilmoitukset päällä."
msgid "Can't turn on notification."
msgstr "Ilmoituksia ei voi pistää päälle."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Ei voitu lisätä aliasta."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
msgstr[1] "Olet jos tilannut seuraavien käyttäjien päivitykset:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Toista ei voitu asettaa tilaamaan sinua."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Toista ei voitu asettaa tilaamaan sinua."
msgstr[1] "Toista ei voitu asettaa tilaamaan sinua."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Sinä et kuulu tähän ryhmään."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Sinä et kuulu tähän ryhmään."
msgstr[1] "Sinä et kuulu tähän ryhmään."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4487,6 +4506,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4551,11 +4571,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5025,7 +5041,7 @@ msgstr "Lähetä suora viesti"
msgid "To"
msgstr "Vastaanottaja"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Sallitut merkit"
@@ -5038,11 +5054,11 @@ msgstr "Lähetä päivitys"
msgid "What's up, %s?"
msgstr "Mitä teet juuri nyt, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5322,7 +5338,12 @@ msgstr "Toista ei voitu asettaa tilaamaan sinua."
msgid "Not subscribed!"
msgstr "Ei ole tilattu!."
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Ei voitu poistaa tilausta."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Ei voitu poistaa tilausta."
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index cb3c85af5..d66708795 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -6,7 +6,6 @@
# Author@translatewiki.net: Jean-Frédéric
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Peter17
-# Author@translatewiki.net: Zetud
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -14,12 +13,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:36+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:29+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@@ -96,7 +95,7 @@ msgid ""
"something yourself."
msgstr ""
"Essayez de vous abonner à plus d’utilisateurs, de vous [inscrire à un groupe]"
-"(%%action.groups%%) ou de publier quelque chose vous-même."
+"(%%action.groups%%) ou de poster quelque chose vous-même."
#: actions/all.php:134
#, php-format
@@ -104,8 +103,8 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
-"Vous pouvez essayer de [donner un coup de coude à %s](../%s) depuis son "
-"profil ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?"
+"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) depuis son profil "
+"ou [poster quelque chose à son intention](%%%%action.newnotice%%%%?"
"status_textarea=%s)."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
@@ -114,8 +113,8 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite "
-"envoyer un coup de coude à %s ou poster quelque chose à son intention."
+"Pourquoi ne pas [créer un compte](%%%%action.register%%%%) et ensuite faire "
+"un clin d’œil à %s ou poster un avis à son intention."
#: actions/all.php:165
msgid "You and friends"
@@ -197,7 +196,11 @@ msgstr "Aucun profil ne correspond à cet utilisateur."
msgid "Could not save profile."
msgstr "Impossible d’enregistrer le profil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Vous ne pouvez pas vous bloquer vous-même !"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Le blocage de l’utilisateur a échoué."
@@ -268,7 +271,7 @@ msgstr "Aucun statut trouvé avec cet identifiant. "
#: actions/apifavoritecreate.php:119
msgid "This status is already a favorite!"
-msgstr "Ce statut a déjà été ajouté à vos favoris !"
+msgstr "Cet avis a déjà été ajouté à vos favoris !"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
@@ -276,7 +279,7 @@ msgstr "Impossible de créer le favori."
#: actions/apifavoritedestroy.php:122
msgid "That status is not a favorite!"
-msgstr "Ce statut n’est pas un favori !"
+msgstr "Cet avis n’est pas un favori !"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
@@ -455,7 +458,7 @@ msgstr "Non trouvé"
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
msgstr ""
-"La taille maximale du statut est de %d caractères, en incluant l’URL de la "
+"La taille maximale de l’avis est de %d caractères, en incluant l’URL de la "
"pièce jointe."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
@@ -502,12 +505,12 @@ msgstr "Activité publique %s"
#: actions/apitimelinepublic.php:110 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
-msgstr "%s statuts "
+msgstr "%s statuts de tout le monde !"
#: actions/apitimelinetag.php:101 actions/tag.php:66
#, php-format
msgid "Notices tagged with %s"
-msgstr "Statuts marqués avec %s"
+msgstr "Avis marqués avec %s"
#: actions/apitimelinetag.php:107 actions/tagrss.php:64
#, php-format
@@ -584,7 +587,7 @@ msgstr "Recadrer"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -758,11 +761,11 @@ msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
#: lib/profileaction.php:216 lib/searchgroupnav.php:82
msgid "Notices"
-msgstr "Statuts"
+msgstr "Avis"
#: actions/deletenotice.php:52 actions/shownotice.php:92
msgid "No such notice."
-msgstr "Statut non trouvé."
+msgstr "Avis non trouvé."
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -775,7 +778,7 @@ msgstr "Non connecté."
#: actions/deletenotice.php:71
msgid "Can't delete this notice."
-msgstr "Impossible de supprimer ce statut."
+msgstr "Impossible de supprimer cet avis."
#: actions/deletenotice.php:103
msgid ""
@@ -787,11 +790,11 @@ msgstr ""
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
-msgstr "Supprimer ce statut"
+msgstr "Supprimer cet avis"
#: actions/deletenotice.php:144
msgid "Are you sure you want to delete this notice?"
-msgstr "Êtes-vous sûr(e) de vouloir supprimer ce statut ?"
+msgstr "Êtes-vous sûr(e) de vouloir supprimer cet avis ?"
#: actions/deletenotice.php:145
msgid "Do not delete this notice"
@@ -799,7 +802,7 @@ msgstr "Ne pas supprimer cet avis"
#: actions/deletenotice.php:146 lib/noticelist.php:550
msgid "Delete this notice"
-msgstr "Supprimer ce statut"
+msgstr "Supprimer cet avis"
#: actions/deletenotice.php:157
msgid "There was a problem with your session token. Try again, please."
@@ -840,45 +843,45 @@ msgstr "Conception"
msgid "Design settings for this StatusNet site."
msgstr "Paramètres de conception pour ce site StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "URL du logo invalide."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Le thème n'est pas disponible : %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Modifier le logo"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Logo du site"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Modifier le thème"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Thème du site"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Thème pour le site."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Changer l’image d’arrière plan"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Arrière plan"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -887,55 +890,55 @@ msgstr ""
"Vous pouvez importer une image d'arrière plan pour ce site. La taille "
"maximale du fichier est de %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Activé"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Désactivé"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "Activer ou désactiver l’image d’arrière plan."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "Répéter l’image d’arrière plan"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Modifier les couleurs"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Contenu"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Barre latérale"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texte"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Liens"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Utiliser les valeurs par défaut"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Restaurer les conceptions par défaut"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Revenir aux valeurs par défaut"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -945,13 +948,13 @@ msgstr "Revenir aux valeurs par défaut"
msgid "Save"
msgstr "Enregistrer"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Sauvegarder la conception"
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
-msgstr "Ce statut n’est pas un favori !"
+msgstr "Cet avis n’est pas un favori !"
#: actions/disfavor.php:94
msgid "Add to favorites"
@@ -1052,7 +1055,7 @@ msgstr "Courriel entrant"
#: actions/emailsettings.php:138 actions/smssettings.php:157
msgid "Send email to this address to post new notices."
-msgstr "Écrivez à cette adresse courriel pour publier de nouveaux statuts. "
+msgstr "Écrivez à cette adresse courriel pour poster de nouveaux avis. "
#: actions/emailsettings.php:145 actions/smssettings.php:162
msgid "Make a new email address for posting to; cancels the old one."
@@ -1074,7 +1077,7 @@ msgstr "Avertissez-moi par courriel des nouveaux abonnements."
#: actions/emailsettings.php:163
msgid "Send me email when someone adds my notice as a favorite."
msgstr ""
-"Envoyez-moi un courriel quand un utilisateur ajoute un de mes statuts à ses "
+"Envoyez-moi un courriel quand un utilisateur ajoute un de mes avis à ses "
"favoris."
#: actions/emailsettings.php:169
@@ -1091,7 +1094,7 @@ msgstr "Autoriser mes amis à m’envoyer des courriels et des clins d’œil."
#: actions/emailsettings.php:185
msgid "I want to post notices by email."
-msgstr "Je veux envoyer mes statuts par courriel."
+msgstr "Je veux envoyer mes avis par courriel."
#: actions/emailsettings.php:191
msgid "Publish a MicroID for my email address."
@@ -1178,30 +1181,30 @@ msgstr "Nouvelle adresse courriel ajoutée."
#: actions/favorited.php:65 lib/popularnoticesection.php:88
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr "Statuts populaires"
+msgstr "Avis populaires"
#: actions/favorited.php:67
#, php-format
msgid "Popular notices, page %d"
-msgstr "Statuts populaires - page %d"
+msgstr "Avis populaires - page %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
-msgstr "Statuts les plus populaires sur le site en ce moment."
+msgstr "Les avis les plus populaires sur le site en ce moment."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
msgstr ""
-"Les statuts favoris apparaissent sur cette page mais personne ne n’en a mis "
-"un en favori actuellement."
+"Les avis favoris apparaissent sur cette page mais personne n’a mis d’avis en "
+"favori pour le moment."
#: actions/favorited.php:153
msgid ""
"Be the first to add a notice to your favorites by clicking the fave button "
"next to any notice you like."
msgstr ""
-"Soyez le premier à un statut dans vos favoris en cliquant sur le bouton "
-"favori à côté d’un statut que vous aimez."
+"Soyez le premier à ajouter un avis dans vos favoris en cliquant sur le "
+"bouton favori à côté d’un avis que vous aimez."
#: actions/favorited.php:156
#, php-format
@@ -1216,7 +1219,7 @@ msgstr ""
#: lib/personalgroupnav.php:115
#, php-format
msgid "%s's favorite notices"
-msgstr "Statuts favoris de %s"
+msgstr "Avis favoris de %s"
#: actions/favoritesrss.php:115
#, php-format
@@ -1225,7 +1228,7 @@ msgstr "Mises à jour privilégiées par %1$s sur %2$s !"
#: actions/favor.php:79
msgid "This notice is already a favorite!"
-msgstr "Ce statut a déjà été ajouté à vos favoris !"
+msgstr "Cet avis a déjà été ajouté à vos favoris !"
#: actions/favor.php:92 lib/disfavorform.php:140
msgid "Disfavor favorite"
@@ -1248,11 +1251,11 @@ msgstr "Les utilisateurs à ne pas manquer dans %s"
#: actions/file.php:34
msgid "No notice id"
-msgstr "Pas d’identifiant de statut"
+msgstr "Pas d’identifiant d’avis"
#: actions/file.php:38
msgid "No notice"
-msgstr "Aucun statut"
+msgstr "Aucun avis"
#: actions/file.php:42
msgid "No attachments"
@@ -1349,7 +1352,7 @@ msgid ""
"group in the future."
msgstr ""
"Êtes-vous sûr(e) de vouloir bloquer l’utilisateur \"%s\" du groupe \"%s\"? "
-"Ils seront supprimés du groupe, il leur sera interdit d’y publier, et de s’y "
+"Ils seront supprimés du groupe, il leur sera interdit d’y poster, et de s’y "
"abonner à l’avenir."
#: actions/groupblock.php:178
@@ -1382,21 +1385,21 @@ msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
-"Personnalisez le style de votre groupe avec une image de fond et une palette "
-"de couleur de votre choix."
+"Personnalisez l’apparence de votre groupe avec une image d’arrière plan et "
+"une palette de couleurs de votre choix"
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Impossible de mettre à jour votre conception."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Impossible de sauvegarder les préférences de conception !"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Préférences de conception enregistrées."
@@ -1520,11 +1523,11 @@ msgid ""
"%%%%)"
msgstr ""
"Les groupes de %%%%site.name%%%% permettent de trouver et de parler avec des "
-"personnes qui ont le même intérêt. Après avoir rejoint un groupe vous pouvez "
-"envoyer des messages à tous les autres membres en utilisant la syntaxe « !"
-"nomdugroupe ». Vous ne voyez aucun groupe qui vous intéresse ? Essayer d'en "
-"[rechercher un](%%%%action.groupsearch%%%%) ou [commencez le votre !](%%%%"
-"action.newgroup%%%%)"
+"personnes qui ont des intérêts en commun avec vous. Après avoir rejoint un "
+"groupe, vous pouvez envoyer des messages à tous les autres membres en "
+"utilisant la syntaxe « !nomdugroupe ». Vous ne voyez aucun groupe qui vous "
+"intéresse ? Essayez d’en [rechercher un](%%%%action.groupsearch%%%%) ou de "
+"[créer le vôtre !](%%%%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -1590,12 +1593,12 @@ msgstr ""
#: actions/imsettings.php:143
msgid "Send me notices through Jabber/GTalk."
-msgstr "Envoyez-moi les statuts par Jabber/GTalk."
+msgstr "Envoyez-moi les avis par Jabber/GTalk."
#: actions/imsettings.php:148
msgid "Post a notice when my Jabber/GTalk status changes."
msgstr ""
-"Publier un statut chaque fois que mon statut est modifié dans Jabber/GTalk"
+"Poster un avis chaque fois que mon statut est modifié dans Jabber/GTalk"
#: actions/imsettings.php:153
msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
@@ -1729,7 +1732,7 @@ msgstr "Message personnel"
msgid "Optionally add a personal message to the invitation."
msgstr "Ajouter un message personnel à l’invitation (optionnel)."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Envoyer"
@@ -1837,11 +1840,11 @@ msgstr "Impossible de retirer l’utilisateur %s du groupe %s"
msgid "%s left group %s"
msgstr "%s a quitté le groupe %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Déjà connecté."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "Jeton invalide ou expiré."
@@ -1977,11 +1980,11 @@ msgstr "Erreur Ajax"
#: actions/newnotice.php:69
msgid "New notice"
-msgstr "Nouveau statut"
+msgstr "Nouvel avis"
#: actions/newnotice.php:206
msgid "Notice posted"
-msgstr "Statut publié"
+msgstr "Avis publié"
#: actions/noticesearch.php:68
#, php-format
@@ -1989,7 +1992,7 @@ msgid ""
"Search for notices on %%site.name%% by their contents. Separate search terms "
"by spaces; they must be 3 characters or more."
msgstr ""
-"Recherchez les statuts %%site.name%% par leur contenu. Séparez les termes de "
+"Recherchez les avis %%site.name%% par leur contenu. Séparez les termes de "
"recherche par des espaces. Ils doivent contenir au moins 3 caractères."
#: actions/noticesearch.php:78
@@ -2047,7 +2050,7 @@ msgstr "Clin d’œil envoyé !"
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
-msgstr "Le statut n’a pas de profil"
+msgstr "L’avis n’a pas de profil"
#: actions/oembed.php:86 actions/shownotice.php:180
#, php-format
@@ -2062,8 +2065,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@@ -2073,7 +2076,7 @@ msgstr "Recherche de personnes"
#: actions/opensearch.php:67
msgid "Notice Search"
-msgstr "Recherche de statut"
+msgstr "Recherche d’avis"
#: actions/othersettings.php:60
msgid "Other Settings"
@@ -2302,12 +2305,12 @@ msgstr "Recherche de personnes"
#: actions/peopletag.php:70
#, php-format
msgid "Not a valid people tag: %s"
-msgstr "Ce marquage est invalide : %s"
+msgstr "Cette marque est invalide : %s"
#: actions/peopletag.php:144
#, php-format
msgid "Users self-tagged with %s - page %d"
-msgstr "Utilisateurs marqués &s - page %d"
+msgstr "Utilisateurs marqués par eux-mêmes %s - page %d"
#: actions/postnotice.php:84
msgid "Invalid notice content"
@@ -2317,8 +2320,7 @@ msgstr "Contenu invalide"
#, php-format
msgid "Notice license ‘%s’ is not compatible with site license ‘%s’."
msgstr ""
-"La licence des statuts « %s » n'est pas compatible avec la licence du site « %"
-"s »."
+"La licence des avis « %s » n'est pas compatible avec la licence du site « %s »."
#: actions/profilesettings.php:60
msgid "Profile settings"
@@ -2382,13 +2384,14 @@ msgstr "Indiquez votre emplacement, ex.: « Ville, État (ou région), Pays »"
#: actions/tagother.php:209 lib/subscriptionlist.php:106
#: lib/subscriptionlist.php:108 lib/userprofile.php:209
msgid "Tags"
-msgstr "Marquages"
+msgstr "Marques"
#: actions/profilesettings.php:140
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-"Marquages (tags) pour votre profil, séparés par des virgules ou des espaces"
+"Marques pour vous-même (lettres, chiffres, -, ., et _), séparées par des "
+"virgules ou des espaces"
#: actions/profilesettings.php:144 actions/siteadminpanel.php:307
msgid "Language"
@@ -2429,7 +2432,7 @@ msgstr "La langue est trop longue (255 caractères maximum)."
#: actions/profilesettings.php:246 actions/tagother.php:178
#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Marquage invalide : « %s »"
+msgstr "Marque invalide : « %s »"
#: actions/profilesettings.php:295
msgid "Couldn't update user for autosubscribe."
@@ -2441,7 +2444,7 @@ msgstr "Impossible d’enregistrer le profil."
#: actions/profilesettings.php:336
msgid "Couldn't save tags."
-msgstr "Impossible d’enregistrer les marquages."
+msgstr "Impossible d’enregistrer les marques."
#: actions/profilesettings.php:344 lib/adminpanelaction.php:126
msgid "Settings saved."
@@ -2524,17 +2527,18 @@ msgstr ""
#: actions/publictagcloud.php:57
msgid "Public tag cloud"
-msgstr "Nuage de mots clefs public"
+msgstr "Nuage de marques public"
#: actions/publictagcloud.php:63
#, php-format
msgid "These are most popular recent tags on %s "
-msgstr "Derniers marquages les plus populaires dans %s "
+msgstr "Dernières marques les plus populaires sur %s "
#: actions/publictagcloud.php:69
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
-msgstr "Personne n'a encore posté un statuts avec une [marque](%%doc.tags%%)."
+msgstr ""
+"Personne n'a encore posté d’avis avec une [marque (hashtag)](%%doc.tags%%)."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
@@ -2551,7 +2555,7 @@ msgstr ""
#: actions/publictagcloud.php:135
msgid "Tag cloud"
-msgstr "Nuage de mots clefs"
+msgstr "Nuage de marques"
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
@@ -2724,7 +2728,7 @@ msgid ""
"link up to friends and colleagues. "
msgstr ""
"Avec ce formulaire vous pouvez créer un nouveau compte. Vous pourrez ensuite "
-"poster des statuts and et vous relier avec des amis et collègues. "
+"poster des avis and et vous relier à des amis et collègues. "
#: actions/register.php:424
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -2747,8 +2751,8 @@ msgstr "Courriel"
#: actions/register.php:438 actions/register.php:442
msgid "Used only for updates, announcements, and password recovery"
msgstr ""
-"Utilisé uniquement pour les mises à jour de statut, les avertissements, et "
-"la récupération de mot de passe"
+"Utilisé uniquement pour les mises à jour, les notifications, et la "
+"récupération de mot de passe"
#: actions/register.php:449
msgid "Longer name, preferably your \"real\" name"
@@ -2791,9 +2795,9 @@ msgstr ""
"Félicitations, %s! Bienvenue dans %%%%site.name%%%%. Vous pouvez "
"maintenant :\n"
"\n"
-"* Visiter [votre profil](%s) et publier votre premier statut.\n"
+"* Visiter [votre profil](%s) et poster votre premier message.\n"
"* Ajouter une adresse [Jabber/GTalk](%%%%action.imsettings%%%%) afin "
-"d’envoyer et recevoir vos statuts par messagerie instantanée.\n"
+"d’envoyer et recevoir vos avis par messagerie instantanée.\n"
"* [Chercher des personnes](%%%%action.peoplesearch%%%%) que vous pourriez "
"connaître ou qui partagent vos intêrets.\n"
"* Mettre votre [profil](%%%%action.profilesettings%%%%) à jour pour en dire "
@@ -2858,7 +2862,6 @@ msgid "Invalid profile URL (bad format)"
msgstr "URL du profil invalide (mauvais format)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
msgstr ""
"URL de profil invalide (aucun document YADIS ou définition XRDS invalide)."
@@ -2903,8 +2906,8 @@ msgid ""
"This is the timeline showing replies to %s but %s hasn't received a notice "
"to his attention yet."
msgstr ""
-"Ceci est la chronologie des réponses à %s mais %s n'a encore reçu aucun "
-"statut à son intention."
+"Ceci est la chronologie des réponses à %s mais %s n’a encore reçu aucun avis "
+"à son intention."
#: actions/replies.php:203
#, php-format
@@ -2912,8 +2915,9 @@ msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
-"Vous pouvez vous engager dans une conversation avec d'autres personnes, vous "
-"abonner à plus de gens ou [joindre des groupes](%%action.groups%%)."
+"Vous pouvez entamer une conversation avec d’autres utilisateurs, vous "
+"abonner à plus de personnes ou vous [inscrire à des groupes](%%action.groups%"
+"%)."
#: actions/replies.php:205
#, php-format
@@ -2921,8 +2925,8 @@ msgid ""
"You can try to [nudge %s](../%s) or [post something to his or her attention]"
"(%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
-"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) ou de [publier "
-"quelque chose à son attention](%%%%action.newnotice%%%%?status_textarea=%s)"
+"Vous pouvez essayer de [faire un clin d’œil à %s](../%s) ou de [poster "
+"quelque chose à son intention](%%%%action.newnotice%%%%?status_textarea=%s)"
#: actions/repliesrss.php:72
#, php-format
@@ -2988,7 +2992,7 @@ msgid ""
"would add to their favorites :)"
msgstr ""
"%s n’a pas ajouté d’avis à ses favoris pour le moment. Vous pourriez [créer "
-"un compte](%%%%action.register%%%%), puis publier quelque chose "
+"un compte](%%%%action.register%%%%), puis poster quelque chose "
"d’intéressant, qui serait ajouté à ses favoris :)"
#: actions/showfavorites.php:242
@@ -3139,22 +3143,22 @@ msgstr "%s - page %d"
#: actions/showstream.php:122
#, php-format
msgid "Notice feed for %s tagged %s (RSS 1.0)"
-msgstr "Fil des statuts pour %s marqués %s (RSS 1.0)"
+msgstr "Fil des avis pour %s marqués %s (RSS 1.0)"
#: actions/showstream.php:129
#, php-format
msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Flux des statuts de %s (RSS 1.0)"
+msgstr "Flux des avis de %s (RSS 1.0)"
#: actions/showstream.php:136
#, php-format
msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Flux des statuts de %s (RSS 2.0)"
+msgstr "Flux des avis de %s (RSS 2.0)"
#: actions/showstream.php:143
#, php-format
msgid "Notice feed for %s (Atom)"
-msgstr "Flux des statuts de %s (Atom)"
+msgstr "Flux des avis de %s (Atom)"
#: actions/showstream.php:148
#, php-format
@@ -3180,8 +3184,8 @@ msgid ""
"You can try to nudge %s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%s)."
msgstr ""
-"Vous pouvez essayer de faire un clin d’œil à %s ou de [publier quelque chose "
-"à son attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+"Vous pouvez essayer de faire un clin d’œil à %s ou de [poster quelque chose "
+"à son intention](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/showstream.php:234
#, php-format
@@ -3194,8 +3198,8 @@ msgstr ""
"**%s** possède un compte sur %%%%site.name%%%%, un service de [microblogging]"
"(http://fr.wikipedia.org/wiki/Microblog) basé sur le logiciel libre "
"[StatusNet](http://status.net/). [Inscrivez-vous maintenant](%%%%action."
-"register%%%%) pour suivre les statuts de **%s** et bien plus ! ([En lire "
-"plus](%%%%doc.help%%%%))"
+"register%%%%) pour suivre les avis de **%s** et bien plus ! ([En lire plus](%"
+"%%%doc.help%%%%))"
#: actions/showstream.php:239
#, php-format
@@ -3291,7 +3295,7 @@ msgstr "URL utilisée pour le lien de crédits au bas de chaque page"
#: actions/siteadminpanel.php:284
msgid "Contact email address for your site"
-msgstr "adresse de courriel de contact de votre site"
+msgstr "Adresse de courriel de contact de votre site"
#: actions/siteadminpanel.php:290
msgid "Local"
@@ -3435,7 +3439,7 @@ msgstr "Limite de texte"
#: actions/siteadminpanel.php:403
msgid "Maximum number of characters for notices."
-msgstr "Nombre maximal de caractères pour les statuts."
+msgstr "Nombre maximal de caractères pour les avis."
#: actions/siteadminpanel.php:407
msgid "Dupe limit"
@@ -3496,7 +3500,7 @@ msgid ""
"Send me notices through SMS; I understand I may incur exorbitant charges "
"from my carrier."
msgstr ""
-"Envoyez-moi les statuts par SMS ; je comprends que cela pourrait affecter ma "
+"Envoyez-moi les avis par SMS ; je comprends que cela pourrait affecter ma "
"facture de téléphonie mobile."
#: actions/smssettings.php:306
@@ -3568,7 +3572,7 @@ msgstr "Ceci n’est pas un utilisateur local."
#: actions/subscribe.php:69
msgid "Subscribed"
-msgstr "Souscrit"
+msgstr "Abonné"
#: actions/subscribers.php:50
#, php-format
@@ -3582,12 +3586,12 @@ msgstr "Abonnés à %s - page &d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
-msgstr "Ces personnes suivent vos statuts."
+msgstr "Ces personnes suivent vos avis."
#: actions/subscribers.php:67
#, php-format
msgid "These are the people who listen to %s's notices."
-msgstr "Ces personnes suivent les statuts de %s."
+msgstr "Ces personnes suivent les avis de %s."
#: actions/subscribers.php:108
msgid ""
@@ -3623,12 +3627,12 @@ msgstr "Abonnements de %s - page %d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
-msgstr "Vous suivez les statuts de ces personnes. "
+msgstr "Vous suivez les avis de ces personnes."
#: actions/subscriptions.php:69
#, php-format
msgid "These are the people whose notices %s listens to."
-msgstr "Les statuts de ces personnes sont suivis par %s."
+msgstr "Les avis de ces personnes sont suivis par %s."
#: actions/subscriptions.php:121
#, php-format
@@ -3670,7 +3674,7 @@ msgstr "Aucun argument d’identification."
#: actions/tagother.php:65
#, php-format
msgid "Tag %s"
-msgstr "Marquage %s"
+msgstr "Marque %s"
#: actions/tagother.php:77 lib/userprofile.php:75
msgid "User profile"
@@ -3688,7 +3692,9 @@ msgstr "Marquer l’utilisateur"
msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
-msgstr "Marquer cet utilisateur (séparer par des espaces ou des virgules)"
+msgstr ""
+"Marques pour cet utilisateur (lettres, chiffres, -, ., et _), séparées par "
+"des virgules ou des espaces"
#: actions/tagother.php:193
msgid ""
@@ -3699,7 +3705,7 @@ msgstr ""
#: actions/tagother.php:200
msgid "Could not save tags."
-msgstr "Impossible d’enregistrer les marquages."
+msgstr "Impossible d’enregistrer les marques."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
@@ -3709,26 +3715,26 @@ msgstr ""
#: actions/tag.php:68
#, php-format
msgid "Notices tagged with %s, page %d"
-msgstr "Statuts marqués %s - page %d"
+msgstr "Avis marqués %s - page %d"
#: actions/tag.php:86
#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Flux des statuts pour le marquage %s (RSS 1.0)"
+msgstr "Flux des avis pour la marque %s (RSS 1.0)"
#: actions/tag.php:92
#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Flux des statuts pour le marquage %s (RSS 2.0)"
+msgstr "Flux des avis pour la marque %s (RSS 2.0)"
#: actions/tag.php:98
#, php-format
msgid "Notice feed for tag %s (Atom)"
-msgstr "Flux des statuts pour le marquage %s (Atom)"
+msgstr "Flux des avis pour la marque %s (Atom)"
#: actions/tagrss.php:35
msgid "No such tag."
-msgstr "Aucun marquage trouvé."
+msgstr "Cette marque n’existe pas."
#: actions/twitapitrends.php:87
msgid "API method under construction."
@@ -3762,7 +3768,7 @@ msgstr "Désabonné"
#, php-format
msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’."
msgstr ""
-"La licence du flux auquel vous avez souscrit ‘%s’ n’est pas compatible avec "
+"La licence du flux auquel vous êtes abonné(e) ‘%s’ n’est pas compatible avec "
"la licence du site ‘%s’."
#: actions/useradminpanel.php:58 lib/adminpanelaction.php:305
@@ -3865,8 +3871,8 @@ msgid ""
"click “Rejectâ€."
msgstr ""
"Veuillez vérifier ces détails pour vous assurer que vous souhaitez vous "
-"abonner aux statuts de cet utilisateur. Si vous n’avez pas demandé à vous "
-"abonner aux statuts de quelqu’un, cliquez « Rejeter »."
+"abonner aux avis de cet utilisateur. Si vous n’avez pas demandé à vous "
+"abonner aux avis de quelqu’un, cliquez « Rejeter »."
#: actions/userauthorization.php:188
msgid "License"
@@ -3887,7 +3893,7 @@ msgstr "Refuser"
#: actions/userauthorization.php:212
msgid "Reject this subscription"
-msgstr "Rejeter cette souscription"
+msgstr "Rejeter cet abonnement"
#: actions/userauthorization.php:225
msgid "No authorization request!"
@@ -3929,12 +3935,13 @@ msgstr "L’URI de l’auditeur ‘%s’ n’a pas été trouvée"
#: actions/userauthorization.php:301
#, php-format
msgid "Listenee URI ‘%s’ is too long."
-msgstr "L’URI à laquelle vous avez souscrit ‘%s’ est trop longue."
+msgstr "L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est trop longue."
#: actions/userauthorization.php:307
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
-msgstr "L’URI à laquelle vous avez souscrit ‘%s’ est un utilisateur local."
+msgstr ""
+"L’URI à laquelle vous vous êtes abonné(e) ‘%s’ est un utilisateur local."
#: actions/userauthorization.php:322
#, php-format
@@ -4031,7 +4038,7 @@ msgstr "Impossible de mettre à jour le message avec un nouvel URI."
#: classes/Notice.php:164
#, php-format
msgid "DB error inserting hashtag: %s"
-msgstr "Erreur de base de donnée en insérant le hashtag : %s"
+msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
#: classes/Notice.php:179
msgid "Problem saving notice. Too long."
@@ -4039,14 +4046,14 @@ msgstr "Problème lors de l’enregistrement de l’avis ; trop long."
#: classes/Notice.php:183
msgid "Problem saving notice. Unknown user."
-msgstr "Erreur lors de l’enregistrement du statut. Utilisateur inconnu."
+msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
#: classes/Notice.php:188
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-"Trop de statuts, trop vite ! Prenez une pause et publiez à nouveau dans "
-"quelques minutes."
+"Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques "
+"minutes."
#: classes/Notice.php:194
msgid ""
@@ -4058,11 +4065,11 @@ msgstr ""
#: classes/Notice.php:200
msgid "You are banned from posting notices on this site."
-msgstr "Il vous est interdit de publier des statuts dans ce site."
+msgstr "Il vous est interdit de poster des avis sur ce site."
#: classes/Notice.php:265 classes/Notice.php:290
msgid "Problem saving notice."
-msgstr "Problème lors de l’enregistrement du statut."
+msgstr "Problème lors de l’enregistrement de l’avis."
#: classes/Notice.php:1124
#, php-format
@@ -4335,7 +4342,7 @@ msgstr "Fournisseur"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr "Statuts sur lesquels cette pièce jointe apparait."
+msgstr "Avis sur lesquels cette pièce jointe apparaît."
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
@@ -4384,15 +4391,15 @@ msgstr ""
#: lib/command.php:152 lib/command.php:400
msgid "Notice with that id does not exist"
-msgstr "Aucun statut avec cet identifiant n’existe"
+msgstr "Aucun avis avec cet identifiant n’existe"
#: lib/command.php:168 lib/command.php:416 lib/command.php:471
msgid "User has no last notice"
-msgstr "Aucun statut récent pour cet utilisateur"
+msgstr "Aucun avis récent pour cet utilisateur"
#: lib/command.php:190
msgid "Notice marked as fave."
-msgstr "Statut ajouté aux favoris."
+msgstr "Avis ajouté aux favoris."
#: lib/command.php:315
#, php-format
@@ -4484,37 +4491,51 @@ msgstr "Avertissements activés."
msgid "Can't turn on notification."
msgstr "Impossible d’activer les avertissements."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Impossible de créer les alias."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "Vous n'êtes pas abonné(e) à personne."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Vous êtes abonné à cette personne :"
msgstr[1] "Vous êtes abonné à ces personnes :"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "Personne ne s'est abonné à vous."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Cette personne est abonnée à vous :"
msgstr[1] "Ces personnes sont abonnées à vous :"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Vous n'êtes pas membre d'aucun groupe."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Vous êtes membre de ce groupe :"
msgstr[1] "Vous êtes membre de ces groupes :"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4534,6 +4555,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4579,7 +4601,7 @@ msgstr ""
"last <nickname> - même effet que 'get'\n"
"on <nickname> - pas encore implémenté.\n"
"off <nickname> - pas encore implémenté.\n"
-"nudge <nickname> - rappeler à un utilisateur de publier.\n"
+"nudge <nickname> - clin d’œil : rappeler à un utilisateur de poster.\n"
"invite <phone number> - pas encore implémenté.\n"
"track <word> - pas encore implémenté.\n"
"untrack <word> - pas encore implémenté.\n"
@@ -4611,11 +4633,11 @@ msgstr "IM"
#: lib/connectsettingsaction.php:111
msgid "Updates by instant messenger (IM)"
-msgstr "Suivi des statuts par messagerie instantanée"
+msgstr "Suivi des avis par messagerie instantanée"
#: lib/connectsettingsaction.php:116
msgid "Updates by SMS"
-msgstr "Suivi des statuts par SMS"
+msgstr "Suivi des avis par SMS"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -4632,11 +4654,7 @@ msgstr ""
"Vous pouvez importer votre image d’arrière plan personnelle. La taille "
"maximale du fichier est de 2 Mo."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Mauvais paramètres de couleur par défaut : "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Les paramètre par défaut de la conception ont été restaurés."
@@ -4674,7 +4692,7 @@ msgstr "Ami d’un ami"
#: lib/galleryaction.php:121
msgid "Filter tags"
-msgstr "Filtrer les balises"
+msgstr "Filtrer les marques"
#: lib/galleryaction.php:131
msgid "All"
@@ -4686,11 +4704,11 @@ msgstr "Sélectionner une marque à filtrer"
#: lib/galleryaction.php:140
msgid "Tag"
-msgstr "Marquer"
+msgstr "Marque"
#: lib/galleryaction.php:141
msgid "Choose a tag to narrow list"
-msgstr "Choissez un marquage pour réduire la liste"
+msgstr "Choissez une marque pour réduire la liste"
#: lib/galleryaction.php:143
msgid "Go"
@@ -4770,7 +4788,7 @@ msgstr "Groupes avec le plus d'éléments publiés"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr "Marquages des statuts du groupe %s"
+msgstr "Marques dans les avis du groupe %s"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
@@ -4889,7 +4907,7 @@ msgstr ""
#: lib/mail.php:236
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
-msgstr "%1$s suit maintenant vos statuts dans %2$s."
+msgstr "%1$s suit maintenant vos avis sur %2$s."
#: lib/mail.php:241
#, php-format
@@ -4905,7 +4923,7 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
-"%1$s suit maintenant vos statuts sur %2$s.\n"
+"%1$s suit maintenant vos avis sur %2$s.\n"
"\n"
"%3$s\n"
"\n"
@@ -4952,14 +4970,13 @@ msgid ""
"Faithfully yours,\n"
"%4$s"
msgstr ""
-"Une nouvelle adresse vous a été attribuée pour publier vos statuts dans %1"
-"$s.\n"
+"Une nouvelle adresse vous a été attribuée pour poster vos avis sur %1$s.\n"
"\n"
-"Écrivez à %2$s pour mettre à jour votre statut.\n"
+"Écrivez à %2$s pour poster un nouvel avis.\n"
"\n"
"Plus d’info : %3$s.\n"
"\n"
-"Amicalement vôtre,\n"
+"Cordialement,\n"
"%4$s"
#: lib/mail.php:413
@@ -4992,7 +5009,7 @@ msgid ""
"%4$s\n"
msgstr ""
"%1$s (%2$s) se demande ce que vous devenez ces temps-ci et vous invite à "
-"publier des nouvelles.\n"
+"poster des nouvelles.\n"
"\n"
"Donc on vous écoute :)\n"
"\n"
@@ -5044,7 +5061,7 @@ msgstr ""
#: lib/mail.php:559
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s (@%s) a ajouté un de vos statut à ses favoris"
+msgstr "%s (@%s) a ajouté un de vos avis à ses favoris"
#: lib/mail.php:561
#, php-format
@@ -5178,24 +5195,24 @@ msgstr "Envoyer un message direct"
msgid "To"
msgstr "À"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Caractères restants"
#: lib/noticeform.php:158
msgid "Send a notice"
-msgstr "Envoyer un statut"
+msgstr "Envoyer un avis"
#: lib/noticeform.php:171
#, php-format
msgid "What's up, %s?"
msgstr "Quoi de neuf, %s ?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Attacher"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Attacher un fichier"
@@ -5230,7 +5247,7 @@ msgstr "dans le contexte"
#: lib/noticelist.php:526
msgid "Reply to this notice"
-msgstr "Répondre à ce statut"
+msgstr "Répondre à cet avis"
#: lib/noticelist.php:527
msgid "Reply"
@@ -5303,7 +5320,7 @@ msgstr "Vos messages envoyés"
#: lib/personaltagcloudsection.php:56
#, php-format
msgid "Tags in %s's notices"
-msgstr "Marquages des statuts de %s"
+msgstr "Marques dans les avis de %s"
#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
msgid "Subscriptions"
@@ -5351,7 +5368,7 @@ msgstr "Groupes d’utilisateurs"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
-msgstr "Marquages récents"
+msgstr "Marques récentes"
#: lib/publicgroupnav.php:88
msgid "Featured"
@@ -5375,7 +5392,7 @@ msgstr "Rechercher sur le site"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr "Mot(s) celf(s)"
+msgstr "Mot(s) clef(s)"
#: lib/searchaction.php:162
msgid "Search help"
@@ -5391,7 +5408,7 @@ msgstr "Chercher des personnes sur ce site"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
-msgstr "Chercher dans le contenu des statuts"
+msgstr "Chercher dans le contenu des avis"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
@@ -5431,12 +5448,12 @@ msgstr "Groupes de %s"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
msgid "People Tagcloud as self-tagged"
-msgstr "Nuage de mots clefs des personnes tel que définis par eux-même"
+msgstr "Nuage de marques pour une personne (ajoutées par eux-même)"
#: lib/subscriberspeopletagcloudsection.php:48
#: lib/subscriptionspeopletagcloudsection.php:48
msgid "People Tagcloud as tagged"
-msgstr "Nuage de mots clefs des personnes"
+msgstr "Nuage de marques pour une personne"
#: lib/subscriptionlist.php:126
msgid "(none)"
@@ -5444,7 +5461,7 @@ msgstr "(aucun)"
#: lib/subs.php:52
msgid "Already subscribed!"
-msgstr "Déjà souscrit !"
+msgstr "Déjà abonné !"
#: lib/subs.php:56
msgid "User has blocked you."
@@ -5462,7 +5479,11 @@ msgstr "Impossible d’abonner une autre personne à votre profil."
msgid "Not subscribed!"
msgstr "Pas abonné !"
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Impossible de supprimer l’abonnement à soi-même."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Impossible de cesser l’abonnement"
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 445e580bb..b3d15c8a4 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:42+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:33+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
@@ -185,7 +185,12 @@ msgstr "O usuario non ten perfil."
msgid "Could not save profile."
msgstr "Non se puido gardar o perfil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Non se puido actualizar o usuario."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Bloqueo de usuario fallido."
@@ -580,7 +585,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -848,109 +853,109 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Tamaño inválido."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Cambiar contrasinal"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Invitar"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Modificado"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Novo chío"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Podes actualizar a túa información do perfil persoal aquí"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Cambiar contrasinal"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Conectar"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Buscar"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texto"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Lista"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -960,7 +965,7 @@ msgstr ""
msgid "Save"
msgstr "Gardar"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1410,20 +1415,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Non se puido actualizar o usuario."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Non se puideron gardar os teus axustes de Twitter!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Preferencias gardadas."
@@ -1743,7 +1748,7 @@ msgstr "Mensaxe persoal"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcionalmente engadir unha mensaxe persoal á invitación."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Enviar"
@@ -1852,11 +1857,11 @@ msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Sesión xa iniciada"
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Contido do chío inválido"
@@ -2072,8 +2077,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@@ -4528,12 +4533,26 @@ msgstr "Notificación habilitada."
msgid "Can't turn on notification."
msgstr "Non se pode activar a notificación."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Non se puido crear o favorito."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Xa estas suscrito a estes usuarios:"
@@ -4542,12 +4561,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Outro usuario non se puido suscribir a ti."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Outro usuario non se puido suscribir a ti."
@@ -4556,12 +4575,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Non estás suscrito a ese perfil"
@@ -4570,7 +4589,7 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4590,6 +4609,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4679,11 +4699,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Podes actualizar a túa información do perfil persoal aquí"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5206,7 +5222,7 @@ msgstr "Eliminar chío"
msgid "To"
msgstr "A"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 ou máis caracteres"
@@ -5221,11 +5237,11 @@ msgstr "Dar un toque"
msgid "What's up, %s?"
msgstr "¿Que pasa, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5514,7 +5530,12 @@ msgstr "Outro usuario non se puido suscribir a ti."
msgid "Not subscribed!"
msgstr "Non está suscrito!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Non se pode eliminar a subscrición."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Non se pode eliminar a subscrición."
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index c48131307..a6d463d53 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:46+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:36+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
@@ -183,7 +183,12 @@ msgstr "למשתמש ×ין פרופיל."
msgid "Could not save profile."
msgstr "שמירת הפרופיל נכשלה."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "עידכון המשתמש נכשל."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -574,7 +579,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -834,109 +839,109 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "גודל ×œ× ×—×•×§×™."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "עמוד ×–×” ×ינו זמין בסוג מדיה ש×תה יכול לקבל"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "שנה סיסמה"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "הודעה חדשה"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "שנה"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "הודעה חדשה"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "שנה סיסמה"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "התחבר"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "חיפוש"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "טקסט"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "היכנס"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -946,7 +951,7 @@ msgstr ""
msgid "Save"
msgstr "שמור"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1388,19 +1393,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "עידכון המשתמש נכשל."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "העדפות נשמרו."
@@ -1715,7 +1720,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "שלח"
@@ -1797,11 +1802,11 @@ msgstr "נכשלה יצירת OpenID מתוך: %s"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "כבר מחובר."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "תוכן ההודעה ×œ× ×—×•×§×™"
@@ -2011,8 +2016,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4375,40 +4380,54 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "שמירת מידע התמונה נכשל"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "הרשמה מרוחקת"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "הרשמה מרוחקת"
msgstr[1] "הרשמה מרוחקת"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4427,6 +4446,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4490,11 +4510,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4956,7 +4972,7 @@ msgstr ""
msgid "To"
msgstr "×ל"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "לפחות 6 ×ותיות"
@@ -4971,11 +4987,11 @@ msgstr "הודעה חדשה"
msgid "What's up, %s?"
msgstr "מה המצב %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5257,7 +5273,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "×œ× ×ž× ×•×™!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index c22ee263d..9bea1de8f 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -6,19 +6,19 @@
#
msgid ""
msgstr ""
-""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-11-27 23:50+0000\n"
-"PO-Revision-Date: 2009-12-02 23:32:10+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:39+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
-"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || n%100==4) ? 2 : 3)\n"
+"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : (n%100==3 || "
+"n%100==4) ? 2 : 3)\n"
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
@@ -76,10 +76,42 @@ msgstr "Kanal za přećelow wužiwarja %s (RSS 2.0)"
msgid "Feed for friends of %s (Atom)"
msgstr "Kanal za přećelow wužiwarja %s (Atom)"
+#: actions/all.php:127
+#, php-format
+msgid ""
+"This is the timeline for %s and friends but no one has posted anything yet."
+msgstr ""
+
+#: actions/all.php:132
+#, php-format
+msgid ""
+"Try subscribing to more people, [join a group](%%action.groups%%) or post "
+"something yourself."
+msgstr ""
+
+#: actions/all.php:134
+#, php-format
+msgid ""
+"You can try to [nudge %s](../%s) from his profile or [post something to his "
+"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to his or her attention."
+msgstr ""
+
#: actions/all.php:165
msgid "You and friends"
msgstr "Ty a přećeljo"
+#: actions/allrss.php:119 actions/apitimelinefriends.php:121
+#, php-format
+msgid "Updates from %1$s and friends on %2$s!"
+msgstr ""
+
#: actions/apiaccountratelimitstatus.php:70
#: actions/apiaccountupdatedeliverydevice.php:93
#: actions/apiaccountupdateprofilebackgroundimage.php:94
@@ -101,10 +133,34 @@ msgstr "API-metoda njenamakana."
msgid "This method requires a POST."
msgstr "Tuta metoda wužaduje sej POST."
+#: actions/apiaccountupdatedeliverydevice.php:105
+msgid ""
+"You must specify a parameter named 'device' with a value of one of: sms, im, "
+"none"
+msgstr ""
+
#: actions/apiaccountupdatedeliverydevice.php:132
msgid "Could not update user."
msgstr "Wužiwar njeje so dał aktualizować."
+#: actions/apiaccountupdateprofilebackgroundimage.php:108
+#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apistatusesupdate.php:127 actions/avatarsettings.php:254
+#: actions/designadminpanel.php:122 actions/newnotice.php:94
+#: lib/designsettings.php:283
+#, php-format
+msgid ""
+"The server was unable to handle that much POST data (%s bytes) due to its "
+"current configuration."
+msgstr ""
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:136
+#: actions/apiaccountupdateprofilebackgroundimage.php:146
+#: actions/apiaccountupdateprofilecolors.php:164
+#: actions/apiaccountupdateprofilecolors.php:174
+msgid "Unable to save your design settings."
+msgstr ""
+
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
msgid "Could not update your design."
@@ -123,6 +179,18 @@ msgstr "Wužiwar nima profil."
msgid "Could not save profile."
msgstr "Profil njeje so składować dał."
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Njemóžeš so samoho blokować."
+
+#: actions/apiblockcreate.php:119
+msgid "Block user failed."
+msgstr ""
+
+#: actions/apiblockdestroy.php:107
+msgid "Unblock user failed."
+msgstr ""
+
#: actions/apidirectmessagenew.php:126
msgid "No message text!"
msgstr "Žadyn powěsćowy tekst!"
@@ -136,6 +204,10 @@ msgstr "To je předołho. Maksimalna powěsćowa wulkosć je %d znamješkow."
msgid "Recipient user not found."
msgstr "Přijimowar njenamakany."
+#: actions/apidirectmessagenew.php:150
+msgid "Can't send direct messages to users who aren't your friend."
+msgstr ""
+
#: actions/apidirectmessage.php:89
#, php-format
msgid "Direct messages from %s"
@@ -182,10 +254,53 @@ msgstr "Status z tym ID njenamakany."
msgid "This status is already a favorite!"
msgstr "Tutón status je hižo faworit!"
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+msgid "Could not create favorite."
+msgstr ""
+
#: actions/apifavoritedestroy.php:122
msgid "That status is not a favorite!"
msgstr "Tón status faworit njeje!"
+#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
+msgid "Could not delete favorite."
+msgstr ""
+
+#: actions/apifriendshipscreate.php:109
+msgid "Could not follow user: User not found."
+msgstr ""
+
+#: actions/apifriendshipscreate.php:118
+#, php-format
+msgid "Could not follow user: %s is already on your list."
+msgstr ""
+
+#: actions/apifriendshipsdestroy.php:109
+msgid "Could not unfollow user: User not found."
+msgstr ""
+
+#: actions/apifriendshipsdestroy.php:120
+msgid "You cannot unfollow yourself!"
+msgstr ""
+
+#: actions/apifriendshipsexists.php:94
+msgid "Two user ids or screen_names must be supplied."
+msgstr ""
+
+#: actions/apifriendshipsshow.php:135
+msgid "Could not determine source user."
+msgstr ""
+
+#: actions/apifriendshipsshow.php:143
+msgid "Could not find target user."
+msgstr ""
+
+#: actions/apigroupcreate.php:164 actions/editgroup.php:182
+#: actions/newgroup.php:126 actions/profilesettings.php:208
+#: actions/register.php:205
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
#: actions/apigroupcreate.php:173 actions/editgroup.php:186
#: actions/newgroup.php:130 actions/profilesettings.php:231
#: actions/register.php:208
@@ -254,15 +369,44 @@ msgstr "Skupina njenamakana!"
msgid "You are already a member of that group."
msgstr "Sy hižo ÄÅ‚on teje skupiny."
+#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
+msgid "You have been blocked from that group by the admin."
+msgstr ""
+
+#: actions/apigroupjoin.php:138
+#, php-format
+msgid "Could not join user %s to group %s."
+msgstr ""
+
#: actions/apigroupleave.php:114
msgid "You are not a member of this group."
msgstr "Njejsy ÄÅ‚on tuteje skupiny."
+#: actions/apigroupleave.php:124
+#, php-format
+msgid "Could not remove user %s to group %s."
+msgstr ""
+
+#: actions/apigrouplistall.php:90 actions/usergroups.php:62
+#, php-format
+msgid "%s groups"
+msgstr ""
+
#: actions/apigrouplistall.php:94
#, php-format
msgid "groups on %s"
msgstr "skupiny na %s"
+#: actions/apigrouplist.php:95
+#, php-format
+msgid "%s's groups"
+msgstr ""
+
+#: actions/apigrouplist.php:103
+#, php-format
+msgid "Groups %s is a member of on %s."
+msgstr ""
+
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
msgstr "Tuta metoda wužaduje sej POST abo DELETE."
@@ -289,10 +433,67 @@ msgstr "To je předołho. Maksimalna wulkosć zdźělenki je %d znamješkow."
msgid "Not found"
msgstr "Njenamakany"
+#: actions/apistatusesupdate.php:227 actions/newnotice.php:183
+#, php-format
+msgid "Max notice size is %d chars, including attachment URL."
+msgstr ""
+
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
msgid "Unsupported format."
msgstr "Njepodpěrany format."
+#: actions/apitimelinefavorites.php:107
+#, php-format
+msgid "%s / Favorites from %s"
+msgstr ""
+
+#: actions/apitimelinefavorites.php:119
+#, php-format
+msgid "%s updates favorited by %s / %s."
+msgstr ""
+
+#: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117
+#: actions/grouprss.php:131 actions/userrss.php:90
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
+#: actions/apitimelinegroup.php:116 actions/apitimelineuser.php:125
+#: actions/userrss.php:92
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
+#: actions/apitimelinementions.php:116
+#, php-format
+msgid "%1$s / Updates mentioning %2$s"
+msgstr ""
+
+#: actions/apitimelinementions.php:126
+#, php-format
+msgid "%1$s updates that reply to updates from %2$s / %3$s."
+msgstr ""
+
+#: actions/apitimelinepublic.php:106 actions/publicrss.php:103
+#, php-format
+msgid "%s public timeline"
+msgstr ""
+
+#: actions/apitimelinepublic.php:110 actions/publicrss.php:105
+#, php-format
+msgid "%s updates from everyone!"
+msgstr ""
+
+#: actions/apitimelinetag.php:101 actions/tag.php:66
+#, php-format
+msgid "Notices tagged with %s"
+msgstr ""
+
+#: actions/apitimelinetag.php:107 actions/tagrss.php:64
+#, php-format
+msgid "Updates tagged with %1$s on %2$s!"
+msgstr ""
+
#: actions/apiusershow.php:96
msgid "Not found."
msgstr "Njenamakany."
@@ -321,7 +522,8 @@ msgstr "Awatar"
#: actions/avatarsettings.php:78
#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Móžeš swój wosobinski awatar nahrać. Maksimalna datajowa wulkosć je %s."
+msgstr ""
+"Móžeš swój wosobinski awatar nahrać. Maksimalna datajowa wulkosć je %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:182
#: actions/grouplogo.php:178 actions/remotesubscribe.php:191
@@ -353,10 +555,48 @@ msgstr "ZniÄić"
msgid "Upload"
msgstr "Nahrać"
+#: actions/avatarsettings.php:228 actions/grouplogo.php:286
+msgid "Crop"
+msgstr ""
+
+#: actions/avatarsettings.php:265 actions/disfavor.php:74
+#: actions/emailsettings.php:238 actions/favor.php:75
+#: actions/groupblock.php:66 actions/grouplogo.php:309
+#: actions/groupunblock.php:66 actions/imsettings.php:206
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
+#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
+#: actions/othersettings.php:145 actions/passwordsettings.php:138
+#: actions/profilesettings.php:187 actions/recoverpassword.php:337
+#: actions/register.php:165 actions/remotesubscribe.php:77
+#: actions/smssettings.php:228 actions/subedit.php:38 actions/subscribe.php:46
+#: actions/tagother.php:166 actions/unsubscribe.php:69
+#: actions/userauthorization.php:52 lib/designsettings.php:294
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/avatarsettings.php:277 actions/designadminpanel.php:103
+#: actions/emailsettings.php:256 actions/grouplogo.php:319
+#: actions/imsettings.php:220 actions/recoverpassword.php:44
+#: actions/smssettings.php:248 lib/designsettings.php:304
+msgid "Unexpected form submission."
+msgstr ""
+
+#: actions/avatarsettings.php:322
+msgid "Pick a square area of the image to be your avatar"
+msgstr ""
+
+#: actions/avatarsettings.php:337 actions/grouplogo.php:377
+msgid "Lost our file data."
+msgstr ""
+
#: actions/avatarsettings.php:360
msgid "Avatar updated."
msgstr "Awatar zaktualizowany."
+#: actions/avatarsettings.php:363
+msgid "Failed updating avatar."
+msgstr ""
+
#: actions/avatarsettings.php:387
msgid "Avatar deleted."
msgstr "Awatar zniÄeny."
@@ -375,6 +615,32 @@ msgstr "Žane přimjeno"
msgid "No such group"
msgstr "Skupina njeeksistuje"
+#: actions/blockedfromgroup.php:90
+#, php-format
+msgid "%s blocked profiles"
+msgstr ""
+
+#: actions/blockedfromgroup.php:93
+#, php-format
+msgid "%s blocked profiles, page %d"
+msgstr ""
+
+#: actions/blockedfromgroup.php:108
+msgid "A list of the users blocked from joining this group."
+msgstr ""
+
+#: actions/blockedfromgroup.php:281
+msgid "Unblock user from group"
+msgstr ""
+
+#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
+msgid "Unblock"
+msgstr ""
+
+#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
+msgid "Unblock this user"
+msgstr ""
+
#: actions/block.php:69
msgid "You already blocked that user."
msgstr "Sy tutoho wužiwarja hižo zablokował."
@@ -383,6 +649,13 @@ msgstr "Sy tutoho wužiwarja hižo zablokował."
msgid "Block user"
msgstr "Wužiwarja blokować"
+#: actions/block.php:130
+msgid ""
+"Are you sure you want to block this user? Afterwards, they will be "
+"unsubscribed from you, unable to subscribe to you in the future, and you "
+"will not be notified of any @-replies from them."
+msgstr ""
+
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
msgid "No"
@@ -401,6 +674,14 @@ msgstr "Haj"
msgid "Block this user"
msgstr "Tutoho wužiwarja blokować"
+#: actions/block.php:162
+msgid "Failed to save block information."
+msgstr ""
+
+#: actions/bookmarklet.php:50
+msgid "Post to "
+msgstr ""
+
#: actions/confirmaddress.php:75
msgid "No confirmation code."
msgstr "Žadyn wobkrućenski kod."
@@ -422,6 +703,19 @@ msgstr "Njespóznany adresowy typ %s"
msgid "That address has already been confirmed."
msgstr "Tuta adresa bu hižo wobkrućena."
+#: actions/confirmaddress.php:114 actions/emailsettings.php:296
+#: actions/emailsettings.php:427 actions/imsettings.php:258
+#: actions/imsettings.php:401 actions/othersettings.php:174
+#: actions/profilesettings.php:276 actions/smssettings.php:278
+#: actions/smssettings.php:420
+msgid "Couldn't update user."
+msgstr ""
+
+#: actions/confirmaddress.php:126 actions/emailsettings.php:391
+#: actions/imsettings.php:363 actions/smssettings.php:382
+msgid "Couldn't delete email confirmation."
+msgstr ""
+
#: actions/confirmaddress.php:144
msgid "Confirm Address"
msgstr "Adresu wobkrućić"
@@ -436,7 +730,7 @@ msgid "Conversation"
msgstr "Konwersacija"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:206 lib/searchgroupnav.php:82
+#: lib/profileaction.php:216 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Zdźělenki"
@@ -457,6 +751,12 @@ msgstr "Njepřizjewjeny."
msgid "Can't delete this notice."
msgstr "Tuta zdźělenka njeda so zniÄić."
+#: actions/deletenotice.php:103
+msgid ""
+"You are about to permanently delete a notice. Once this is done, it cannot "
+"be undone."
+msgstr ""
+
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
msgstr "Zdźělenku wušmórnyć"
@@ -473,6 +773,10 @@ msgstr "Tutu zdźělenku njewušmórnyć"
msgid "Delete this notice"
msgstr "Tutu zdźělenku wušmórnyć"
+#: actions/deletenotice.php:157
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
#: actions/deleteuser.php:67
msgid "You cannot delete users."
msgstr "Njemóžeš wužiwarjow wušmórnyć."
@@ -485,6 +789,12 @@ msgstr "Móžeš jenož lokalnych wužiwarjow wušmórnyć."
msgid "Delete user"
msgstr "Wužiwarja wušmórnyć"
+#: actions/deleteuser.php:135
+msgid ""
+"Are you sure you want to delete this user? This will clear all data about "
+"the user from the database, without a backup."
+msgstr ""
+
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
msgid "Delete this user"
msgstr "Tutoho wužiwarja wušmórnyć"
@@ -498,90 +808,101 @@ msgstr "Design"
msgid "Design settings for this StatusNet site."
msgstr "Designowe nastajenja za tute sydło StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "Njepłaćiwy logowy URL."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Å at njesteji k dispoziciji: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Logo změnić"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Logo sydła"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Šat změnić"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Šat sydła"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Šat za sydło."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Pozadkowy wobraz změnić"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Pozadk"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
-msgid "You can upload a background image for the site. The maximum file size is %1$s."
-msgstr "Móžeš pozadkowy wobraz za sydło nahrać. Maksimalna datajowa wulkosć je %1$s."
+msgid ""
+"You can upload a background image for the site. The maximum file size is %1"
+"$s."
+msgstr ""
+"Móžeš pozadkowy wobraz za sydło nahrać. Maksimalna datajowa wulkosć je %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Zapinjeny"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Wupinjeny"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
+msgid "Turn background image on or off."
+msgstr ""
+
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
+msgid "Tile background image"
+msgstr ""
+
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Barby změnić"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Wobsah"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "BóÄnica"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Tekst"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Wotkazy"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Standardne hódnoty wužiwać"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Standardne designy wobnowić"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Na standard wróćo stajić"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -591,7 +912,7 @@ msgstr "Na standard wróćo stajić"
msgid "Save"
msgstr "Składować"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Design składować"
@@ -607,6 +928,11 @@ msgstr "K faworitam přidać"
msgid "No such document."
msgstr "Dokument njeeksistuje."
+#: actions/editgroup.php:56
+#, php-format
+msgid "Edit %s group"
+msgstr ""
+
#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
msgid "You must be logged in to create a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wutworił."
@@ -641,6 +967,11 @@ msgstr "Opcije składowane."
msgid "Email Settings"
msgstr "E-mejlowe nastajenja"
+#: actions/emailsettings.php:71
+#, php-format
+msgid "Manage how you get email from %%site.name%%."
+msgstr ""
+
#: actions/emailsettings.php:100 actions/imsettings.php:100
#: actions/smssettings.php:104
msgid "Address"
@@ -656,6 +987,12 @@ msgstr "Aktualna wobkrućena e-mejlowa adresa."
msgid "Remove"
msgstr "Wotstronić"
+#: actions/emailsettings.php:113
+msgid ""
+"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
+"a message with further instructions."
+msgstr ""
+
#: actions/emailsettings.php:117 actions/imsettings.php:120
#: actions/smssettings.php:126
msgid "Cancel"
@@ -678,6 +1015,14 @@ msgstr "Přidać"
msgid "Incoming email"
msgstr "Dochadźaca e-mejl"
+#: actions/emailsettings.php:138 actions/smssettings.php:157
+msgid "Send email to this address to post new notices."
+msgstr ""
+
+#: actions/emailsettings.php:145 actions/smssettings.php:162
+msgid "Make a new email address for posting to; cancels the old one."
+msgstr ""
+
#: actions/emailsettings.php:148 actions/smssettings.php:164
msgid "New"
msgstr "Nowy"
@@ -687,6 +1032,26 @@ msgstr "Nowy"
msgid "Preferences"
msgstr "Nastajenja"
+#: actions/emailsettings.php:158
+msgid "Send me notices of new subscriptions through email."
+msgstr ""
+
+#: actions/emailsettings.php:163
+msgid "Send me email when someone adds my notice as a favorite."
+msgstr ""
+
+#: actions/emailsettings.php:169
+msgid "Send me email when someone sends me a private message."
+msgstr ""
+
+#: actions/emailsettings.php:174
+msgid "Send me email when someone sends me an \"@-reply\"."
+msgstr ""
+
+#: actions/emailsettings.php:179
+msgid "Allow friends to nudge me and send me an email."
+msgstr ""
+
#: actions/emailsettings.php:185
msgid "I want to post notices by email."
msgstr "Chcu zdźělenki přez e-mejl pósłać."
@@ -704,6 +1069,10 @@ msgstr "Nastajenja składowane."
msgid "No email address."
msgstr "Žana e-mejlowa adresa."
+#: actions/emailsettings.php:327
+msgid "Cannot normalize that email address"
+msgstr ""
+
#: actions/emailsettings.php:331 actions/siteadminpanel.php:158
msgid "Not a valid email address"
msgstr "Njeje płaćiwa e-mejlowa adresa"
@@ -716,6 +1085,22 @@ msgstr "To je hižo twoja e-mejlowa adresa."
msgid "That email address already belongs to another user."
msgstr "Ta e-mejlowa adresa hižo słuša k druhemu wužiwarjej."
+#: actions/emailsettings.php:353 actions/imsettings.php:317
+#: actions/smssettings.php:337
+msgid "Couldn't insert confirmation code."
+msgstr ""
+
+#: actions/emailsettings.php:359
+msgid ""
+"A confirmation code was sent to the email address you added. Check your "
+"inbox (and spam box!) for the code and instructions on how to use it."
+msgstr ""
+
+#: actions/emailsettings.php:379 actions/imsettings.php:351
+#: actions/smssettings.php:370
+msgid "No pending confirmation to cancel."
+msgstr ""
+
#: actions/emailsettings.php:383 actions/imsettings.php:355
msgid "That is the wrong IM address."
msgstr "to je wopaÄna IM-adresa."
@@ -738,6 +1123,11 @@ msgstr "Adresa bu wotstronjena."
msgid "No incoming email address."
msgstr "Žana adresa za dochadźace e-mejle."
+#: actions/emailsettings.php:456 actions/emailsettings.php:478
+#: actions/smssettings.php:528 actions/smssettings.php:552
+msgid "Couldn't update user record."
+msgstr ""
+
#: actions/emailsettings.php:459 actions/smssettings.php:531
msgid "Incoming email address removed."
msgstr "Adresa za dochadźaće e-mejle wotstronjena."
@@ -756,10 +1146,61 @@ msgstr "Woblubowane zdźělenki"
msgid "Popular notices, page %d"
msgstr "Woblubowane zdźělenki, strona %d"
+#: actions/favorited.php:79
+msgid "The most popular notices on the site right now."
+msgstr ""
+
+#: actions/favorited.php:150
+msgid "Favorite notices appear on this page but no one has favorited one yet."
+msgstr ""
+
+#: actions/favorited.php:153
+msgid ""
+"Be the first to add a notice to your favorites by clicking the fave button "
+"next to any notice you like."
+msgstr ""
+
+#: actions/favorited.php:156
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to add a "
+"notice to your favorites!"
+msgstr ""
+
+#: actions/favoritesrss.php:111 actions/showfavorites.php:77
+#: lib/personalgroupnav.php:115
+#, php-format
+msgid "%s's favorite notices"
+msgstr ""
+
+#: actions/favoritesrss.php:115
+#, php-format
+msgid "Updates favored by %1$s on %2$s!"
+msgstr ""
+
#: actions/favor.php:79
msgid "This notice is already a favorite!"
msgstr "Tuta zdźělenka je hižo faworit!"
+#: actions/favor.php:92 lib/disfavorform.php:140
+msgid "Disfavor favorite"
+msgstr ""
+
+#: actions/featured.php:69 lib/featureduserssection.php:87
+#: lib/publicgroupnav.php:89
+msgid "Featured users"
+msgstr ""
+
+#: actions/featured.php:71
+#, php-format
+msgid "Featured users, page %d"
+msgstr ""
+
+#: actions/featured.php:99
+#, php-format
+msgid "A selection of some of the great users on %s"
+msgstr ""
+
#: actions/file.php:34
msgid "No notice id"
msgstr "Žadyn ID zdźělenki"
@@ -780,10 +1221,34 @@ msgstr "Žane nahrate přiwěški"
msgid "Not expecting this response!"
msgstr "NjewoÄakowana wotmoÅ‚wa!"
-#: actions/finishremotesubscribe.php:106
+#: actions/finishremotesubscribe.php:80
+msgid "User being listened to does not exist."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
+msgid "You can use the local subscription!"
+msgstr ""
+
+#: actions/finishremotesubscribe.php:99
+msgid "That user has blocked you from subscribing."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:110
msgid "You are not authorized."
msgstr "Njejsy awtorizowany."
+#: actions/finishremotesubscribe.php:113
+msgid "Could not convert request token to access token."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:118
+msgid "Remote service uses unknown version of OMB protocol."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
+msgid "Error updating remote profile"
+msgstr ""
+
#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
#: actions/groupunblock.php:86 actions/leavegroup.php:83
#: actions/makeadmin.php:86 lib/command.php:212 lib/command.php:263
@@ -831,6 +1296,14 @@ msgstr "Wužiwar njeje ÄÅ‚on skupiny."
msgid "Block user from group"
msgstr "Wužiwarja za skupinu blokować"
+#: actions/groupblock.php:162
+#, php-format
+msgid ""
+"Are you sure you want to block user \"%s\" from the group \"%s\"? They will "
+"be removed from the group, unable to post, and unable to subscribe to the "
+"group in the future."
+msgstr ""
+
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
msgstr "Tutoho wužiwarja za tutu skupinu blokować"
@@ -839,6 +1312,10 @@ msgstr "Tutoho wužiwarja za tutu skupinu blokować"
msgid "Block this user from this group"
msgstr "Tutoho wužiwarja za tutu skupinu blokować"
+#: actions/groupblock.php:196
+msgid "Database error blocking user from group."
+msgstr ""
+
#: actions/groupbyid.php:74
msgid "No ID"
msgstr "Žadyn ID"
@@ -851,7 +1328,24 @@ msgstr "Dyrbiš přizjewjeny być, zo by skupinu wobdźěłał."
msgid "Group design"
msgstr "Skupinski design"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:152
+msgid ""
+"Customize the way your group looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
+msgid "Couldn't update your design."
+msgstr ""
+
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
+#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
+#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
+msgid "Unable to save your design settings!"
+msgstr ""
+
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Designowe nastajenja składowane."
@@ -861,13 +1355,34 @@ msgstr "Skupinske logo"
#: actions/grouplogo.php:150
#, php-format
-msgid "You can upload a logo image for your group. The maximum file size is %s."
-msgstr "Móžeš logowy wobraz za swoju skupinu nahrać. Maksimalna datajowa wulkosć je %s."
+msgid ""
+"You can upload a logo image for your group. The maximum file size is %s."
+msgstr ""
+"Móžeš logowy wobraz za swoju skupinu nahrać. Maksimalna datajowa wulkosć je %"
+"s."
+
+#: actions/grouplogo.php:362
+msgid "Pick a square area of the image to be the logo."
+msgstr ""
#: actions/grouplogo.php:396
msgid "Logo updated."
msgstr "Logo zaktualizowane."
+#: actions/grouplogo.php:398
+msgid "Failed updating logo."
+msgstr ""
+
+#: actions/groupmembers.php:93 lib/groupnav.php:92
+#, php-format
+msgid "%s group members"
+msgstr ""
+
+#: actions/groupmembers.php:96
+#, php-format
+msgid "%s group members, page %d"
+msgstr ""
+
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
msgstr "Lisćina wužiwarjow w tutej skupinje."
@@ -880,10 +1395,30 @@ msgstr "Administrator"
msgid "Block"
msgstr "Blokować"
+#: actions/groupmembers.php:441
+msgid "Make user an admin of the group"
+msgstr ""
+
+#: actions/groupmembers.php:473
+msgid "Make Admin"
+msgstr ""
+
#: actions/groupmembers.php:473
msgid "Make this user an admin"
msgstr "Tutoho wužiwarja k administratorej Äinić"
+#: actions/grouprss.php:133
+#, php-format
+msgid "Updates from members of %1$s on %2$s!"
+msgstr ""
+
+#: actions/groupsearch.php:52
+#, php-format
+msgid ""
+"Search for groups on %%site.name%% by their name, location, or description. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
#: actions/groupsearch.php:58
msgid "Group search"
msgstr "Skupinske pytanje"
@@ -893,8 +1428,22 @@ msgstr "Skupinske pytanje"
msgid "No results."
msgstr "Žane wuslědki."
-#: actions/groups.php:62 lib/profileaction.php:220 lib/publicgroupnav.php:81
-#: lib/searchgroupnav.php:84 lib/subgroupnav.php:98
+#: actions/groupsearch.php:82
+#, php-format
+msgid ""
+"If you can't find the group you're looking for, you can [create it](%%action."
+"newgroup%%) yourself."
+msgstr ""
+
+#: actions/groupsearch.php:85
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and [create the group](%%"
+"action.newgroup%%) yourself!"
+msgstr ""
+
+#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Skupiny"
@@ -903,26 +1452,93 @@ msgstr "Skupiny"
msgid "Groups, page %d"
msgstr "Skupiny, strona %d"
+#: actions/groups.php:90
+#, php-format
+msgid ""
+"%%%%site.name%%%% groups let you find and talk with people of similar "
+"interests. After you join a group you can send messages to all other members "
+"using the syntax \"!groupname\". Don't see a group you like? Try [searching "
+"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
+"%%%%)"
+msgstr ""
+
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
msgstr "Nowu skupinu wutworić"
+#: actions/groupunblock.php:91
+msgid "Only an admin can unblock group members."
+msgstr ""
+
+#: actions/groupunblock.php:95
+msgid "User is not blocked from group."
+msgstr ""
+
+#: actions/groupunblock.php:128 actions/unblock.php:77
+msgid "Error removing the block."
+msgstr ""
+
#: actions/imsettings.php:59
msgid "IM Settings"
msgstr "IM-nastajenja"
+#: actions/imsettings.php:70
+#, php-format
+msgid ""
+"You can send and receive notices through Jabber/GTalk [instant messages](%%"
+"doc.im%%). Configure your address and settings below."
+msgstr ""
+
#: actions/imsettings.php:89
msgid "IM is not available."
msgstr "IM k dispoziciji njesteji."
+#: actions/imsettings.php:106
+msgid "Current confirmed Jabber/GTalk address."
+msgstr ""
+
+#: actions/imsettings.php:114
+#, php-format
+msgid ""
+"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
+"message with further instructions. (Did you add %s to your buddy list?)"
+msgstr ""
+
#: actions/imsettings.php:124
msgid "IM Address"
msgstr "IM-adresa"
+#: actions/imsettings.php:126
+#, php-format
+msgid ""
+"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
+"add %s to your buddy list in your IM client or on GTalk."
+msgstr ""
+
+#: actions/imsettings.php:143
+msgid "Send me notices through Jabber/GTalk."
+msgstr ""
+
+#: actions/imsettings.php:148
+msgid "Post a notice when my Jabber/GTalk status changes."
+msgstr ""
+
+#: actions/imsettings.php:153
+msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
+msgstr ""
+
+#: actions/imsettings.php:159
+msgid "Publish a MicroID for my Jabber/GTalk address."
+msgstr ""
+
#: actions/imsettings.php:285
msgid "No Jabber ID."
msgstr "Žadyn ID Jabber."
+#: actions/imsettings.php:292
+msgid "Cannot normalize that Jabber ID"
+msgstr ""
+
#: actions/imsettings.php:296
msgid "Not a valid Jabber ID"
msgstr "Njepłaćiwy ID Jabber"
@@ -931,14 +1547,44 @@ msgstr "Njepłaćiwy ID Jabber"
msgid "That is already your Jabber ID."
msgstr "To je hižo twój ID Jabber."
+#: actions/imsettings.php:302
+msgid "Jabber ID already belongs to another user."
+msgstr ""
+
+#: actions/imsettings.php:327
+#, php-format
+msgid ""
+"A confirmation code was sent to the IM address you added. You must approve %"
+"s for sending messages to you."
+msgstr ""
+
#: actions/imsettings.php:387
msgid "That is not your Jabber ID."
msgstr "To njeje twój ID Jabber."
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %s - page %d"
+msgstr ""
+
+#: actions/inbox.php:62
+#, php-format
+msgid "Inbox for %s"
+msgstr ""
+
+#: actions/inbox.php:115
+msgid "This is your inbox, which lists your incoming private messages."
+msgstr ""
+
#: actions/invite.php:39
msgid "Invites have been disabled."
msgstr "Přeprošenja buchu znjemóžnjene."
+#: actions/invite.php:41
+#, php-format
+msgid "You must be logged in to invite other users to use %s"
+msgstr ""
+
#: actions/invite.php:72
#, php-format
msgid "Invalid email address: %s"
@@ -961,9 +1607,27 @@ msgstr "Sy tutych wužiwarjow hižo abonował:"
msgid "%s (%s)"
msgstr "%s (%s)"
+#: actions/invite.php:136
+msgid ""
+"These people are already users and you were automatically subscribed to them:"
+msgstr ""
+
+#: actions/invite.php:144
+msgid "Invitation(s) sent to the following people:"
+msgstr ""
+
+#: actions/invite.php:150
+msgid ""
+"You will be notified when your invitees accept the invitation and register "
+"on the site. Thanks for growing the community!"
+msgstr ""
+
#: actions/invite.php:162
-msgid "Use this form to invite your friends and colleagues to use this service."
-msgstr "Wužij tutón formular, zo by swojich přećelow a kolegow přeprosył, zo bychu tutu słužbu wužiwali."
+msgid ""
+"Use this form to invite your friends and colleagues to use this service."
+msgstr ""
+"Wužij tutón formular, zo by swojich přećelow a kolegow přeprosył, zo bychu "
+"tutu słužbu wužiwali."
#: actions/invite.php:187
msgid "Email addresses"
@@ -981,10 +1645,64 @@ msgstr "Wosobinska powěsć"
msgid "Optionally add a personal message to the invitation."
msgstr "Wosobinsku powěsć po dobrozdaću přeprošenju přidać."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Pósłać"
+#: actions/invite.php:226
+#, php-format
+msgid "%1$s has invited you to join them on %2$s"
+msgstr ""
+
+#: actions/invite.php:228
+#, php-format
+msgid ""
+"%1$s has invited you to join them on %2$s (%3$s).\n"
+"\n"
+"%2$s is a micro-blogging service that lets you keep up-to-date with people "
+"you know and people who interest you.\n"
+"\n"
+"You can also share news about yourself, your thoughts, or your life online "
+"with people who know about you. It's also great for meeting new people who "
+"share your interests.\n"
+"\n"
+"%1$s said:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see %1$s's profile page on %2$s here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"If you'd like to try the service, click on the link below to accept the "
+"invitation.\n"
+"\n"
+"%6$s\n"
+"\n"
+"If not, you can ignore this message. Thanks for your patience and your "
+"time.\n"
+"\n"
+"Sincerely, %2$s\n"
+msgstr ""
+
+#: actions/joingroup.php:60
+msgid "You must be logged in to join a group."
+msgstr ""
+
+#: actions/joingroup.php:90 lib/command.php:217
+msgid "You are already a member of that group"
+msgstr ""
+
+#: actions/joingroup.php:128 lib/command.php:234
+#, php-format
+msgid "Could not join user %s to group %s"
+msgstr ""
+
+#: actions/joingroup.php:135 lib/command.php:239
+#, php-format
+msgid "%s joined group %s"
+msgstr ""
+
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wopušćił."
@@ -993,46 +1711,81 @@ msgstr "Dyrbiš přizjewjeny być, zo by skupinu wopušćił."
msgid "You are not a member of that group."
msgstr "Njejsy ÄÅ‚on teje skupiny."
-#: actions/login.php:79 actions/register.php:137
+#: actions/leavegroup.php:119 lib/command.php:278
+msgid "Could not find membership record."
+msgstr ""
+
+#: actions/leavegroup.php:127 lib/command.php:284
+#, php-format
+msgid "Could not remove user %s to group %s"
+msgstr ""
+
+#: actions/leavegroup.php:134 lib/command.php:289
+#, php-format
+msgid "%s left group %s"
+msgstr ""
+
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Hižo přizjewjeny."
-#: actions/login.php:143
+#: actions/login.php:113 actions/login.php:123
+msgid "Invalid or expired token."
+msgstr ""
+
+#: actions/login.php:146
msgid "Incorrect username or password."
msgstr "WopaÄne wužiwarske mjeno abo hesÅ‚o."
-#: actions/login.php:149
+#: actions/login.php:152
msgid "Error setting user. You are probably not authorized."
msgstr "Zmylk při nastajenju wužiwarja. Snano njejsy awtorizowany."
-#: actions/login.php:204 actions/login.php:257 lib/action.php:458
+#: actions/login.php:207 actions/login.php:260 lib/action.php:458
#: lib/logingroupnav.php:79
msgid "Login"
msgstr "Přizjewić"
-#: actions/login.php:243
+#: actions/login.php:246
msgid "Login to site"
msgstr "Při sydle přizjewić"
-#: actions/login.php:246 actions/profilesettings.php:106
+#: actions/login.php:249 actions/profilesettings.php:106
#: actions/register.php:423 actions/showgroup.php:236 actions/tagother.php:94
#: lib/groupeditform.php:152 lib/userprofile.php:131
msgid "Nickname"
msgstr "Přimjeno"
-#: actions/login.php:249 actions/register.php:428
+#: actions/login.php:252 actions/register.php:428
#: lib/accountsettingsaction.php:116
msgid "Password"
msgstr "Hesło"
-#: actions/login.php:252 actions/register.php:477
+#: actions/login.php:255 actions/register.php:477
msgid "Remember me"
msgstr "Składować"
-#: actions/login.php:263
+#: actions/login.php:256 actions/register.php:479
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#: actions/login.php:266
msgid "Lost or forgotten password?"
msgstr "Hesło zhubjene abo zabyte?"
+#: actions/login.php:285
+msgid ""
+"For security reasons, please re-enter your user name and password before "
+"changing your settings."
+msgstr ""
+
+#: actions/login.php:289
+#, php-format
+msgid ""
+"Login with your username and password. Don't have a username yet? [Register]"
+"(%%action.register%%) a new account."
+msgstr ""
+
#: actions/makeadmin.php:91
msgid "Only an admin can make another user an admin."
msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić."
@@ -1042,6 +1795,16 @@ msgstr "Jenož administrator móže druheho wužiwarja k administratorej Äinić
msgid "%s is already an admin for group \"%s\"."
msgstr "%s je hižo administrator za skupinu \"%s\"."
+#: actions/makeadmin.php:132
+#, php-format
+msgid "Can't get membership record for %s in group %s"
+msgstr ""
+
+#: actions/makeadmin.php:145
+#, php-format
+msgid "Can't make %s an admin for group %s"
+msgstr ""
+
#: actions/microsummary.php:69
msgid "No current status"
msgstr "Žadyn aktualny status"
@@ -1071,10 +1834,20 @@ msgstr "Žadyn wobsah!"
msgid "No recipient specified."
msgstr "Žadyn přijimowar podaty."
+#: actions/newmessage.php:164 lib/command.php:370
+msgid ""
+"Don't send a message to yourself; just say it to yourself quietly instead."
+msgstr ""
+
#: actions/newmessage.php:181
msgid "Message sent"
msgstr "Powěsć pósłana"
+#: actions/newmessage.php:185 lib/command.php:375
+#, php-format
+msgid "Direct message to %s sent"
+msgstr ""
+
#: actions/newmessage.php:210 actions/newnotice.php:240 lib/channel.php:170
msgid "Ajax Error"
msgstr "Zmylk Ajax"
@@ -1087,20 +1860,78 @@ msgstr "Nowa zdźělenka"
msgid "Notice posted"
msgstr "Zdźělenka wotpósłana"
+#: actions/noticesearch.php:68
+#, php-format
+msgid ""
+"Search for notices on %%site.name%% by their contents. Separate search terms "
+"by spaces; they must be 3 characters or more."
+msgstr ""
+
#: actions/noticesearch.php:78
msgid "Text search"
msgstr "Tekstowe pytanje"
+#: actions/noticesearch.php:91
+#, php-format
+msgid "Search results for \"%s\" on %s"
+msgstr ""
+
+#: actions/noticesearch.php:121
+#, php-format
+msgid ""
+"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearch.php:124
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and be the first to "
+"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearchrss.php:96
+#, php-format
+msgid "Updates with \"%s\""
+msgstr ""
+
+#: actions/noticesearchrss.php:98
+#, php-format
+msgid "Updates matching search term \"%1$s\" on %2$s!"
+msgstr ""
+
+#: actions/nudge.php:85
+msgid ""
+"This user doesn't allow nudges or hasn't confirmed or set his email yet."
+msgstr ""
+
+#: actions/nudge.php:94
+msgid "Nudge sent"
+msgstr ""
+
+#: actions/nudge.php:97
+msgid "Nudge sent!"
+msgstr ""
+
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
msgstr "Zdźělenka nima profil"
+#: actions/oembed.php:86 actions/shownotice.php:180
+#, php-format
+msgid "%1$s's status on %2$s"
+msgstr ""
+
+#: actions/oembed.php:157
+msgid "content type "
+msgstr ""
+
#: actions/oembed.php:160
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Njeje podpěrany datowy format."
@@ -1124,6 +1955,40 @@ msgstr "Wšelake druhe opcije zrjadować."
msgid " (free service)"
msgstr " (swobodna słužba)"
+#: actions/othersettings.php:116
+msgid "Shorten URLs with"
+msgstr ""
+
+#: actions/othersettings.php:117
+msgid "Automatic shortening service to use."
+msgstr ""
+
+#: actions/othersettings.php:122
+msgid "View profile designs"
+msgstr ""
+
+#: actions/othersettings.php:123
+msgid "Show or hide profile designs."
+msgstr ""
+
+#: actions/othersettings.php:153
+msgid "URL shortening service is too long (max 50 chars)."
+msgstr ""
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %s - page %d"
+msgstr ""
+
+#: actions/outbox.php:61
+#, php-format
+msgid "Outbox for %s"
+msgstr ""
+
+#: actions/outbox.php:116
+msgid "This is your outbox, which lists private messages you have sent."
+msgstr ""
+
#: actions/passwordsettings.php:58
msgid "Change password"
msgstr "Hesło změnić"
@@ -1153,6 +2018,10 @@ msgstr "6 abo wjace znamješkow"
msgid "Confirm"
msgstr "Wobkrućić"
+#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
+msgid "Same as password above"
+msgstr ""
+
#: actions/passwordsettings.php:117
msgid "Change"
msgstr "Změnić"
@@ -1169,6 +2038,14 @@ msgstr "Hesle so njekryjetej."
msgid "Incorrect old password"
msgstr "WopaÄne stare hesÅ‚o"
+#: actions/passwordsettings.php:181
+msgid "Error saving user; invalid."
+msgstr ""
+
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+msgid "Can't save new password."
+msgstr ""
+
#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
msgid "Password saved."
msgstr "Hesło składowane."
@@ -1181,6 +2058,26 @@ msgstr "Šćežki"
msgid "Path and server settings for this StatusNet site."
msgstr "Šćežka a serwerowe nastajenja za tute sydło StatusNet."
+#: actions/pathsadminpanel.php:140
+#, php-format
+msgid "Theme directory not readable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:146
+#, php-format
+msgid "Avatar directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:152
+#, php-format
+msgid "Background directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:160
+#, php-format
+msgid "Locales directory not readable: %s"
+msgstr ""
+
#: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:299
msgid "Site"
@@ -1254,22 +2151,53 @@ msgstr "Pozadkowy zapis"
msgid "Save paths"
msgstr "Šćežki składować"
+#: actions/peoplesearch.php:52
+#, php-format
+msgid ""
+"Search for people on %%site.name%% by their name, location, or interests. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
#: actions/peoplesearch.php:58
msgid "People search"
msgstr "Za ludźimi pytać"
+#: actions/peopletag.php:70
+#, php-format
+msgid "Not a valid people tag: %s"
+msgstr ""
+
+#: actions/peopletag.php:144
+#, php-format
+msgid "Users self-tagged with %s - page %d"
+msgstr ""
+
#: actions/postnotice.php:84
msgid "Invalid notice content"
msgstr "Njepłaćiwy wobsah zdźělenki"
+#: actions/postnotice.php:90
+#, php-format
+msgid "Notice license ‘%s’ is not compatible with site license ‘%s’."
+msgstr ""
+
#: actions/profilesettings.php:60
msgid "Profile settings"
msgstr "Profilowe nastajenja"
+#: actions/profilesettings.php:71
+msgid ""
+"You can update your personal profile info here so people know more about you."
+msgstr ""
+
#: actions/profilesettings.php:99
msgid "Profile information"
msgstr "Profilowe informacije"
+#: actions/profilesettings.php:108 lib/groupeditform.php:154
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
#: actions/profilesettings.php:111 actions/register.php:447
#: actions/showgroup.php:247 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
@@ -1281,6 +2209,19 @@ msgstr "Dospołne mjeno"
msgid "Homepage"
msgstr "Startowa strona"
+#: actions/profilesettings.php:117 actions/register.php:454
+msgid "URL of your homepage, blog, or profile on another site"
+msgstr ""
+
+#: actions/profilesettings.php:122 actions/register.php:460
+#, php-format
+msgid "Describe yourself and your interests in %d chars"
+msgstr ""
+
+#: actions/profilesettings.php:125 actions/register.php:463
+msgid "Describe yourself and your interests"
+msgstr ""
+
#: actions/profilesettings.php:127 actions/register.php:465
msgid "Bio"
msgstr "Biografija"
@@ -1292,6 +2233,21 @@ msgstr "Biografija"
msgid "Location"
msgstr "Městno"
+#: actions/profilesettings.php:134 actions/register.php:472
+msgid "Where you are, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: actions/profilesettings.php:138 actions/tagother.php:149
+#: actions/tagother.php:209 lib/subscriptionlist.php:106
+#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+msgid "Tags"
+msgstr ""
+
+#: actions/profilesettings.php:140
+msgid ""
+"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
+msgstr ""
+
#: actions/profilesettings.php:144 actions/siteadminpanel.php:307
msgid "Language"
msgstr "RÄ›Ä"
@@ -1304,6 +2260,15 @@ msgstr "Preferowana rÄ›Ä"
msgid "Timezone"
msgstr "ÄŒasowe pasmo"
+#: actions/profilesettings.php:155
+msgid "What timezone are you normally in?"
+msgstr ""
+
+#: actions/profilesettings.php:160
+msgid ""
+"Automatically subscribe to whoever subscribes to me (best for non-humans)"
+msgstr ""
+
#: actions/profilesettings.php:221 actions/register.php:223
#, php-format
msgid "Bio is too long (max %d chars)."
@@ -1317,22 +2282,186 @@ msgstr "ÄŒasowe pasmo njeje wubrane."
msgid "Language is too long (max 50 chars)."
msgstr "Mjeno rÄ›Äe je pÅ™edoÅ‚he (maks. 50 znamjeÅ¡kow)."
+#: actions/profilesettings.php:246 actions/tagother.php:178
+#, php-format
+msgid "Invalid tag: \"%s\""
+msgstr ""
+
+#: actions/profilesettings.php:295
+msgid "Couldn't update user for autosubscribe."
+msgstr ""
+
+#: actions/profilesettings.php:328
+msgid "Couldn't save profile."
+msgstr ""
+
+#: actions/profilesettings.php:336
+msgid "Couldn't save tags."
+msgstr ""
+
#: actions/profilesettings.php:344 lib/adminpanelaction.php:126
msgid "Settings saved."
msgstr "Nastajenja składowane."
+#: actions/public.php:83
+#, php-format
+msgid "Beyond the page limit (%s)"
+msgstr ""
+
+#: actions/public.php:92
+msgid "Could not retrieve public stream."
+msgstr ""
+
+#: actions/public.php:129
+#, php-format
+msgid "Public timeline, page %d"
+msgstr ""
+
+#: actions/public.php:131 lib/publicgroupnav.php:79
+msgid "Public timeline"
+msgstr ""
+
+#: actions/public.php:151
+msgid "Public Stream Feed (RSS 1.0)"
+msgstr ""
+
+#: actions/public.php:155
+msgid "Public Stream Feed (RSS 2.0)"
+msgstr ""
+
+#: actions/public.php:159
+msgid "Public Stream Feed (Atom)"
+msgstr ""
+
+#: actions/public.php:179
+#, php-format
+msgid ""
+"This is the public timeline for %%site.name%% but no one has posted anything "
+"yet."
+msgstr ""
+
+#: actions/public.php:182
+msgid "Be the first to post!"
+msgstr ""
+
+#: actions/public.php:186
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post!"
+msgstr ""
+
+#: actions/public.php:233
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool. [Join now](%%action.register%%) to share notices about yourself with "
+"friends, family, and colleagues! ([Read more](%%doc.help%%))"
+msgstr ""
+
+#: actions/public.php:238
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool."
+msgstr ""
+
+#: actions/publictagcloud.php:57
+msgid "Public tag cloud"
+msgstr ""
+
+#: actions/publictagcloud.php:63
+#, php-format
+msgid "These are most popular recent tags on %s "
+msgstr ""
+
+#: actions/publictagcloud.php:69
+#, php-format
+msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
+msgstr ""
+
+#: actions/publictagcloud.php:72
+msgid "Be the first to post one!"
+msgstr ""
+
+#: actions/publictagcloud.php:75
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post "
+"one!"
+msgstr ""
+
+#: actions/publictagcloud.php:135
+msgid "Tag cloud"
+msgstr ""
+
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
msgstr "Sy hižo přizjewjeny!"
+#: actions/recoverpassword.php:62
+msgid "No such recovery code."
+msgstr ""
+
+#: actions/recoverpassword.php:66
+msgid "Not a recovery code."
+msgstr ""
+
+#: actions/recoverpassword.php:73
+msgid "Recovery code for unknown user."
+msgstr ""
+
+#: actions/recoverpassword.php:86
+msgid "Error with confirmation code."
+msgstr ""
+
+#: actions/recoverpassword.php:97
+msgid "This confirmation code is too old. Please start again."
+msgstr ""
+
+#: actions/recoverpassword.php:111
+msgid "Could not update user with confirmed email address."
+msgstr ""
+
+#: actions/recoverpassword.php:152
+msgid ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the email address you have stored in your account."
+msgstr ""
+
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
msgstr "Sy so identifikował. Zapodaj deleka nowe hesło. "
+#: actions/recoverpassword.php:188
+msgid "Password recovery"
+msgstr ""
+
+#: actions/recoverpassword.php:191
+msgid "Nickname or email address"
+msgstr ""
+
+#: actions/recoverpassword.php:193
+msgid "Your nickname on this server, or your registered email address."
+msgstr ""
+
+#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
+msgid "Recover"
+msgstr ""
+
#: actions/recoverpassword.php:208
msgid "Reset password"
msgstr "Hesło wróćo stajić"
+#: actions/recoverpassword.php:209
+msgid "Recover password"
+msgstr ""
+
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+msgid "Password recovery requested"
+msgstr ""
+
#: actions/recoverpassword.php:213
msgid "Unknown action"
msgstr "Njeznata akcija"
@@ -1351,16 +2480,43 @@ msgstr "Zapodaj přimjeno abo e-mejlowu adresu."
#: actions/recoverpassword.php:272
msgid "No user with that email address or username."
-msgstr "Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje."
+msgstr ""
+"Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje."
#: actions/recoverpassword.php:287
msgid "No registered email address for that user."
msgstr "Wužiwar nima žanu zregistrowanu e-mejlowu adresu."
+#: actions/recoverpassword.php:301
+msgid "Error saving address confirmation."
+msgstr ""
+
+#: actions/recoverpassword.php:325
+msgid ""
+"Instructions for recovering your password have been sent to the email "
+"address registered to your account."
+msgstr ""
+
+#: actions/recoverpassword.php:344
+msgid "Unexpected password reset."
+msgstr ""
+
#: actions/recoverpassword.php:352
msgid "Password must be 6 chars or more."
msgstr "Hesło dyrbi 6 znamješkow abo wjace měć."
+#: actions/recoverpassword.php:356
+msgid "Password and confirmation do not match."
+msgstr ""
+
+#: actions/recoverpassword.php:375 actions/register.php:248
+msgid "Error setting user."
+msgstr ""
+
+#: actions/recoverpassword.php:382
+msgid "New password successfully saved. You are now logged in."
+msgstr ""
+
#: actions/register.php:85 actions/register.php:189 actions/register.php:404
msgid "Sorry, only invited people can register."
msgstr "Wodaj, jenož přeprošeni ludźo móžeja so registrować."
@@ -1382,6 +2538,10 @@ msgstr "Registrować"
msgid "Registration not allowed."
msgstr "Registracija njedowolena."
+#: actions/register.php:198
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
#: actions/register.php:201
msgid "Not a valid email address."
msgstr "Njepłaćiwa e-mejlowa adresa."
@@ -1394,6 +2554,16 @@ msgstr "E-mejlowa adresa hižo eksistuje."
msgid "Invalid username or password."
msgstr "Njepłaćiwe wužiwarske mjeno abo hesło."
+#: actions/register.php:342
+msgid ""
+"With this form you can create a new account. You can then post notices and "
+"link up to friends and colleagues. "
+msgstr ""
+
+#: actions/register.php:424
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
+msgstr ""
+
#: actions/register.php:429
msgid "6 or more characters. Required."
msgstr "6 abo wjace znamješkow. Trěbne."
@@ -1407,6 +2577,10 @@ msgstr "Jenake kaž hesło horjeka. Trěbne."
msgid "Email"
msgstr "E-mejl"
+#: actions/register.php:438 actions/register.php:442
+msgid "Used only for updates, announcements, and password recovery"
+msgstr ""
+
#: actions/register.php:449
msgid "Longer name, preferably your \"real\" name"
msgstr "Dlěše mjeno, wosebje twoje \"woprawdźite\" mjeno"
@@ -1419,14 +2593,69 @@ msgstr "Mój tekst a moje dataje steja k dispoziciji pod "
msgid "Creative Commons Attribution 3.0"
msgstr "Creative Commons Attribution 3.0"
+#: actions/register.php:496
+msgid ""
+" except this private data: password, email address, IM address, and phone "
+"number."
+msgstr ""
+
+#: actions/register.php:537
+#, php-format
+msgid ""
+"Congratulations, %s! And welcome to %%%%site.name%%%%. From here, you may "
+"want to...\n"
+"\n"
+"* Go to [your profile](%s) and post your first message.\n"
+"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
+"notices through instant messages.\n"
+"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
+"share your interests. \n"
+"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
+"others more about you. \n"
+"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
+"missed. \n"
+"\n"
+"Thanks for signing up and we hope you enjoy using this service."
+msgstr ""
+
+#: actions/register.php:561
+msgid ""
+"(You should receive a message by email momentarily, with instructions on how "
+"to confirm your email address.)"
+msgstr ""
+
+#: actions/remotesubscribe.php:98
+#, php-format
+msgid ""
+"To subscribe, you can [login](%%action.login%%), or [register](%%action."
+"register%%) a new account. If you already have an account on a [compatible "
+"microblogging site](%%doc.openmublog%%), enter your profile URL below."
+msgstr ""
+
+#: actions/remotesubscribe.php:112
+msgid "Remote subscribe"
+msgstr ""
+
+#: actions/remotesubscribe.php:124
+msgid "Subscribe to a remote user"
+msgstr ""
+
#: actions/remotesubscribe.php:129
msgid "User nickname"
msgstr "Wužiwarske přimjeno"
+#: actions/remotesubscribe.php:130
+msgid "Nickname of the user you want to follow"
+msgstr ""
+
#: actions/remotesubscribe.php:133
msgid "Profile URL"
msgstr "URL profila"
+#: actions/remotesubscribe.php:134
+msgid "URL of your profile on another compatible microblogging service"
+msgstr ""
+
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
#: lib/userprofile.php:365
msgid "Subscribe"
@@ -1436,6 +2665,137 @@ msgstr "Abonować"
msgid "Invalid profile URL (bad format)"
msgstr "NjepÅ‚aćiwy profilowy URL (wopaÄny format)"
+#: actions/remotesubscribe.php:168
+msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
+msgstr ""
+
+#: actions/remotesubscribe.php:176
+msgid "That’s a local profile! Login to subscribe."
+msgstr ""
+
+#: actions/remotesubscribe.php:183
+msgid "Couldn’t get a request token."
+msgstr ""
+
+#: actions/replies.php:125 actions/repliesrss.php:68
+#: lib/personalgroupnav.php:105
+#, php-format
+msgid "Replies to %s"
+msgstr ""
+
+#: actions/replies.php:127
+#, php-format
+msgid "Replies to %s, page %d"
+msgstr ""
+
+#: actions/replies.php:144
+#, php-format
+msgid "Replies feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/replies.php:151
+#, php-format
+msgid "Replies feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/replies.php:158
+#, php-format
+msgid "Replies feed for %s (Atom)"
+msgstr ""
+
+#: actions/replies.php:198
+#, php-format
+msgid ""
+"This is the timeline showing replies to %s but %s hasn't received a notice "
+"to his attention yet."
+msgstr ""
+
+#: actions/replies.php:203
+#, php-format
+msgid ""
+"You can engage other users in a conversation, subscribe to more people or "
+"[join groups](%%action.groups%%)."
+msgstr ""
+
+#: actions/replies.php:205
+#, php-format
+msgid ""
+"You can try to [nudge %s](../%s) or [post something to his or her attention]"
+"(%%%%action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/repliesrss.php:72
+#, php-format
+msgid "Replies to %1$s on %2$s!"
+msgstr ""
+
+#: actions/sandbox.php:65 actions/unsandbox.php:65
+msgid "You cannot sandbox users on this site."
+msgstr ""
+
+#: actions/sandbox.php:72
+msgid "User is already sandboxed."
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%s's favorite notices, page %d"
+msgstr ""
+
+#: actions/showfavorites.php:132
+msgid "Could not retrieve favorite notices."
+msgstr ""
+
+#: actions/showfavorites.php:170
+#, php-format
+msgid "Feed for favorites of %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showfavorites.php:177
+#, php-format
+msgid "Feed for favorites of %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showfavorites.php:184
+#, php-format
+msgid "Feed for favorites of %s (Atom)"
+msgstr ""
+
+#: actions/showfavorites.php:205
+msgid ""
+"You haven't chosen any favorite notices yet. Click the fave button on "
+"notices you like to bookmark them for later or shed a spotlight on them."
+msgstr ""
+
+#: actions/showfavorites.php:207
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Post something interesting "
+"they would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:211
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:242
+msgid "This is a way to share what you like."
+msgstr ""
+
+#: actions/showgroup.php:82 lib/groupnav.php:86
+#, php-format
+msgid "%s group"
+msgstr ""
+
+#: actions/showgroup.php:84
+#, php-format
+msgid "%s group, page %d"
+msgstr ""
+
#: actions/showgroup.php:218
msgid "Group profile"
msgstr "Skupinski profil"
@@ -1445,6 +2805,11 @@ msgstr "Skupinski profil"
msgid "URL"
msgstr "URL"
+#: actions/showgroup.php:274 actions/tagother.php:128
+#: actions/userauthorization.php:179 lib/userprofile.php:194
+msgid "Note"
+msgstr ""
+
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasy"
@@ -1453,12 +2818,32 @@ msgstr "Aliasy"
msgid "Group actions"
msgstr "Skupinske akcije"
+#: actions/showgroup.php:328
+#, php-format
+msgid "Notice feed for %s group (RSS 1.0)"
+msgstr ""
+
+#: actions/showgroup.php:334
+#, php-format
+msgid "Notice feed for %s group (RSS 2.0)"
+msgstr ""
+
+#: actions/showgroup.php:340
+#, php-format
+msgid "Notice feed for %s group (Atom)"
+msgstr ""
+
+#: actions/showgroup.php:345
+#, php-format
+msgid "FOAF for %s group"
+msgstr ""
+
#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
msgid "Members"
msgstr "Čłonojo"
#: actions/showgroup.php:386 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:226 lib/section.php:95
+#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
#: lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Žadyn)"
@@ -1467,7 +2852,7 @@ msgstr "(Žadyn)"
msgid "All members"
msgstr "WÅ¡itcy ÄÅ‚onojo"
-#: actions/showgroup.php:429 lib/profileaction.php:173
+#: actions/showgroup.php:429 lib/profileaction.php:174
msgid "Statistics"
msgstr "Statistika"
@@ -1475,6 +2860,25 @@ msgstr "Statistika"
msgid "Created"
msgstr "Wutworjeny"
+#: actions/showgroup.php:448
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showgroup.php:454
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. "
+msgstr ""
+
#: actions/showgroup.php:482
msgid "Admins"
msgstr "Administratorojo"
@@ -1483,20 +2887,147 @@ msgstr "Administratorojo"
msgid "No such message."
msgstr "Powěsć njeeksistuje."
+#: actions/showmessage.php:98
+msgid "Only the sender and recipient may read this message."
+msgstr ""
+
+#: actions/showmessage.php:108
+#, php-format
+msgid "Message to %1$s on %2$s"
+msgstr ""
+
+#: actions/showmessage.php:113
+#, php-format
+msgid "Message from %1$s on %2$s"
+msgstr ""
+
#: actions/shownotice.php:90
msgid "Notice deleted."
msgstr "Zdźělenka zniÄena."
+#: actions/showstream.php:73
+#, php-format
+msgid " tagged %s"
+msgstr ""
+
+#: actions/showstream.php:79
+#, php-format
+msgid "%s, page %d"
+msgstr ""
+
+#: actions/showstream.php:122
+#, php-format
+msgid "Notice feed for %s tagged %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:129
+#, php-format
+msgid "Notice feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:136
+#, php-format
+msgid "Notice feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showstream.php:143
+#, php-format
+msgid "Notice feed for %s (Atom)"
+msgstr ""
+
#: actions/showstream.php:148
#, php-format
msgid "FOAF for %s"
msgstr "FOAF za %s"
+#: actions/showstream.php:191
+#, php-format
+msgid "This is the timeline for %s but %s hasn't posted anything yet."
+msgstr ""
+
+#: actions/showstream.php:196
+msgid ""
+"Seen anything interesting recently? You haven't posted any notices yet, now "
+"would be a good time to start :)"
+msgstr ""
+
+#: actions/showstream.php:198
+#, php-format
+msgid ""
+"You can try to nudge %s or [post something to his or her attention](%%%%"
+"action.newnotice%%%%?status_textarea=%s)."
+msgstr ""
+
+#: actions/showstream.php:234
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
+"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showstream.php:239
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. "
+msgstr ""
+
+#: actions/silence.php:65 actions/unsilence.php:65
+msgid "You cannot silence users on this site."
+msgstr ""
+
+#: actions/silence.php:72
+msgid "User is already silenced."
+msgstr ""
+
+#: actions/siteadminpanel.php:69
+msgid "Basic settings for this StatusNet site."
+msgstr ""
+
+#: actions/siteadminpanel.php:147
+msgid "Site name must have non-zero length."
+msgstr ""
+
+#: actions/siteadminpanel.php:155
+msgid "You must have a valid contact email address"
+msgstr ""
+
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
msgstr "Njeznata rÄ›Ä \"%s\""
+#: actions/siteadminpanel.php:180
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/siteadminpanel.php:186
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/siteadminpanel.php:192
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/siteadminpanel.php:199
+msgid "You must set an SSL server when enabling SSL."
+msgstr ""
+
+#: actions/siteadminpanel.php:204
+msgid "Invalid SSL server. The maximum length is 255 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:210
+msgid "Minimum text limit is 140 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:216
+msgid "Dupe limit must 1 or more seconds."
+msgstr ""
+
#: actions/siteadminpanel.php:266
msgid "General"
msgstr "Powšitkowny"
@@ -1505,6 +3036,30 @@ msgstr "Powšitkowny"
msgid "Site name"
msgstr "Sydłowe mjeno"
+#: actions/siteadminpanel.php:270
+msgid "The name of your site, like \"Yourcompany Microblog\""
+msgstr ""
+
+#: actions/siteadminpanel.php:274
+msgid "Brought by"
+msgstr ""
+
+#: actions/siteadminpanel.php:275
+msgid "Text used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:279
+msgid "Brought by URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:280
+msgid "URL used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:284
+msgid "Contact email address for your site"
+msgstr ""
+
#: actions/siteadminpanel.php:290
msgid "Local"
msgstr "Lokalny"
@@ -1513,6 +3068,10 @@ msgstr "Lokalny"
msgid "Default timezone"
msgstr "Standardne Äasowe pasmo"
+#: actions/siteadminpanel.php:302
+msgid "Default timezone for the site; usually UTC."
+msgstr ""
+
#: actions/siteadminpanel.php:308
msgid "Default site language"
msgstr "Standardna sydÅ‚owa rÄ›Ä"
@@ -1525,6 +3084,18 @@ msgstr "URL"
msgid "Server"
msgstr "Serwer"
+#: actions/siteadminpanel.php:319
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/siteadminpanel.php:323
+msgid "Fancy URLs"
+msgstr ""
+
+#: actions/siteadminpanel.php:325
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
#: actions/siteadminpanel.php:331
msgid "Access"
msgstr "Přistup"
@@ -1533,10 +3104,18 @@ msgstr "Přistup"
msgid "Private"
msgstr "Priwatny"
+#: actions/siteadminpanel.php:336
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
#: actions/siteadminpanel.php:340
msgid "Invite only"
msgstr "Jenož přeprosyć"
+#: actions/siteadminpanel.php:342
+msgid "Make registration invitation only."
+msgstr ""
+
#: actions/siteadminpanel.php:346
msgid "Closed"
msgstr "ZaÄinjeny"
@@ -1545,14 +3124,46 @@ msgstr "ZaÄinjeny"
msgid "Disable new registrations."
msgstr "Nowe registrowanja znjemóžnić."
+#: actions/siteadminpanel.php:354
+msgid "Snapshots"
+msgstr ""
+
+#: actions/siteadminpanel.php:357
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/siteadminpanel.php:358
+msgid "In a scheduled job"
+msgstr ""
+
#: actions/siteadminpanel.php:359 actions/siteadminpanel.php:383
msgid "Never"
msgstr "Ženje"
+#: actions/siteadminpanel.php:360
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/siteadminpanel.php:361
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
#: actions/siteadminpanel.php:366
msgid "Frequency"
msgstr "Frekwenca"
+#: actions/siteadminpanel.php:367
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/siteadminpanel.php:372
+msgid "Report URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:373
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
#: actions/siteadminpanel.php:380
msgid "SSL"
msgstr "SSL"
@@ -1569,10 +3180,18 @@ msgstr "Přeco"
msgid "Use SSL"
msgstr "SSL wužiwać"
+#: actions/siteadminpanel.php:388
+msgid "When to use SSL"
+msgstr ""
+
#: actions/siteadminpanel.php:393
msgid "SSL Server"
msgstr "SSL-serwer"
+#: actions/siteadminpanel.php:394
+msgid "Server to direct SSL requests to"
+msgstr ""
+
#: actions/siteadminpanel.php:400
msgid "Limits"
msgstr "Limity"
@@ -1585,18 +3204,69 @@ msgstr "Tekstowy limit"
msgid "Maximum number of characters for notices."
msgstr "Maksimalna liÄba znamjeÅ¡kow za zdźělenki."
+#: actions/siteadminpanel.php:407
+msgid "Dupe limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:407
+msgid "How long users must wait (in seconds) to post the same thing again."
+msgstr ""
+
#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
msgid "Save site settings"
msgstr "Sydłowe nastajenja składować"
+#: actions/smssettings.php:58
+msgid "SMS Settings"
+msgstr ""
+
+#: actions/smssettings.php:69
+#, php-format
+msgid "You can receive SMS messages through email from %%site.name%%."
+msgstr ""
+
#: actions/smssettings.php:91
msgid "SMS is not available."
msgstr "SMS k dispoziciji njesteji."
+#: actions/smssettings.php:112
+msgid "Current confirmed SMS-enabled phone number."
+msgstr ""
+
+#: actions/smssettings.php:123
+msgid "Awaiting confirmation on this phone number."
+msgstr ""
+
+#: actions/smssettings.php:130
+msgid "Confirmation code"
+msgstr ""
+
+#: actions/smssettings.php:131
+msgid "Enter the code you received on your phone."
+msgstr ""
+
+#: actions/smssettings.php:138
+msgid "SMS Phone number"
+msgstr ""
+
+#: actions/smssettings.php:140
+msgid "Phone number, no punctuation or spaces, with area code"
+msgstr ""
+
+#: actions/smssettings.php:174
+msgid ""
+"Send me notices through SMS; I understand I may incur exorbitant charges "
+"from my carrier."
+msgstr ""
+
#: actions/smssettings.php:306
msgid "No phone number."
msgstr "Žane telefonowe ÄisÅ‚o."
+#: actions/smssettings.php:311
+msgid "No carrier selected."
+msgstr ""
+
#: actions/smssettings.php:318
msgid "That is already your phone number."
msgstr "To je hižo twoje telefonowe ÄisÅ‚o."
@@ -1605,6 +3275,35 @@ msgstr "To je hižo twoje telefonowe ÄisÅ‚o."
msgid "That phone number already belongs to another user."
msgstr "Te telefonowe ÄisÅ‚o hižo druhemu wužiwarjej sÅ‚uÅ¡a."
+#: actions/smssettings.php:347
+msgid ""
+"A confirmation code was sent to the phone number you added. Check your phone "
+"for the code and instructions on how to use it."
+msgstr ""
+
+#: actions/smssettings.php:374
+msgid "That is the wrong confirmation number."
+msgstr ""
+
+#: actions/smssettings.php:405
+msgid "That is not your phone number."
+msgstr ""
+
+#: actions/smssettings.php:465
+msgid "Mobile carrier"
+msgstr ""
+
+#: actions/smssettings.php:469
+msgid "Select a carrier"
+msgstr ""
+
+#: actions/smssettings.php:476
+#, php-format
+msgid ""
+"Mobile carrier for your phone. If you know a carrier that accepts SMS over "
+"email but isn't listed here, send email to let us know at %s."
+msgstr ""
+
#: actions/smssettings.php:498
msgid "No code entered"
msgstr "Žadyn kod zapodaty"
@@ -1613,6 +3312,10 @@ msgstr "Žadyn kod zapodaty"
msgid "You are not subscribed to that profile."
msgstr "Njejsy tón profil abonował."
+#: actions/subedit.php:83
+msgid "Could not save subscription."
+msgstr ""
+
#: actions/subscribe.php:55
msgid "Not a local user."
msgstr "Njeje lokalny wužiwar."
@@ -1631,6 +3334,33 @@ msgstr "%s abonentow"
msgid "%s subscribers, page %d"
msgstr "%s abonentow, strona %d"
+#: actions/subscribers.php:63
+msgid "These are the people who listen to your notices."
+msgstr ""
+
+#: actions/subscribers.php:67
+#, php-format
+msgid "These are the people who listen to %s's notices."
+msgstr ""
+
+#: actions/subscribers.php:108
+msgid ""
+"You have no subscribers. Try subscribing to people you know and they might "
+"return the favor"
+msgstr ""
+
+#: actions/subscribers.php:110
+#, php-format
+msgid "%s has no subscribers. Want to be the first?"
+msgstr ""
+
+#: actions/subscribers.php:114
+#, php-format
+msgid ""
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
+msgstr ""
+
#: actions/subscriptions.php:52
#, php-format
msgid "%s subscriptions"
@@ -1641,6 +3371,30 @@ msgstr "%s abonementow"
msgid "%s subscriptions, page %d"
msgstr "%s abonementow, strona %d"
+#: actions/subscriptions.php:65
+msgid "These are the people whose notices you listen to."
+msgstr ""
+
+#: actions/subscriptions.php:69
+#, php-format
+msgid "These are the people whose notices %s listens to."
+msgstr ""
+
+#: actions/subscriptions.php:121
+#, php-format
+msgid ""
+"You're not listening to anyone's notices right now, try subscribing to "
+"people you know. Try [people search](%%action.peoplesearch%%), look for "
+"members in groups you're interested in and in our [featured users](%%action."
+"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
+"automatically subscribe to people you already follow there."
+msgstr ""
+
+#: actions/subscriptions.php:123 actions/subscriptions.php:127
+#, php-format
+msgid "%s is not listening to anyone."
+msgstr ""
+
#: actions/subscriptions.php:194
msgid "Jabber"
msgstr "Jabber"
@@ -1657,6 +3411,11 @@ msgstr "Njepřizjewjeny"
msgid "No id argument."
msgstr "Žadyn argument ID."
+#: actions/tagother.php:65
+#, php-format
+msgid "Tag %s"
+msgstr ""
+
#: actions/tagother.php:77 lib/userprofile.php:75
msgid "User profile"
msgstr "Wužiwarski profil"
@@ -1665,14 +3424,86 @@ msgstr "Wužiwarski profil"
msgid "Photo"
msgstr "Foto"
+#: actions/tagother.php:141
+msgid "Tag user"
+msgstr ""
+
+#: actions/tagother.php:151
+msgid ""
+"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
+"separated"
+msgstr ""
+
+#: actions/tagother.php:193
+msgid ""
+"You can only tag people you are subscribed to or who are subscribed to you."
+msgstr ""
+
+#: actions/tagother.php:200
+msgid "Could not save tags."
+msgstr ""
+
+#: actions/tagother.php:236
+msgid "Use this form to add tags to your subscribers or subscriptions."
+msgstr ""
+
+#: actions/tag.php:68
+#, php-format
+msgid "Notices tagged with %s, page %d"
+msgstr ""
+
+#: actions/tag.php:86
+#, php-format
+msgid "Notice feed for tag %s (RSS 1.0)"
+msgstr ""
+
+#: actions/tag.php:92
+#, php-format
+msgid "Notice feed for tag %s (RSS 2.0)"
+msgstr ""
+
+#: actions/tag.php:98
+#, php-format
+msgid "Notice feed for tag %s (Atom)"
+msgstr ""
+
+#: actions/tagrss.php:35
+msgid "No such tag."
+msgstr ""
+
+#: actions/twitapitrends.php:87
+msgid "API method under construction."
+msgstr ""
+
#: actions/unblock.php:59
msgid "You haven't blocked that user."
msgstr "Njejsy toho wužiwarja zablokował."
+#: actions/unsandbox.php:72
+msgid "User is not sandboxed."
+msgstr ""
+
+#: actions/unsilence.php:72
+msgid "User is not silenced."
+msgstr ""
+
+#: actions/unsubscribe.php:77
+msgid "No profile id in request."
+msgstr ""
+
+#: actions/unsubscribe.php:84
+msgid "No profile with that id."
+msgstr ""
+
#: actions/unsubscribe.php:98
msgid "Unsubscribed"
msgstr "Wotskazany"
+#: actions/updateprofile.php:62 actions/userauthorization.php:330
+#, php-format
+msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’."
+msgstr ""
+
#: actions/useradminpanel.php:58 lib/adminpanelaction.php:305
#: lib/personalgroupnav.php:115
msgid "User"
@@ -1682,11 +3513,32 @@ msgstr "Wužiwar"
msgid "User settings for this StatusNet site."
msgstr "Wužiwarske nastajenja za sydło StatusNet."
+#: actions/useradminpanel.php:149
+msgid "Invalid bio limit. Must be numeric."
+msgstr ""
+
+#: actions/useradminpanel.php:155
+msgid "Invalid welcome text. Max length is 255 characters."
+msgstr ""
+
+#: actions/useradminpanel.php:165
+#, php-format
+msgid "Invalid default subscripton: '%1$s' is not user."
+msgstr ""
+
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
msgid "Profile"
msgstr "Profil"
+#: actions/useradminpanel.php:222
+msgid "Bio Limit"
+msgstr ""
+
+#: actions/useradminpanel.php:223
+msgid "Maximum length of a profile bio in characters."
+msgstr ""
+
#: actions/useradminpanel.php:231
msgid "New users"
msgstr "Nowi wužiwarjo"
@@ -1703,6 +3555,10 @@ msgstr "Powitanski tekst za nowych wužiwarjow (maks. 255 znamješkow)."
msgid "Default subscription"
msgstr "Standardny abonement"
+#: actions/useradminpanel.php:242
+msgid "Automatically subscribe new users to this user."
+msgstr ""
+
#: actions/useradminpanel.php:251
msgid "Invitations"
msgstr "Přeprošenja"
@@ -1711,6 +3567,10 @@ msgstr "Přeprošenja"
msgid "Invitations enabled"
msgstr "Přeprošenja zmóžnjene"
+#: actions/useradminpanel.php:258
+msgid "Whether to allow users to invite new users."
+msgstr ""
+
#: actions/useradminpanel.php:265
msgid "Sessions"
msgstr "Posedźenja"
@@ -1719,6 +3579,29 @@ msgstr "Posedźenja"
msgid "Handle sessions"
msgstr "Z posedźenjemi wobchadźeć"
+#: actions/useradminpanel.php:272
+msgid "Whether to handle sessions ourselves."
+msgstr ""
+
+#: actions/useradminpanel.php:276
+msgid "Session debugging"
+msgstr ""
+
+#: actions/useradminpanel.php:278
+msgid "Turn on debugging output for sessions."
+msgstr ""
+
+#: actions/userauthorization.php:105
+msgid "Authorize subscription"
+msgstr ""
+
+#: actions/userauthorization.php:110
+msgid ""
+"Please check these details to make sure that you want to subscribe to this "
+"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
+"click “Rejectâ€."
+msgstr ""
+
#: actions/userauthorization.php:188
msgid "License"
msgstr "Licenca"
@@ -1740,31 +3623,722 @@ msgstr "Wotpokazać"
msgid "Reject this subscription"
msgstr "Tutón abonement wotpokazać"
+#: actions/userauthorization.php:225
+msgid "No authorization request!"
+msgstr ""
+
#: actions/userauthorization.php:247
msgid "Subscription authorized"
msgstr "Abonement awtorizowany"
+#: actions/userauthorization.php:249
+msgid ""
+"The subscription has been authorized, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to authorize the "
+"subscription. Your subscription token is:"
+msgstr ""
+
#: actions/userauthorization.php:259
msgid "Subscription rejected"
msgstr "Abonement wotpokazany"
-#: lib/command.php:620
-#, fuzzy
+#: actions/userauthorization.php:261
+msgid ""
+"The subscription has been rejected, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to fully reject the "
+"subscription."
+msgstr ""
+
+#: actions/userauthorization.php:296
+#, php-format
+msgid "Listener URI ‘%s’ not found here"
+msgstr ""
+
+#: actions/userauthorization.php:301
+#, php-format
+msgid "Listenee URI ‘%s’ is too long."
+msgstr ""
+
+#: actions/userauthorization.php:307
+#, php-format
+msgid "Listenee URI ‘%s’ is a local user."
+msgstr ""
+
+#: actions/userauthorization.php:322
+#, php-format
+msgid "Profile URL ‘%s’ is for a local user."
+msgstr ""
+
+#: actions/userauthorization.php:338
+#, php-format
+msgid "Avatar URL ‘%s’ is not valid."
+msgstr ""
+
+#: actions/userauthorization.php:343
+#, php-format
+msgid "Can’t read avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userauthorization.php:348
+#, php-format
+msgid "Wrong image type for avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userbyid.php:70
+msgid "No id."
+msgstr ""
+
+#: actions/userdesignsettings.php:76 lib/designsettings.php:65
+msgid "Profile design"
+msgstr ""
+
+#: actions/userdesignsettings.php:87 lib/designsettings.php:76
+msgid ""
+"Customize the way your profile looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/userdesignsettings.php:282
+msgid "Enjoy your hotdog!"
+msgstr ""
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%s groups, page %d"
+msgstr ""
+
+#: actions/usergroups.php:130
+msgid "Search for more groups"
+msgstr ""
+
+#: actions/usergroups.php:153
+#, php-format
+msgid "%s is not a member of any group."
+msgstr ""
+
+#: actions/usergroups.php:158
+#, php-format
+msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
+msgstr ""
+
+#: classes/File.php:137
+#, php-format
+msgid ""
+"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
+"to upload a smaller version."
+msgstr ""
+
+#: classes/File.php:147
+#, php-format
+msgid "A file this large would exceed your user quota of %d bytes."
+msgstr ""
+
+#: classes/File.php:154
+#, php-format
+msgid "A file this large would exceed your monthly quota of %d bytes."
+msgstr ""
+
+#: classes/Message.php:45
+msgid "You are banned from sending direct messages."
+msgstr ""
+
+#: classes/Message.php:61
+msgid "Could not insert message."
+msgstr ""
+
+#: classes/Message.php:71
+msgid "Could not update message with new URI."
+msgstr ""
+
+#: classes/Notice.php:164
+#, php-format
+msgid "DB error inserting hashtag: %s"
+msgstr ""
+
+#: classes/Notice.php:179
+msgid "Problem saving notice. Too long."
+msgstr ""
+
+#: classes/Notice.php:183
+msgid "Problem saving notice. Unknown user."
+msgstr ""
+
+#: classes/Notice.php:188
+msgid ""
+"Too many notices too fast; take a breather and post again in a few minutes."
+msgstr ""
+
+#: classes/Notice.php:194
+msgid ""
+"Too many duplicate messages too quickly; take a breather and post again in a "
+"few minutes."
+msgstr ""
+
+#: classes/Notice.php:200
+msgid "You are banned from posting notices on this site."
+msgstr ""
+
+#: classes/Notice.php:265 classes/Notice.php:290
+msgid "Problem saving notice."
+msgstr ""
+
+#: classes/Notice.php:1124
+#, php-format
+msgid "DB error inserting reply: %s"
+msgstr ""
+
+#: classes/User_group.php:380
+msgid "Could not create group."
+msgstr ""
+
+#: classes/User_group.php:409
+msgid "Could not set group membership."
+msgstr ""
+
+#: classes/User.php:347
+#, php-format
+msgid "Welcome to %1$s, @%2$s!"
+msgstr ""
+
+#: lib/accountsettingsaction.php:108
+msgid "Change your profile settings"
+msgstr ""
+
+#: lib/accountsettingsaction.php:112
+msgid "Upload an avatar"
+msgstr ""
+
+#: lib/accountsettingsaction.php:116
+msgid "Change your password"
+msgstr ""
+
+#: lib/accountsettingsaction.php:120
+msgid "Change email handling"
+msgstr ""
+
+#: lib/accountsettingsaction.php:124
+msgid "Design your profile"
+msgstr ""
+
+#: lib/accountsettingsaction.php:128
+msgid "Other"
+msgstr ""
+
+#: lib/accountsettingsaction.php:128
+msgid "Other options"
+msgstr ""
+
+#: lib/action.php:144
+#, php-format
+msgid "%s - %s"
+msgstr ""
+
+#: lib/action.php:159
+msgid "Untitled page"
+msgstr ""
+
+#: lib/action.php:425
+msgid "Primary site navigation"
+msgstr ""
+
+#: lib/action.php:431
+msgid "Home"
+msgstr ""
+
+#: lib/action.php:431
+msgid "Personal profile and friends timeline"
+msgstr ""
+
+#: lib/action.php:433
+msgid "Account"
+msgstr ""
+
+#: lib/action.php:433
+msgid "Change your email, avatar, password, profile"
+msgstr ""
+
+#: lib/action.php:436
+msgid "Connect"
+msgstr ""
+
+#: lib/action.php:436
+msgid "Connect to services"
+msgstr ""
+
+#: lib/action.php:440
+msgid "Change site configuration"
+msgstr ""
+
+#: lib/action.php:444 lib/subgroupnav.php:105
+msgid "Invite"
+msgstr ""
+
+#: lib/action.php:445 lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+
+#: lib/action.php:450
+msgid "Logout"
+msgstr ""
+
+#: lib/action.php:450
+msgid "Logout from the site"
+msgstr ""
+
+#: lib/action.php:455
+msgid "Create an account"
+msgstr ""
+
+#: lib/action.php:458
+msgid "Login to the site"
+msgstr ""
+
+#: lib/action.php:461 lib/action.php:724
+msgid "Help"
+msgstr ""
+
+#: lib/action.php:461
+msgid "Help me!"
+msgstr ""
+
+#: lib/action.php:464 lib/searchaction.php:127
+msgid "Search"
+msgstr ""
+
+#: lib/action.php:464
+msgid "Search for people or text"
+msgstr ""
+
+#: lib/action.php:485
+msgid "Site notice"
+msgstr ""
+
+#: lib/action.php:551
+msgid "Local views"
+msgstr ""
+
+#: lib/action.php:617
+msgid "Page notice"
+msgstr ""
+
+#: lib/action.php:719
+msgid "Secondary site navigation"
+msgstr ""
+
+#: lib/action.php:726
+msgid "About"
+msgstr ""
+
+#: lib/action.php:728
+msgid "FAQ"
+msgstr ""
+
+#: lib/action.php:732
+msgid "TOS"
+msgstr ""
+
+#: lib/action.php:735
+msgid "Privacy"
+msgstr ""
+
+#: lib/action.php:737
+msgid "Source"
+msgstr ""
+
+#: lib/action.php:739
+msgid "Contact"
+msgstr ""
+
+#: lib/action.php:741
+msgid "Badge"
+msgstr ""
+
+#: lib/action.php:769
+msgid "StatusNet software license"
+msgstr ""
+
+#: lib/action.php:772
+#, php-format
+msgid ""
+"**%%site.name%%** is a microblogging service brought to you by [%%site."
+"broughtby%%](%%site.broughtbyurl%%). "
+msgstr ""
+
+#: lib/action.php:774
+#, php-format
+msgid "**%%site.name%%** is a microblogging service. "
+msgstr ""
+
+#: lib/action.php:776
+#, php-format
+msgid ""
+"It runs the [StatusNet](http://status.net/) microblogging software, version %"
+"s, available under the [GNU Affero General Public License](http://www.fsf."
+"org/licensing/licenses/agpl-3.0.html)."
+msgstr ""
+
+#: lib/action.php:790
+msgid "Site content license"
+msgstr ""
+
+#: lib/action.php:799
+msgid "All "
+msgstr ""
+
+#: lib/action.php:804
+msgid "license."
+msgstr ""
+
+#: lib/action.php:1068
+msgid "Pagination"
+msgstr ""
+
+#: lib/action.php:1077
+msgid "After"
+msgstr ""
+
+#: lib/action.php:1085
+msgid "Before"
+msgstr ""
+
+#: lib/action.php:1133
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: lib/adminpanelaction.php:96
+msgid "You cannot make changes to this site."
+msgstr ""
+
+#: lib/adminpanelaction.php:195
+msgid "showForm() not implemented."
+msgstr ""
+
+#: lib/adminpanelaction.php:224
+msgid "saveSettings() not implemented."
+msgstr ""
+
+#: lib/adminpanelaction.php:247
+msgid "Unable to delete design setting."
+msgstr ""
+
+#: lib/adminpanelaction.php:300
+msgid "Basic site configuration"
+msgstr ""
+
+#: lib/adminpanelaction.php:303
+msgid "Design configuration"
+msgstr ""
+
+#: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309
+msgid "Paths configuration"
+msgstr ""
+
+#: lib/attachmentlist.php:87
+msgid "Attachments"
+msgstr ""
+
+#: lib/attachmentlist.php:265
+msgid "Author"
+msgstr ""
+
+#: lib/attachmentlist.php:278
+msgid "Provider"
+msgstr ""
+
+#: lib/attachmentnoticesection.php:67
+msgid "Notices where this attachment appears"
+msgstr ""
+
+#: lib/attachmenttagcloudsection.php:48
+msgid "Tags for this attachment"
+msgstr ""
+
+#: lib/channel.php:138 lib/channel.php:158
+msgid "Command results"
+msgstr ""
+
+#: lib/channel.php:210
+msgid "Command complete"
+msgstr ""
+
+#: lib/channel.php:221
+msgid "Command failed"
+msgstr ""
+
+#: lib/command.php:44
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:88
+#, php-format
+msgid "Could not find a user with nickname %s"
+msgstr ""
+
+#: lib/command.php:92
+msgid "It does not make a lot of sense to nudge yourself!"
+msgstr ""
+
+#: lib/command.php:99
+#, php-format
+msgid "Nudge sent to %s"
+msgstr ""
+
+#: lib/command.php:126
+#, php-format
+msgid ""
+"Subscriptions: %1$s\n"
+"Subscribers: %2$s\n"
+"Notices: %3$s"
+msgstr ""
+
+#: lib/command.php:152 lib/command.php:400
+msgid "Notice with that id does not exist"
+msgstr ""
+
+#: lib/command.php:168 lib/command.php:416 lib/command.php:471
+msgid "User has no last notice"
+msgstr ""
+
+#: lib/command.php:190
+msgid "Notice marked as fave."
+msgstr ""
+
+#: lib/command.php:315
+#, php-format
+msgid "%1$s (%2$s)"
+msgstr ""
+
+#: lib/command.php:318
+#, php-format
+msgid "Fullname: %s"
+msgstr ""
+
+#: lib/command.php:321
+#, php-format
+msgid "Location: %s"
+msgstr ""
+
+#: lib/command.php:324
+#, php-format
+msgid "Homepage: %s"
+msgstr ""
+
+#: lib/command.php:327
+#, php-format
+msgid "About: %s"
+msgstr ""
+
+#: lib/command.php:358 scripts/xmppdaemon.php:321
+#, php-format
+msgid "Message too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:377
+msgid "Error sending direct message."
+msgstr ""
+
+#: lib/command.php:431
+#, php-format
+msgid "Notice too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:439
+#, php-format
+msgid "Reply to %s sent"
+msgstr ""
+
+#: lib/command.php:441
+msgid "Error saving notice."
+msgstr ""
+
+#: lib/command.php:495
+msgid "Specify the name of the user to subscribe to"
+msgstr ""
+
+#: lib/command.php:502
+#, php-format
+msgid "Subscribed to %s"
+msgstr ""
+
+#: lib/command.php:523
+msgid "Specify the name of the user to unsubscribe from"
+msgstr ""
+
+#: lib/command.php:530
+#, php-format
+msgid "Unsubscribed from %s"
+msgstr ""
+
+#: lib/command.php:548 lib/command.php:571
+msgid "Command not yet implemented."
+msgstr ""
+
+#: lib/command.php:551
+msgid "Notification off."
+msgstr ""
+
+#: lib/command.php:553
+msgid "Can't turn off notification."
+msgstr ""
+
+#: lib/command.php:574
+msgid "Notification on."
+msgstr ""
+
+#: lib/command.php:576
+msgid "Can't turn on notification."
+msgstr ""
+
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Aliasy njejsu so dali wutworić."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
+msgid "You are not subscribed to anyone."
+msgstr ""
+
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
-# Plural problem
+msgstr[0] "Sy tutu wosobu abonował:"
+msgstr[1] "Sy tutej wosobje abonował:"
+msgstr[2] "Sy tute wosoby abonował:"
+msgstr[3] "Sy tute wosoby abonował:"
-#: lib/command.php:642
-#, fuzzy
+#: lib/command.php:645
+msgid "No one is subscribed to you."
+msgstr ""
+
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
-# Plural problem
+msgstr[0] "Tuta wosoba je će abonowała:"
+msgstr[1] "Tutej wosobje stej će abonowałoj:"
+msgstr[2] "Tute wosoby su će abonowali:"
+msgstr[3] "Tute wosoby su će abonowali:"
-#: lib/command.php:664
-#, fuzzy
+#: lib/command.php:667
+msgid "You are not a member of any groups."
+msgstr ""
+
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-# Plural problem
+msgstr[0] "Sy ÄÅ‚on tuteje skupiny:"
+msgstr[1] "Sy ÄÅ‚on tuteju skupinow:"
+msgstr[2] "Sy ÄÅ‚on tutych skupinow:"
+msgstr[3] "Sy ÄÅ‚on tutych skupinow:"
+
+#: lib/command.php:683
+msgid ""
+"Commands:\n"
+"on - turn on notifications\n"
+"off - turn off notifications\n"
+"help - show this help\n"
+"follow <nickname> - subscribe to user\n"
+"groups - lists the groups you have joined\n"
+"subscriptions - list the people you follow\n"
+"subscribers - list the people that follow you\n"
+"leave <nickname> - unsubscribe from user\n"
+"d <nickname> <text> - direct message to user\n"
+"get <nickname> - get last notice from user\n"
+"whois <nickname> - get profile info on user\n"
+"fav <nickname> - add user's last notice as a 'fave'\n"
+"fav #<notice_id> - add notice with the given id as a 'fave'\n"
+"reply #<notice_id> - reply to notice with a given id\n"
+"reply <nickname> - reply to the last notice from user\n"
+"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
+"drop <group> - leave group\n"
+"stats - get your stats\n"
+"stop - same as 'off'\n"
+"quit - same as 'off'\n"
+"sub <nickname> - same as 'follow'\n"
+"unsub <nickname> - same as 'leave'\n"
+"last <nickname> - same as 'get'\n"
+"on <nickname> - not yet implemented.\n"
+"off <nickname> - not yet implemented.\n"
+"nudge <nickname> - remind a user to update.\n"
+"invite <phone number> - not yet implemented.\n"
+"track <word> - not yet implemented.\n"
+"untrack <word> - not yet implemented.\n"
+"track off - not yet implemented.\n"
+"untrack all - not yet implemented.\n"
+"tracks - not yet implemented.\n"
+"tracking - not yet implemented.\n"
+msgstr ""
+
+#: lib/common.php:199
+msgid "No configuration file found. "
+msgstr ""
+
+#: lib/common.php:200
+msgid "I looked for configuration files in the following places: "
+msgstr ""
+
+#: lib/common.php:201
+msgid "You may wish to run the installer to fix this."
+msgstr ""
+
+#: lib/common.php:202
+msgid "Go to the installer."
+msgstr ""
+
+#: lib/connectsettingsaction.php:110
+msgid "IM"
+msgstr ""
+
+#: lib/connectsettingsaction.php:111
+msgid "Updates by instant messenger (IM)"
+msgstr ""
+
+#: lib/connectsettingsaction.php:116
+msgid "Updates by SMS"
+msgstr ""
+
+#: lib/dberroraction.php:60
+msgid "Database error"
+msgstr ""
+
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr ""
+
+#: lib/designsettings.php:109
+msgid ""
+"You can upload your personal background image. The maximum file size is 2MB."
+msgstr ""
+
+#: lib/designsettings.php:418
+msgid "Design defaults restored."
+msgstr ""
+
+#: lib/disfavorform.php:114 lib/disfavorform.php:140
+msgid "Disfavor this notice"
+msgstr ""
+
+#: lib/favorform.php:114 lib/favorform.php:140
+msgid "Favor this notice"
+msgstr ""
+
+#: lib/favorform.php:140
+msgid "Favor"
+msgstr ""
+
+#: lib/feedlist.php:64
+msgid "Export data"
+msgstr ""
#: lib/feed.php:85
msgid "RSS 1.0"
@@ -1782,10 +4356,34 @@ msgstr "Atom"
msgid "FOAF"
msgstr "FOAF"
+#: lib/galleryaction.php:121
+msgid "Filter tags"
+msgstr ""
+
#: lib/galleryaction.php:131
msgid "All"
msgstr "WÅ¡Ä›"
+#: lib/galleryaction.php:139
+msgid "Select tag to filter"
+msgstr ""
+
+#: lib/galleryaction.php:140
+msgid "Tag"
+msgstr ""
+
+#: lib/galleryaction.php:141
+msgid "Choose a tag to narrow list"
+msgstr ""
+
+#: lib/galleryaction.php:143
+msgid "Go"
+msgstr ""
+
+#: lib/groupeditform.php:163
+msgid "URL of the homepage or blog of the group or topic"
+msgstr ""
+
#: lib/groupeditform.php:168
msgid "Describe the group or topic"
msgstr "Skupinu abo temu wopisać"
@@ -1799,6 +4397,16 @@ msgstr "Skupinu abo temu w %d znamješkach wopisać"
msgid "Description"
msgstr "Wopisanje"
+#: lib/groupeditform.php:179
+msgid ""
+"Location for the group, if any, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: lib/groupeditform.php:187
+#, php-format
+msgid "Extra nicknames for the group, comma- or space- separated, max %d"
+msgstr ""
+
#: lib/groupnav.php:85
msgid "Group"
msgstr "Skupina"
@@ -1807,10 +4415,30 @@ msgstr "Skupina"
msgid "Blocked"
msgstr "Blokowany"
+#: lib/groupnav.php:102
+#, php-format
+msgid "%s blocked users"
+msgstr ""
+
+#: lib/groupnav.php:108
+#, php-format
+msgid "Edit %s group properties"
+msgstr ""
+
#: lib/groupnav.php:113
msgid "Logo"
msgstr "Logo"
+#: lib/groupnav.php:114
+#, php-format
+msgid "Add or edit %s logo"
+msgstr ""
+
+#: lib/groupnav.php:120
+#, php-format
+msgid "Add or edit %s design"
+msgstr ""
+
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
msgstr "Skupiny z najwjace ÄÅ‚onami"
@@ -1819,10 +4447,36 @@ msgstr "Skupiny z najwjace ÄÅ‚onami"
msgid "Groups with most posts"
msgstr "Skupiny z njawjace powěsćemi"
+#: lib/grouptagcloudsection.php:56
+#, php-format
+msgid "Tags in %s group's notices"
+msgstr ""
+
+#: lib/htmloutputter.php:103
+msgid "This page is not available in a media type you accept"
+msgstr ""
+
+#: lib/imagefile.php:75
+#, php-format
+msgid "That file is too big. The maximum file size is %s."
+msgstr ""
+
#: lib/imagefile.php:80
msgid "Partial upload."
msgstr "Dźělne nahraće."
+#: lib/imagefile.php:88 lib/mediafile.php:170
+msgid "System error uploading file."
+msgstr ""
+
+#: lib/imagefile.php:96
+msgid "Not an image or corrupt file."
+msgstr ""
+
+#: lib/imagefile.php:105
+msgid "Unsupported image file format."
+msgstr ""
+
#: lib/imagefile.php:118
msgid "Lost our file."
msgstr "Naša dataja je so zhubiła."
@@ -1831,11 +4485,23 @@ msgstr "Naša dataja je so zhubiła."
msgid "Unknown file type"
msgstr "Njeznaty datajowy typ"
-#: lib/jabber.php:192
+#: lib/imagefile.php:217
+msgid "MB"
+msgstr ""
+
+#: lib/imagefile.php:219
+msgid "kB"
+msgstr ""
+
+#: lib/jabber.php:191
#, php-format
msgid "[%s]"
msgstr "[%s]"
+#: lib/joinform.php:114
+msgid "Join"
+msgstr ""
+
#: lib/leaveform.php:114
msgid "Leave"
msgstr "Wopušćić"
@@ -1848,6 +4514,16 @@ msgstr "Přizjewjenje z wužiwarskim mjenom a hesłom"
msgid "Sign up for a new account"
msgstr "Nowe konto registrować"
+#: lib/mailbox.php:89
+msgid "Only the user can read their own mailboxes."
+msgstr ""
+
+#: lib/mailbox.php:139
+msgid ""
+"You have no private messages. You can send private message to engage other "
+"users in conversation. People can send you messages for your eyes only."
+msgstr ""
+
#: lib/mailbox.php:227 lib/noticelist.php:452
msgid "from"
msgstr "wot"
@@ -1856,6 +4532,43 @@ msgstr "wot"
msgid "Email address confirmation"
msgstr "Wobkrućenje e-mejloweje adresy"
+#: lib/mail.php:174
+#, php-format
+msgid ""
+"Hey, %s.\n"
+"\n"
+"Someone just entered this email address on %s.\n"
+"\n"
+"If it was you, and you want to confirm your entry, use the URL below:\n"
+"\n"
+"\t%s\n"
+"\n"
+"If not, just ignore this message.\n"
+"\n"
+"Thanks for your time, \n"
+"%s\n"
+msgstr ""
+
+#: lib/mail.php:236
+#, php-format
+msgid "%1$s is now listening to your notices on %2$s."
+msgstr ""
+
+#: lib/mail.php:241
+#, php-format
+msgid ""
+"%1$s is now listening to your notices on %2$s.\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Faithfully yours,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Change your email address or notification options at %8$s\n"
+msgstr ""
+
#: lib/mail.php:254
#, php-format
msgid "Location: %s\n"
@@ -1868,23 +4581,145 @@ msgstr "Startowa strona: %s\n"
#: lib/mail.php:258
#, php-format
-msgid "Bio: %s\n\n"
-msgstr "Biografija: %s\n\n"
+msgid ""
+"Bio: %s\n"
+"\n"
+msgstr ""
+"Biografija: %s\n"
+"\n"
+
+#: lib/mail.php:286
+#, php-format
+msgid "New email address for posting to %s"
+msgstr ""
+
+#: lib/mail.php:289
+#, php-format
+msgid ""
+"You have a new posting address on %1$s.\n"
+"\n"
+"Send email to %2$s to post new messages.\n"
+"\n"
+"More email instructions at %3$s.\n"
+"\n"
+"Faithfully yours,\n"
+"%4$s"
+msgstr ""
+
+#: lib/mail.php:413
+#, php-format
+msgid "%s status"
+msgstr ""
#: lib/mail.php:439
msgid "SMS confirmation"
msgstr "SMS-wobkrućenje"
+#: lib/mail.php:463
+#, php-format
+msgid "You've been nudged by %s"
+msgstr ""
+
+#: lib/mail.php:467
+#, php-format
+msgid ""
+"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
+"to post some news.\n"
+"\n"
+"So let's hear from you :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%4$s\n"
+msgstr ""
+
#: lib/mail.php:510
#, php-format
msgid "New private message from %s"
msgstr "Nowa priwatna powěsć wot %s"
+#: lib/mail.php:514
+#, php-format
+msgid ""
+"%1$s (%2$s) sent you a private message:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"You can reply to their message here:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%5$s\n"
+msgstr ""
+
#: lib/mail.php:559
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał"
+#: lib/mail.php:561
+#, php-format
+msgid ""
+"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
+"\n"
+"The URL of your notice is:\n"
+"\n"
+"%3$s\n"
+"\n"
+"The text of your notice is:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see the list of %1$s's favorites here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Faithfully yours,\n"
+"%6$s\n"
+msgstr ""
+
+#: lib/mail.php:620
+#, php-format
+msgid "%s (@%s) sent a notice to your attention"
+msgstr ""
+
+#: lib/mail.php:622
+#, php-format
+msgid ""
+"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
+"\n"
+"The notice is here:\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"It reads:\n"
+"\n"
+"\t%4$s\n"
+"\n"
+msgstr ""
+
+#: lib/mediafile.php:98 lib/mediafile.php:123
+msgid "There was a database error while saving your file. Please try again."
+msgstr ""
+
+#: lib/mediafile.php:142
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
+msgstr ""
+
+#: lib/mediafile.php:147
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form."
+msgstr ""
+
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
msgstr "Nahrata dataja bu jenož zdźěla nahrata."
@@ -1893,6 +4728,31 @@ msgstr "Nahrata dataja bu jenož zdźěla nahrata."
msgid "Missing a temporary folder."
msgstr "Temporerny rjadowka faluje."
+#: lib/mediafile.php:162
+msgid "Failed to write file to disk."
+msgstr ""
+
+#: lib/mediafile.php:165
+msgid "File upload stopped by extension."
+msgstr ""
+
+#: lib/mediafile.php:179 lib/mediafile.php:216
+msgid "File exceeds user's quota!"
+msgstr ""
+
+#: lib/mediafile.php:196 lib/mediafile.php:233
+msgid "File could not be moved to destination directory."
+msgstr ""
+
+#: lib/mediafile.php:201 lib/mediafile.php:237
+msgid "Could not determine file's mime-type!"
+msgstr ""
+
+#: lib/mediafile.php:270
+#, php-format
+msgid " Try using another %s format."
+msgstr ""
+
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported filetype on this server."
@@ -1906,7 +4766,7 @@ msgstr "Direktnu zdźělenku pósłać"
msgid "To"
msgstr "Komu"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "K dispoziciji stejace znamješka"
@@ -1914,11 +4774,16 @@ msgstr "K dispoziciji stejace znamješka"
msgid "Send a notice"
msgstr "Zdźělenku pósłać"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:171
+#, php-format
+msgid "What's up, %s?"
+msgstr ""
+
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Připowěsnyć"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Dataju připowěsnyć"
@@ -1943,6 +4808,14 @@ msgstr "W"
msgid "W"
msgstr "Z"
+#: lib/noticelist.php:411
+msgid "at"
+msgstr ""
+
+#: lib/noticelist.php:506
+msgid "in context"
+msgstr ""
+
#: lib/noticelist.php:526
msgid "Reply to this notice"
msgstr "Na tutu zdźělenku wotmołwić"
@@ -1951,6 +4824,18 @@ msgstr "Na tutu zdźělenku wotmołwić"
msgid "Reply"
msgstr "Wotmołwić"
+#: lib/nudgeform.php:116
+msgid "Nudge this user"
+msgstr ""
+
+#: lib/nudgeform.php:128
+msgid "Nudge"
+msgstr ""
+
+#: lib/nudgeform.php:128
+msgid "Send a nudge to this user"
+msgstr ""
+
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
msgstr "Zmylk při zasunjenju noweho profila"
@@ -1967,6 +4852,14 @@ msgstr "Zmylk při zasunjenju zdaleneho profila"
msgid "Duplicate notice"
msgstr "Dwójna zdźělenka"
+#: lib/oauthstore.php:467 lib/subs.php:48
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: lib/oauthstore.php:492
+msgid "Couldn't insert new subscription."
+msgstr ""
+
#: lib/personalgroupnav.php:99
msgid "Personal"
msgstr "Wosobinski"
@@ -1979,15 +4872,28 @@ msgstr "Wotmołwy"
msgid "Favorites"
msgstr "Fawority"
+#: lib/personalgroupnav.php:124
+msgid "Inbox"
+msgstr ""
+
#: lib/personalgroupnav.php:125
msgid "Your incoming messages"
msgstr "Twoje dochadźace powěsće"
+#: lib/personalgroupnav.php:129
+msgid "Outbox"
+msgstr ""
+
#: lib/personalgroupnav.php:130
msgid "Your sent messages"
msgstr "Twoje pósłane powěsće"
-#: lib/profileaction.php:109 lib/profileaction.php:191 lib/subgroupnav.php:82
+#: lib/personaltagcloudsection.php:56
+#, php-format
+msgid "Tags in %s's notices"
+msgstr ""
+
+#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonementy"
@@ -1995,7 +4901,7 @@ msgstr "Abonementy"
msgid "All subscriptions"
msgstr "WÅ¡Ä› abonementy"
-#: lib/profileaction.php:140 lib/profileaction.php:200 lib/subgroupnav.php:90
+#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonenća"
@@ -2003,18 +4909,26 @@ msgstr "Abonenća"
msgid "All subscribers"
msgstr "Wšitcy abonenća"
-#: lib/profileaction.php:177
+#: lib/profileaction.php:178
msgid "User ID"
msgstr "Wužiwarski ID"
-#: lib/profileaction.php:182
+#: lib/profileaction.php:183
msgid "Member since"
msgstr "Čłon wot"
-#: lib/profileaction.php:235
+#: lib/profileaction.php:245
msgid "All groups"
msgstr "WÅ¡Ä› skupiny"
+#: lib/profileformaction.php:123
+msgid "No return-to arguments"
+msgstr ""
+
+#: lib/profileformaction.php:137
+msgid "unimplemented method"
+msgstr ""
+
#: lib/publicgroupnav.php:78
msgid "Public"
msgstr "Zjawny"
@@ -2023,10 +4937,26 @@ msgstr "Zjawny"
msgid "User groups"
msgstr "Wužiwarske skupiny"
+#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
+msgid "Recent tags"
+msgstr ""
+
+#: lib/publicgroupnav.php:88
+msgid "Featured"
+msgstr ""
+
#: lib/publicgroupnav.php:92
msgid "Popular"
msgstr "Woblubowany"
+#: lib/sandboxform.php:67
+msgid "Sandbox"
+msgstr ""
+
+#: lib/sandboxform.php:78
+msgid "Sandbox this user"
+msgstr ""
+
#: lib/searchaction.php:120
msgid "Search site"
msgstr "Pytanske sydło"
@@ -2063,6 +4993,39 @@ msgstr "Wotrězk bjez titula"
msgid "More..."
msgstr "Wjace..."
+#: lib/silenceform.php:67
+msgid "Silence"
+msgstr ""
+
+#: lib/silenceform.php:78
+msgid "Silence this user"
+msgstr ""
+
+#: lib/subgroupnav.php:83
+#, php-format
+msgid "People %s subscribes to"
+msgstr ""
+
+#: lib/subgroupnav.php:91
+#, php-format
+msgid "People subscribed to %s"
+msgstr ""
+
+#: lib/subgroupnav.php:99
+#, php-format
+msgid "Groups %s is a member of"
+msgstr ""
+
+#: lib/subscriberspeopleselftagcloudsection.php:48
+#: lib/subscriptionspeopleselftagcloudsection.php:48
+msgid "People Tagcloud as self-tagged"
+msgstr ""
+
+#: lib/subscriberspeopletagcloudsection.php:48
+#: lib/subscriptionspeopletagcloudsection.php:48
+msgid "People Tagcloud as tagged"
+msgstr ""
+
#: lib/subscriptionlist.php:126
msgid "(none)"
msgstr "(žadyn)"
@@ -2079,11 +5042,20 @@ msgstr "Wužiwar je će zablokował."
msgid "Could not subscribe."
msgstr "Abonowanje njebě móžno"
+#: lib/subs.php:79
+msgid "Could not subscribe other to you."
+msgstr ""
+
#: lib/subs.php:128
msgid "Not subscribed!"
msgstr "Njeje abonowany!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Abonoment njeje so daÅ‚ zniÄić."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Abonoment njeje so daÅ‚ zniÄić."
@@ -2091,6 +5063,26 @@ msgstr "Abonoment njeje so daÅ‚ zniÄić."
msgid "None"
msgstr "Žadyn"
+#: lib/topposterssection.php:74
+msgid "Top posters"
+msgstr ""
+
+#: lib/unsandboxform.php:69
+msgid "Unsandbox"
+msgstr ""
+
+#: lib/unsandboxform.php:80
+msgid "Unsandbox this user"
+msgstr ""
+
+#: lib/unsilenceform.php:67
+msgid "Unsilence"
+msgstr ""
+
+#: lib/unsilenceform.php:78
+msgid "Unsilence this user"
+msgstr ""
+
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
msgstr "Tutoho wužiwarja wotskazać"
@@ -2123,6 +5115,10 @@ msgstr "Tutomu wužiwarja direktnu powěsć pósłać"
msgid "Message"
msgstr "Powěsć"
+#: lib/userprofile.php:311
+msgid "Moderate"
+msgstr ""
+
#: lib/util.php:825
msgid "a few seconds ago"
msgstr "před něšto sekundami"
@@ -2175,7 +5171,13 @@ msgstr "%s płaćiwa barba njeje!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr "%s płaćiwa barba njeje! Wužij 3 heksadecimalne znamješka abo 6 heksadecimalnych znamješkow."
+msgstr ""
+"%s płaćiwa barba njeje! Wužij 3 heksadecimalne znamješka abo 6 "
+"heksadecimalnych znamješkow."
+
+#: scripts/maildaemon.php:48
+msgid "Could not parse message."
+msgstr ""
#: scripts/maildaemon.php:53
msgid "Not a registered user."
@@ -2188,4 +5190,3 @@ msgstr "Wodaj, to twoja adresa za dochadźace e-mejle njeje."
#: scripts/maildaemon.php:61
msgid "Sorry, no incoming email allowed."
msgstr "Wodaj, dochadźaće e-mejle njejsu dowolene."
-
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index 5cb39db10..16e4b7435 100644
--- a/locale/is/LC_MESSAGES/statusnet.po
+++ b/locale/is/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:52+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:42+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "Notandi hefur enga persónulega síðu."
msgid "Could not save profile."
msgstr "Gat ekki vistað persónulega síðu."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Gat ekki uppfært notanda."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Mistókst að loka á notanda."
@@ -569,7 +574,7 @@ msgstr "Skera af"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -823,106 +828,106 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Ótæk stærð."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Þessi síða er ekki aðgengileg í "
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Breyta"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Bjóða"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Breyta"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Babl vefsíðunnar"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Skrá þig út af síðunni"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr ""
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr ""
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr ""
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texti"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr ""
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -932,7 +937,7 @@ msgstr ""
msgid "Save"
msgstr "Vista"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1365,18 +1370,18 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr ""
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
@@ -1691,7 +1696,7 @@ msgstr "Persónuleg skilaboð"
msgid "Optionally add a personal message to the invitation."
msgstr "Bættu persónulegum skilaboðum við boðskortið ef þú vilt."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Senda"
@@ -1797,11 +1802,11 @@ msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
msgid "%s left group %s"
msgstr "%s gekk úr hópnum %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Þú hefur nú þegar skráð þig inn."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Ótækt bablinnihald"
@@ -2017,8 +2022,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Enginn stuðningur við gagnasnið."
@@ -4396,40 +4401,54 @@ msgstr "Tilkynningar á."
msgid "Can't turn on notification."
msgstr "Get ekki kveikt á tilkynningum."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Gat ekki búið til uppáhald."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Þú ert ekki áskrifandi."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Þú ert nú þegar í áskrift að þessum notendum:"
msgstr[1] "Þú ert nú þegar í áskrift að þessum notendum:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
msgstr[1] "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Þú ert ekki meðlimur í þessum hópi."
msgstr[1] "Þú ert ekki meðlimur í þessum hópi."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4448,6 +4467,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4511,11 +4531,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4974,7 +4990,7 @@ msgstr "Senda bein skilaboð"
msgid "To"
msgstr "Til"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Leyfileg tákn"
@@ -4987,11 +5003,11 @@ msgstr "Senda babl"
msgid "What's up, %s?"
msgstr "Hvað er að frétta %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5267,7 +5283,12 @@ msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
msgid "Not subscribed!"
msgstr "Ekki í áskrift!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Gat ekki eytt áskrift."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Gat ekki eytt áskrift."
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index 79b6ef8c0..b86ca75b9 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:56+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:45+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@@ -185,7 +185,12 @@ msgstr "L'utente non ha un profilo."
msgid "Could not save profile."
msgstr "Impossibile salvare il profilo."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Impossibile aggiornare l'utente."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Blocco dell'utente non riuscito."
@@ -577,7 +582,7 @@ msgstr "Ritaglia"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -838,110 +843,110 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Dimensione non valida."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Questa pagina non è disponibile in un "
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Modifica la tua password"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Invita"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Modifica"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Messaggio del sito"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Sconnettiti dal sito"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Puoi caricare un'immagine per il logo del tuo gruppo."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Modifica la tua password"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Connetti"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Ricerca"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Testo"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Elenco"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -951,7 +956,7 @@ msgstr ""
msgid "Save"
msgstr "Salva"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1400,20 +1405,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Impossibile aggiornare l'utente."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Impossibile salvare le tue impostazioni di Twitter!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Preferenze di sincronizzazione salvate."
@@ -1736,7 +1741,7 @@ msgstr "Messaggio personale"
msgid "Optionally add a personal message to the invitation."
msgstr "Puoi aggiungere un messaggio personale agli inviti."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Invia"
@@ -1842,11 +1847,11 @@ msgstr "Impossibile rimuovere l'utente %s dal gruppo %s"
msgid "%s left group %s"
msgstr "%s ha lasciato il gruppo %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Accesso già effettuato."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Contenuto del messaggio non valido"
@@ -2060,8 +2065,8 @@ msgstr "Connetti"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Non è un formato di dati supportato."
@@ -4466,40 +4471,54 @@ msgstr "Notifiche attivate."
msgid "Can't turn on notification."
msgstr "Impossibile attivare le notifiche."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Impossibile creare preferito."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Non sei abbonato a quel profilo."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Sei già abbonato a questi utenti:"
msgstr[1] "Sei già abbonato a questi utenti:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Impossibile abbonare altri a te."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Impossibile abbonare altri a te."
msgstr[1] "Impossibile abbonare altri a te."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Non sei un membro di quel gruppo."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Non sei un membro di quel gruppo."
msgstr[1] "Non sei un membro di quel gruppo."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4518,6 +4537,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4582,11 +4602,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Qui puoi caricare la tua immagine personale."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5050,7 +5066,7 @@ msgstr "Invia un messaggio diretto"
msgid "To"
msgstr "A"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Caratteri disponibili"
@@ -5063,11 +5079,11 @@ msgstr "Invia un messaggio"
msgid "What's up, %s?"
msgstr "Cosa succede, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5347,7 +5363,12 @@ msgstr "Impossibile abbonare altri a te."
msgid "Not subscribed!"
msgstr "Non abbonato!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Impossibile eliminare l'abbonamento."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Impossibile eliminare l'abbonamento."
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index 5317bc7a3..74baa8e28 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:19:59+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:48+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@@ -189,7 +189,12 @@ msgstr "プロファイルãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Could not save profile."
msgstr "プロファイルをä¿å­˜ã§ãã¾ã›ã‚“"
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "ユーザを更新ã§ãã¾ã›ã‚“"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "ユーザã®ãƒ–ロックã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
@@ -581,7 +586,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -839,109 +844,109 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "ä¸æ­£ãªã‚µã‚¤ã‚ºã€‚"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã‚ãªãŸãŒæ‰¿èªã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚¤ãƒ—ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "パスワードã®å¤‰æ›´"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "æ–°ã—ã„通知"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "変更"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "æ–°ã—ã„通知"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "サイトã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "é•·ã™ãŽã¾ã™ã€‚通知ã¯æœ€å¤§ 140 å­—ã¾ã§ã§ã™ã€‚"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "パスワードã®å¤‰æ›´"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "内容"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "検索"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "ログイン"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -951,7 +956,7 @@ msgstr ""
msgid "Save"
msgstr "ä¿å­˜"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1396,19 +1401,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "ユーザを更新ã§ãã¾ã›ã‚“"
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "設定ãŒä¿å­˜ã•ã‚Œã¾ã—ãŸã€‚"
@@ -1722,7 +1727,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "é€ã‚‹"
@@ -1830,11 +1835,11 @@ msgstr "OpenIDを作æˆã§ãã¾ã›ã‚“ : %s"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "æ—¢ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚"
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "ä¸æ­£ãªé€šçŸ¥å†…容"
@@ -2040,8 +2045,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4417,37 +4422,51 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’ä¿å­˜ã§ãã¾ã›ã‚“"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "ãã®ãƒ—ロファイルã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ãã®ãƒ—ロファイルã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "リモートサブスクライブ"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "リモートサブスクライブ"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "ãã®ãƒ—ロファイルã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ãã®ãƒ—ロファイルã¯é€ä¿¡ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4466,6 +4485,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4530,11 +4550,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "é•·ã™ãŽã¾ã™ã€‚通知ã¯æœ€å¤§ 140 å­—ã¾ã§ã§ã™ã€‚"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4989,7 +5005,7 @@ msgstr "直接通知をé€ã‚‹"
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "利用å¯èƒ½ãªæ–‡å­—"
@@ -5002,11 +5018,11 @@ msgstr "通知をé€ã‚‹"
msgid "What's up, %s?"
msgstr "最近ã©ã† %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5284,7 +5300,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "購読ã—ã¦ã„ã¾ã›ã‚“ï¼"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "サブスクリプションを削除ã§ãã¾ã›ã‚“"
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "サブスクリプションを削除ã§ãã¾ã›ã‚“"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index 60ac94a30..05b20ed91 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:03+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:51+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "ì´ìš©ìžê°€ í”„ë¡œí•„ì„ ê°€ì§€ê³  있지 않습니다."
msgid "Could not save profile."
msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í•  수 없습니다."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "ì‚¬ìš©ìž ì°¨ë‹¨ì— ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
@@ -576,7 +581,7 @@ msgstr "ìžë¥´ê¸°"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -836,110 +841,110 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "옳지 ì•Šì€ í¬ê¸°"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "ì´ íŽ˜ì´ì§€ëŠ” 귀하가 승ì¸í•œ 미디어 타입ì—서는 ì´ìš©í•  수 없습니다."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "비밀번호 바꾸기"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "초대"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "변환"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "사ì´íŠ¸ 공지"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "ì´ ì‚¬ì´íŠ¸ë¡œë¶€í„° 로그아웃"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "ë‹¹ì‹ ê·¸ë£¹ì˜ ë¡œê³  ì´ë¯¸ì§€ë¥¼ 업로드할 수 있습니다."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "비밀번호 바꾸기"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "ì—°ê²°"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "검색"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "문ìž"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "로그ì¸"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -949,7 +954,7 @@ msgstr ""
msgid "Save"
msgstr "저장"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1393,20 +1398,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "트위터 í™˜ê²½ì„¤ì •ì„ ì €ìž¥í•  수 없습니다."
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "싱í¬ì„¤ì •ì´ 저장ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -1722,7 +1727,7 @@ msgstr "ê°œì¸ì ì¸ 메시지"
msgid "Optionally add a personal message to the invitation."
msgstr "ì´ˆëŒ€ìž¥ì— ë©”ì‹œì§€ 첨부하기."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "보내기"
@@ -1823,11 +1828,11 @@ msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다."
msgid "%s left group %s"
msgstr "%s가 그룹%s를 떠났습니다."
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "ì´ë¯¸ ë¡œê·¸ì¸ í•˜ì…¨ìŠµë‹ˆë‹¤."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "옳지 ì•Šì€ í†µì§€ ë‚´ìš©"
@@ -2040,8 +2045,8 @@ msgstr "ì—°ê²°"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다."
@@ -4428,37 +4433,51 @@ msgstr "ì•Œë¦¼ì´ ì¼œì¡ŒìŠµë‹ˆë‹¤."
msgid "Can't turn on notification."
msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다."
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4477,6 +4496,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4541,11 +4561,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "ë‹¹ì‹ ì˜ ê°œì¸ì ì¸ 아바타를 업로드할 수 있습니다."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5001,7 +5017,7 @@ msgstr "ì§ì ‘ 메시지 보내기"
msgid "To"
msgstr "ì—게"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "사용 가능한 글ìž"
@@ -5014,11 +5030,11 @@ msgstr "게시글 보내기"
msgid "What's up, %s?"
msgstr "ë­í•˜ì„¸ìš”? %?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5298,7 +5314,12 @@ msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
msgid "Not subscribed!"
msgstr "구ë…하고 있지 않습니다!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 94511070d..dff5c0b43 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:07+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:55+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "КориÑникот нема профил."
msgid "Could not save profile."
msgstr "Профилот не може да Ñе Ñними."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "КориÑникот не може да Ñе оÑвежи/"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -574,7 +579,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -676,7 +681,7 @@ msgstr ""
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
msgid "No"
-msgstr ""
+msgstr "Ðе"
#: actions/block.php:143 actions/deleteuser.php:147
#, fuzzy
@@ -832,109 +837,109 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Погрешна големина."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Оваа Ñтраница не е доÑтапна во форматот кој Вие го прифаќате."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Промени ја лозинката"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Ðово извеÑтување"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Промени"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Ðово извеÑтување"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Ова е предолго. МакÑималната должина е 140 знаци."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Промени ја лозинката"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Поврзи Ñе"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Барај"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Пријави Ñе"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -944,7 +949,7 @@ msgstr ""
msgid "Save"
msgstr "Сними"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1384,19 +1389,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "КориÑникот не може да Ñе оÑвежи/"
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Преференциите Ñе Ñнимени."
@@ -1712,7 +1717,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "ИÑпрати"
@@ -1794,11 +1799,11 @@ msgstr "OpenID формуларот не може да Ñе креира:%s"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Веќе Ñте најавени."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Ðеправилна Ñодржина за извеÑтување"
@@ -2010,8 +2015,8 @@ msgstr "Поврзи Ñе"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4386,40 +4391,54 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Информациите за аватарот не може да Ñе Ñнимат"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Оддалечена претплата"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Оддалечена претплата"
msgstr[1] "Оддалечена претплата"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4438,6 +4457,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4501,11 +4521,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Ова е предолго. МакÑималната должина е 140 знаци."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4968,7 +4984,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 или повеќе знаци"
@@ -4983,11 +4999,11 @@ msgstr "Ðово извеÑтување"
msgid "What's up, %s?"
msgstr "Што има %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5266,7 +5282,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "Ðе Ñте претплатени!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Претплата не може да Ñе избрише."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Претплата не може да Ñе избрише."
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index e6eb1e5d1..12b20f3dd 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:10+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:26:58+0000\n"
"Language-Team: Norwegian (bokmål)‬\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
@@ -183,7 +183,12 @@ msgstr ""
msgid "Could not save profile."
msgstr "Klarte ikke å lagre profil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Klarte ikke å oppdatere bruker."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -572,7 +577,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -828,108 +833,108 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Ugyldig størrelse"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr ""
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Endre passordet ditt"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr ""
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Endre"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Endre"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Endre passordet ditt"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Koble til"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Søk"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Tekst"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Logg inn"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -939,7 +944,7 @@ msgstr ""
msgid "Save"
msgstr "Lagre"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1374,19 +1379,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Klarte ikke å oppdatere bruker."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
@@ -1689,7 +1694,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Send"
@@ -1791,11 +1796,11 @@ msgstr "Klarte ikke å oppdatere bruker."
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Allerede innlogget."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr ""
@@ -1998,8 +2003,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4330,40 +4335,54 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Ikke autorisert."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ikke autorisert."
msgstr[1] "Ikke autorisert."
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Svar til %s"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Svar til %s"
msgstr[1] "Svar til %s"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er allerede logget inn!"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du er allerede logget inn!"
msgstr[1] "Du er allerede logget inn!"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4382,6 +4401,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4444,11 +4464,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4910,7 +4926,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 eller flere tegn"
@@ -4924,11 +4940,11 @@ msgstr ""
msgid "What's up, %s?"
msgstr ""
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5204,7 +5220,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "Alle abonnementer"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr ""
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index e9c4ef9e7..cec42ca71 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:26+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:06+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@@ -192,7 +192,11 @@ msgstr "Deze gebruiker heeft geen profiel."
msgid "Could not save profile."
msgstr "Het was niet mogelijk het profiel op te slaan."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "U zichzelf niet blokkeren!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Het blokkeren van de gebruiker is mislukt."
@@ -582,7 +586,7 @@ msgstr "Uitsnijden"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -839,45 +843,45 @@ msgstr "Ontwerp"
msgid "Design settings for this StatusNet site."
msgstr "Instellingen voor de vormgeving van deze StatusNet-website."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "De logo-URL is ongeldig."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "De vormgeving is niet beschikbaar: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Logo wijzigen"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Websitelogo"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Vormgeving wijzigen"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Vormgeving website"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Mogelijke vormgevingen voor deze website."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Achtergrondafbeelding wijzigen"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Achtergrond"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -886,55 +890,55 @@ msgstr ""
"Hier kunt u een achtergrondafbeelding voor de website uploaden. De maximale "
"bestandsgrootte is %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Aan"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Uit"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "Achtergrondafbeelding inschakelen of uitschakelen."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "Achtergrondafbeelding naast elkaar"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Kleuren wijzigen"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Inhoud"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Menubalk"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Tekst"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Verwijzingen"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Standaardinstellingen gebruiken"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Standaardontwerp toepassen"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Standaardinstellingen toepassen"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -944,7 +948,7 @@ msgstr "Standaardinstellingen toepassen"
msgid "Save"
msgstr "Opslaan"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Ontwerp opslaan"
@@ -1391,18 +1395,18 @@ msgstr ""
"De vormgeving van uw groep aanpassen met een achtergrondafbeeldingen en een "
"kleurenpalet van uw keuze."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Het was niet mogelijk uw ontwerp bij te werken."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Het was niet mogelijk om uw ontwerpinstellingen op te slaan!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "De ontwerpvoorkeuren zijn opgeslagen."
@@ -1732,7 +1736,7 @@ msgstr "Persoonlijk bericht"
msgid "Optionally add a personal message to the invitation."
msgstr "Persoonlijk bericht bij de uitnodiging (optioneel)."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Verzenden"
@@ -1838,11 +1842,11 @@ msgstr "De gebruiker %s kon niet uit de groet %s verwijderd worden"
msgid "%s left group %s"
msgstr "%s heeft de groep %s verlaten"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "U bent al aangemeld."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "Het token is ongeldig of verlopen."
@@ -2058,8 +2062,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Geen ondersteund gegevensformaat."
@@ -2854,11 +2858,10 @@ msgid "Invalid profile URL (bad format)"
msgstr "Ongeldige profiel-URL (foutieve opmaak)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
msgstr ""
-"De URL voor het profiel is niet geldig (het is geen YADIS-document of er is "
-"geen of ongeldige XRDS gedefinieerd)."
+"De URL is niet geldig (het is geen YADIS-document of er een ongeldige XRDS "
+"gedefinieerd)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
@@ -4492,37 +4495,51 @@ msgstr "Notificaties ingeschakeld."
msgid "Can't turn on notification."
msgstr "Het is niet mogelijk de notificatie uit te schakelen."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Het was niet mogelijk de aliassen aan te maken."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "U bent op geen enkele gebruiker geabonneerd."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "U bent geabonneerd op deze gebruiker:"
msgstr[1] "U bent geabonneerd op deze gebruikers:"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "Niemand heeft een abonnenment op u."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Deze gebruiker is op u geabonneerd:"
msgstr[1] "Deze gebruikers zijn op u geabonneerd:"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "U bent lid van geen enkele groep."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "U bent lid van deze groep:"
msgstr[1] "U bent lid van deze groepen:"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4542,6 +4559,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4579,7 +4597,6 @@ msgstr ""
"reply #<mededeling-ID> - antwoorden op de mededeling met het aangegeven ID\n"
"reply <gebruiker> - antwoorden op de laatste mededeling van gebruiker\n"
"join <groep> - lid worden van groep\n"
-"login - verwijzing opvragen naar de webpagina voor aanmelden\n"
"drop <groep> - groepslidmaatschap opzeggen\n"
"stats - uw statistieken opvragen\n"
"stop - zelfde als 'off'\n"
@@ -4642,11 +4659,7 @@ msgstr ""
"U kunt een persoonlijke achtergrondafbeelding uploaden. De maximale "
"bestandsgrootte is 2 megabyte."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Foutieve standaard kleurinstellingen: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Het standaardontwerp is weer ingesteld."
@@ -5187,7 +5200,7 @@ msgstr "Directe mededeling verzenden"
msgid "To"
msgstr "Aan"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Beschikbare tekens"
@@ -5200,11 +5213,11 @@ msgstr "Mededeling verzenden"
msgid "What's up, %s?"
msgstr "Hallo, %s."
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Toevoegen"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Bestand toevoegen"
@@ -5472,7 +5485,11 @@ msgstr "Het was niet mogelijk om een ander op u te laten abonneren"
msgid "Not subscribed!"
msgstr "Niet geabonneerd!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Het was niet mogelijk het abonnement op uzelf te verwijderen."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Kon abonnement niet verwijderen."
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index fdae960a3..0703217de 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:13+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:01+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "Brukaren har inga profil."
msgid "Could not save profile."
msgstr "Kan ikkje lagra profil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Kan ikkje oppdatera brukar."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Blokkering av brukar feila."
@@ -574,7 +579,7 @@ msgstr "Skaler"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -835,110 +840,110 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Ugyldig storleik."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Denne sida er ikkje tilgjengleg i eit"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Endra passordet ditt"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Invitér"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Endra"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Statusmelding"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Logg ut or sida"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Du kan lasta opp ein logo for gruppa."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Endra passordet ditt"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Kopla til"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Søk"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Tekst"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Logg inn"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -948,7 +953,7 @@ msgstr ""
msgid "Save"
msgstr "Lagra"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1393,20 +1398,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Kan ikkje oppdatera brukar."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Synkroniserings innstillingar blei lagra."
@@ -1724,7 +1729,7 @@ msgstr "Personleg melding"
msgid "Optionally add a personal message to the invitation."
msgstr "Eventuelt legg til ei personleg melding til invitasjonen."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Send"
@@ -1825,11 +1830,11 @@ msgstr "Kunne ikkje fjerne %s fra %s gruppa "
msgid "%s left group %s"
msgstr "%s forlot %s gruppa"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Allereie logga inn."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Ugyldig notisinnhald"
@@ -2045,8 +2050,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Ikkje eit støtta dataformat."
@@ -4445,40 +4450,54 @@ msgstr "Notifikasjon på."
msgid "Can't turn on notification."
msgstr "Kan ikkje slå på notifikasjon."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Kunne ikkje lagre favoritt."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Du tingar ikkje oppdateringar til den profilen."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du tingar allereie oppdatering frå desse brukarane:"
msgstr[1] "Du tingar allereie oppdatering frå desse brukarane:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Kan ikkje tinga andre til deg."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Kan ikkje tinga andre til deg."
msgstr[1] "Kan ikkje tinga andre til deg."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er ikkje medlem av den gruppa."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du er ikkje medlem av den gruppa."
msgstr[1] "Du er ikkje medlem av den gruppa."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4497,6 +4516,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4561,11 +4581,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Du kan laste opp ein personleg avatar."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5028,7 +5044,7 @@ msgstr "Send ei direkte melding"
msgid "To"
msgstr "Til"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Tilgjenglege teikn"
@@ -5041,11 +5057,11 @@ msgstr "Send ei melding"
msgid "What's up, %s?"
msgstr "Kva skjer, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5325,7 +5341,12 @@ msgstr "Kan ikkje tinga andre til deg."
msgid "Not subscribed!"
msgstr "Ikkje tinga."
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Kan ikkje sletta tinging."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Kan ikkje sletta tinging."
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index 62d92064c..c8363f2a3 100644
--- a/locale/pl/LC_MESSAGES/statusnet.po
+++ b/locale/pl/LC_MESSAGES/statusnet.po
@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:31+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:09+0000\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -18,7 +18,7 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@@ -194,7 +194,12 @@ msgstr "Użytkownik nie posiada profilu."
msgid "Could not save profile."
msgstr "Nie można zapisać profilu."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Nie można zablokować siebie."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Zablokowanie użytkownika nie powiodło się."
@@ -576,7 +581,7 @@ msgstr "Przytnij"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -828,100 +833,100 @@ msgstr "WyglÄ…d"
msgid "Design settings for this StatusNet site."
msgstr "Ustawienia wyglÄ…du tej strony StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "Nieprawidłowy adres URL logo."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Motyw nie jest dostępny: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Zmień logo"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Logo strony"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Zmień motyw"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Motyw strony"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Motyw strony."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Zmień obraz tła"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "TÅ‚o"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "Można wysłać obraz tła dla strony. Maksymalny rozmiar pliku to %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "WÅ‚Ä…czone"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Wyłączone"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "Włącz lub wyłącz obraz tła."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "Kafelkowy obraz tła"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Zmień kolory"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Zawartość"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Panel boczny"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Tekst"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Odnośniki"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Użycie domyślnych"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Przywróć domyślny wygląd"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Przywróć domyślne ustawienia"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -931,7 +936,7 @@ msgstr "Przywróć domyślne ustawienia"
msgid "Save"
msgstr "Zapisz"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Zapisz wyglÄ…d"
@@ -1368,18 +1373,18 @@ msgid ""
"palette of your choice."
msgstr "Dostosuj wygląd grupy za pomocą wybranego obrazu tła i palety kolorów."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Nie można zaktualizować wyglądu."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Nie można zapisać ustawień wyglądu."
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Zapisano preferencje wyglÄ…du."
@@ -1703,7 +1708,7 @@ msgstr "Osobista wiadomość"
msgid "Optionally add a personal message to the invitation."
msgstr "Opcjonalnie dodaj osobistą wiadomość do zaproszenia."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Wyślij"
@@ -1809,11 +1814,11 @@ msgstr "Nie można usunąć użytkownika %s z grupy %s"
msgid "%s left group %s"
msgstr "Użytkownik %s opuścił grupę %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Jesteś już zalogowany."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "Nieprawidłowy lub wygasły token."
@@ -2029,8 +2034,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "To nie jest obsługiwany format danych."
@@ -2818,7 +2823,7 @@ msgstr "Nieprawidłowy adres URL profilu (błędny format)"
#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
msgstr ""
-"To nie jest prawidłowy adres URL profilu (brak dokumentu YADIS lub określono "
+"Nieprawidłowy adres URL profilu (brak dokumentu YADIS lub określono "
"nieprawidłowe XRDS)."
#: actions/remotesubscribe.php:176
@@ -4432,40 +4437,54 @@ msgstr "WÅ‚Ä…czono powiadomienia."
msgid "Can't turn on notification."
msgstr "Nie można włączyć powiadomień."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Nie można utworzyć aliasów."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "Nie subskrybujesz nikogo."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Subskrybujesz tÄ™ osobÄ™:"
msgstr[1] "Subskrybujesz te osoby:"
msgstr[2] "Subskrybujesz te osoby:"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "Nikt ciÄ™ nie subskrybuje."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Ta osoba ciÄ™ subskrybuje:"
msgstr[1] "Te osoby ciÄ™ subskrybujÄ…:"
msgstr[2] "Te osoby ciÄ™ subskrybujÄ…:"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Nie jesteś członkiem żadnej grupy."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Jesteś członkiem tej grupy:"
msgstr[1] "Jesteś członkiem tych grup:"
msgstr[2] "Jesteś członkiem tych grup:"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4485,6 +4504,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4521,9 +4541,8 @@ msgstr ""
"reply #<identyfikator_wpisu> - odpowiada na wpis z podanym identyfikatorem\n"
"reply <pseudonim> - odpowiada na ostatni wpis użytkownika\n"
"join <grupa> - dołącza do grupy\n"
-"login - uzyskuje odnośnik do zalogowania się w interfejsie WWW\n"
"drop <grupa> - opuszcza grupÄ™\n"
-"stats - uzyskuje twoje statystyki\n"
+"stats - uzyskuje statystyki\n"
"stop - to samo co \"off\"\n"
"quit - to samo co \"off\"\n"
"sub <pseudonim> - to samo co \"follow\"\n"
@@ -4531,10 +4550,10 @@ msgstr ""
"last <pseudonim> - to samo co \"get\"\n"
"on <pseudonim> - jeszcze nie zaimplementowano.\n"
"off <pseudonim> - jeszcze nie zaimplementowano.\n"
-"nudge <pseudonim> - jeszcze nie zaimplementowano.\n"
+"nudge <pseudonim> - przypomina użytkownikowi o aktualizacji.\n"
"invite <numer telefonu> - jeszcze nie zaimplementowano.\n"
-"track <słowo> - jeszcze nie zaimplementowano.\n"
-"untrack <słowo> - jeszcze nie zaimplementowano.\n"
+"track <wyraz> - jeszcze nie zaimplementowano.\n"
+"untrack <wyraz> - jeszcze nie zaimplementowano.\n"
"track off - jeszcze nie zaimplementowano.\n"
"untrack all - jeszcze nie zaimplementowano.\n"
"tracks - jeszcze nie zaimplementowano.\n"
@@ -4581,11 +4600,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Można wysłać osobisty obraz tła. Maksymalny rozmiar pliku to 2 MB."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Błędne domyślne ustawienia koloru: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Przywrócono domyślny wygląd."
@@ -5123,7 +5138,7 @@ msgstr "Wyślij bezpośredni wpis"
msgid "To"
msgstr "Do"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Dostępne znaki"
@@ -5136,11 +5151,11 @@ msgstr "Wyślij wpis"
msgid "What's up, %s?"
msgstr "Co słychać, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Załącz"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Załącz plik"
@@ -5407,7 +5422,12 @@ msgstr "Nie można subskrybować innych do ciebie."
msgid "Not subscribed!"
msgstr "Niesubskrybowane."
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Nie można usunąć autosubskrypcji."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Nie można usunąć subskrypcji."
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index c5b3c9515..54cc569f2 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:35+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:13+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@@ -96,8 +96,8 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
-"Tente [acotovelar o(a) %s](../%s) a partir do perfil ou [publicar qualquer "
-"coisa à sua atenção](%%%%action.newnotice%%%%?status_textarea=%s)."
+"Tente [acotovelar %s](../%s) a partir do perfil ou [publicar qualquer coisa "
+"à sua atenção](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
#, php-format
@@ -105,8 +105,8 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
-"Podia [registar uma conta](%%%%action.register%%%%) e depois acotovelar o(a) "
-"%s ou publicar uma nota à sua atenção."
+"Podia [registar uma conta](%%%%action.register%%%%) e depois acotovelar %s "
+"ou publicar uma nota à sua atenção."
#: actions/all.php:165
msgid "You and friends"
@@ -115,7 +115,7 @@ msgstr "Você e amigos"
#: actions/allrss.php:119 actions/apitimelinefriends.php:121
#, php-format
msgid "Updates from %1$s and friends on %2$s!"
-msgstr "Actualizações do(a) %1$s e amigos no %2$s!"
+msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apiaccountratelimitstatus.php:70
#: actions/apiaccountupdatedeliverydevice.php:93
@@ -187,7 +187,11 @@ msgstr "Utilizador não tem perfil."
msgid "Could not save profile."
msgstr "Não foi possível gravar o perfil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Os utilizadores não podem bloquear-se a si próprios!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Bloqueio do utilizador falhou."
@@ -216,7 +220,7 @@ msgstr ""
#: actions/apidirectmessage.php:89
#, php-format
msgid "Direct messages from %s"
-msgstr "Mensagens directas do(a) %s"
+msgstr "Mensagens directas de %s"
#: actions/apidirectmessage.php:93
#, php-format
@@ -396,7 +400,7 @@ msgstr "Não foi possível remover %s do grupo %s."
#: actions/apigrouplistall.php:90 actions/usergroups.php:62
#, php-format
msgid "%s groups"
-msgstr "Grupos do(a) %s"
+msgstr "Grupos de %s"
#: actions/apigrouplistall.php:94
#, php-format
@@ -549,7 +553,7 @@ msgstr "Original"
#: actions/avatarsettings.php:141 actions/avatarsettings.php:214
#: actions/grouplogo.php:210 actions/grouplogo.php:271
msgid "Preview"
-msgstr "Antever"
+msgstr "Antevisão"
#: actions/avatarsettings.php:148 lib/deleteuserform.php:66
#: lib/noticelist.php:550
@@ -568,7 +572,7 @@ msgstr "Cortar"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -822,45 +826,45 @@ msgstr "Design"
msgid "Design settings for this StatusNet site."
msgstr "Configurações do design deste site StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "URL do logótipo inválida."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Tema não está disponível: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Alterar logótipo"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Logótipo do site"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Alterar tema"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Tema do site"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "O tema para o site."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Alterar imagem de fundo"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr "Imagem de fundo"
+msgstr "Fundo"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -869,55 +873,55 @@ msgstr ""
"Pode carregar uma imagem de fundo para o site. O tamanho máximo do ficheiro "
"é %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "Ligar"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Desligar"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Ligar ou desligar a imagem de fundo."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "Repetir imagem de fundo em mosaico"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Alterar cores"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Conteúdo"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
-msgstr "Barra lateral"
+msgstr "Lateral"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texto"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "Ligações"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Usar predefinições"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Repor designs predefinidos"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "Repor predefinição"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -927,7 +931,7 @@ msgstr "Repor predefinição"
msgid "Save"
msgstr "Gravar"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Gravar o design"
@@ -1201,7 +1205,7 @@ msgstr ""
#: lib/personalgroupnav.php:115
#, php-format
msgid "%s's favorite notices"
-msgstr "Notas favoritas do(a) %s"
+msgstr "Notas favoritas de %s"
#: actions/favoritesrss.php:115
#, php-format
@@ -1369,18 +1373,18 @@ msgstr ""
"Personalize o aspecto do seu grupo com uma imagem de fundo e uma paleta de "
"cores à sua escolha."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Não foi possível actualizar o design."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Não foi possível actualizar as suas configurações do design!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Preferências do design foram gravadas."
@@ -1453,8 +1457,8 @@ msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Procure grupos em %%site.name%% pelo seu nome, localização ou descrição. "
-"Separe os termos de busca com espaços; precisam de ter 3 ou mais caracteres."
+"Procure grupos neste site pesquisando o nome, localização ou descrição. Os "
+"termos de busca devem ter 3 ou mais caracteres e ser separados por espaços."
#: actions/groupsearch.php:58
msgid "Group search"
@@ -1631,7 +1635,8 @@ msgstr "Caixa de entrada de %s"
#: actions/inbox.php:115
msgid "This is your inbox, which lists your incoming private messages."
msgstr ""
-"Esta é a sua caixa de entrada, que apresenta as mensagens privadas recebidas."
+"Esta é a sua caixa de entrada, que apresenta as mensagens privadas que "
+"recebeu."
#: actions/invite.php:39
msgid "Invites have been disabled."
@@ -1704,9 +1709,9 @@ msgstr "Mensagem pessoal"
#: actions/invite.php:194
msgid "Optionally add a personal message to the invitation."
-msgstr "Pode optar por acrescentar uma mensagem pessoal ao convite."
+msgstr "Pode optar por acrescentar uma mensagem pessoal ao convite"
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Enviar"
@@ -1811,11 +1816,11 @@ msgstr "Não foi possível remover o utilizador %s do grupo %s"
msgid "%s left group %s"
msgstr "%s deixou o grupo %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Sessão já foi iniciada."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "Chave inválida ou expirada."
@@ -1958,8 +1963,8 @@ msgid ""
"Search for notices on %%site.name%% by their contents. Separate search terms "
"by spaces; they must be 3 characters or more."
msgstr ""
-"Procure notas em %%site.name%% pelo seu conteúdo. Separe os termos de busca "
-"com espaços; precisam de ter 3 ou mais caracteres."
+"Procure notas neste site pesquisando o seu conteúdo. Os termos de busca "
+"devem ter 3 ou mais caracteres e ser separados por espaços."
#: actions/noticesearch.php:78
msgid "Text search"
@@ -2028,10 +2033,10 @@ msgstr "tipo de conteúdo "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -2061,15 +2066,15 @@ msgstr "Compactar URLs com"
#: actions/othersettings.php:117
msgid "Automatic shortening service to use."
-msgstr "Serviço de compactação automático a utilizar."
+msgstr "Serviço de compactação automática que será usado"
#: actions/othersettings.php:122
msgid "View profile designs"
-msgstr "Ver designs de perfis"
+msgstr "Ver o design dos perfis"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr "Mostrar ou esconder designs de perfis"
+msgstr "Mostrar ou esconder o design dos perfis"
#: actions/othersettings.php:153
msgid "URL shortening service is too long (max 50 chars)."
@@ -2088,7 +2093,7 @@ msgstr "Caixa de saída de %s"
#: actions/outbox.php:116
msgid "This is your outbox, which lists private messages you have sent."
msgstr ""
-"Esta é a sua caixa de saída, que apresenta as mensagens privadas enviadas."
+"Esta é a sua caixa de saída, que apresenta as mensagens privadas que enviou."
#: actions/passwordsettings.php:58
msgid "Change password"
@@ -2258,8 +2263,8 @@ msgid ""
"Search for people on %%site.name%% by their name, location, or interests. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Procure pessoas em %%site.name%% pelo seu nome, localidade ou interesses. "
-"Separe os termos de busca com espaços; precisam de ter 3 ou mais caracteres."
+"Procure pessoas neste site pesquisando o nome, localidade ou interesses. Os "
+"termos de busca devem ter 3 ou mais caracteres e ser separados por espaços."
#: actions/peoplesearch.php:58
msgid "People search"
@@ -2316,7 +2321,8 @@ msgstr "Página de acolhimento"
#: actions/profilesettings.php:117 actions/register.php:454
msgid "URL of your homepage, blog, or profile on another site"
-msgstr "URL da uma página sua, blogue ou perfil noutro sítio na internet"
+msgstr ""
+"URL da sua página de acolhimento, blogue ou perfil noutro site na internet"
#: actions/profilesettings.php:122 actions/register.php:460
#, php-format
@@ -2708,7 +2714,7 @@ msgstr "Repita a palavra-chave acima. Obrigatório."
#: actions/register.php:437 actions/register.php:441
#: actions/siteadminpanel.php:283 lib/accountsettingsaction.php:120
msgid "Email"
-msgstr "Correio electrónico"
+msgstr "Correio"
#: actions/register.php:438 actions/register.php:442
msgid "Used only for updates, announcements, and password recovery"
@@ -2753,7 +2759,8 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Parabéns, %s! Bem-vindo(a) ao %%%%site.name%%%%. A partir daqui, pode...\n"
+"Parabéns, %s! Bem-vindo(a) ao site %%%%site.name%%%%. A partir daqui, "
+"pode...\n"
"\n"
"* Visitar o [seu perfil](%s) e enviar a primeira mensagem.\n"
"* Adicionar um [endereço Jabber/GTalk](%%%%action.imsettings%%%%) de forma a "
@@ -2821,11 +2828,10 @@ msgid "Invalid profile URL (bad format)"
msgstr "URL de perfil inválido (formato incorrecto)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
msgstr ""
-"URL de perfil não é válida (nenhum documento Yadis ou nenhum XRDS inválido "
-"definidos)."
+"URL do perfil não é válida (não há um documento Yadis, ou foi definido um "
+"XRDS inválido)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
@@ -3041,7 +3047,7 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-"**%s** é um grupo de utilizadores em %%%%site.name%%%%, um serviço de "
+"**%s** é um grupo de utilizadores no site %%%%site.name%%%%, um serviço de "
"[microblogues](http://en.wikipedia.org/wiki/Micro-blogging) baseado na "
"aplicação de Software Livre [StatusNet](http://status.net/). Os membros "
"deste grupo partilham mensagens curtas acerca das suas vidas e interesses. "
@@ -3056,7 +3062,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
-"**%s** é um grupo de utilizadores em %%%%site.name%%%%, um serviço de "
+"**%s** é um grupo de utilizadores no site %%%%site.name%%%%, um serviço de "
"[microblogues](http://en.wikipedia.org/wiki/Micro-blogging) baseado na "
"aplicação de Software Livre [StatusNet](http://status.net/). Os membros "
"deste grupo partilham mensagens curtas acerca das suas vidas e interesses. "
@@ -3152,7 +3158,7 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-"**%s** tem uma conta em %%%%site.name%%%%, um serviço de [microblogues]"
+"**%s** tem uma conta no site %%%%site.name%%%%, um serviço de [microblogues]"
"(http://en.wikipedia.org/wiki/Micro-blogging) baseado na aplicação de "
"Software Livre [StatusNet](http://status.net/). [Registe-se agora](%%%%"
"action.register%%%%) para seguir as notas de **%s** e de muitos mais! "
@@ -3165,7 +3171,7 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
-"**%s** tem uma conta em %%%%site.name%%%%, um serviço de [microblogues]"
+"**%s** tem uma conta no site %%%%site.name%%%%, um serviço de [microblogues]"
"(http://en.wikipedia.org/wiki/Micro-blogging) baseado na aplicação de "
"Software Livre [StatusNet](http://status.net/). "
@@ -3914,7 +3920,7 @@ msgstr "Tipo de imagem incorrecto para o avatar da URL ‘%s’."
#: actions/userbyid.php:70
msgid "No id."
-msgstr ""
+msgstr "Nenhuma identificação."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
msgid "Profile design"
@@ -4141,7 +4147,7 @@ msgstr "Ajudem-me!"
#: lib/action.php:464 lib/searchaction.php:127
msgid "Search"
-msgstr "Pesquisar"
+msgstr "Pesquisa"
#: lib/action.php:464
msgid "Search for people or text"
@@ -4181,7 +4187,7 @@ msgstr "Privacidade"
#: lib/action.php:737
msgid "Source"
-msgstr "Fonte"
+msgstr "Código"
#: lib/action.php:739
msgid "Contact"
@@ -4201,8 +4207,8 @@ msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-"**%%site.name%%*** é um serviço de microblogues disponibilizado por [%%site."
-"broughtby%%](%%site.broughtbyurl%%)."
+"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site."
+"broughtby%%](%%site.broughtbyurl%%). "
#: lib/action.php:774
#, php-format
@@ -4226,7 +4232,7 @@ msgstr "Licença de conteúdos do site"
#: lib/action.php:799
msgid "All "
-msgstr ""
+msgstr "Tudo "
#: lib/action.php:804
msgid "license."
@@ -4404,7 +4410,7 @@ msgstr "Introduza o nome do utilizador para subscrever"
#: lib/command.php:502
#, php-format
msgid "Subscribed to %s"
-msgstr "Subscreveu o(a) %s"
+msgstr "Subscreveu %s"
#: lib/command.php:523
msgid "Specify the name of the user to unsubscribe from"
@@ -4413,7 +4419,7 @@ msgstr "Introduza o nome do utilizador para deixar de subscrever"
#: lib/command.php:530
#, php-format
msgid "Unsubscribed from %s"
-msgstr "Deixou de subscrever o(a) %s"
+msgstr "Deixou de subscrever %s"
#: lib/command.php:548 lib/command.php:571
msgid "Command not yet implemented."
@@ -4435,37 +4441,51 @@ msgstr "Notificação ligada."
msgid "Can't turn on notification."
msgstr "Não foi possível ligar a notificação."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Não foi possível criar cognomes."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "Não subscreveu ninguém."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Subscreve esta pessoa:"
msgstr[1] "Subscreve estas pessoas:"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "Ninguém subscreve as suas notas."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Esta pessoa subscreve as suas notas:"
msgstr[1] "Estas pessoas subscrevem as suas notas:"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Não está em nenhum grupo."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Está no grupo:"
msgstr[1] "Está nos grupos:"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4485,6 +4505,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4520,7 +4541,6 @@ msgstr ""
"reply #<id_da_nota> - responder à nota com esta identificação\n"
"reply <alcunha> - responder à última nota do utilizador\n"
"join <grupo> - juntar-se ao grupo\n"
-"login - Receber uma ligação para iniciar sessão na interface web\n"
"drop <grupo> - afastar-se do grupo\n"
"stats - receber as suas estatísticas\n"
"stop - o mesmo que 'off'\n"
@@ -4582,11 +4602,7 @@ msgstr ""
"Pode carregar uma imagem de fundo pessoal. O tamanho máximo do ficheiro é "
"2MB."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Configurações inadequadas das cores por omissão: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Predefinições do design repostas"
@@ -5124,7 +5140,7 @@ msgstr "Enviar uma nota directa"
msgid "To"
msgstr "Para"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Caracteres disponíveis"
@@ -5137,11 +5153,11 @@ msgstr "Enviar uma nota"
msgid "What's up, %s?"
msgstr "Novidades, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Anexar"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Anexar um ficheiro"
@@ -5408,7 +5424,11 @@ msgstr "Não foi possível que outro o subscrevesse."
msgid "Not subscribed!"
msgstr "Não subscrito!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Não foi possível apagar a auto-subscrição."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Não foi possível apagar a subscrição."
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index 31068710e..535520096 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:38+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:16+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "O usuário não tem perfil."
msgid "Could not save profile."
msgstr "Não foi possível salvar o perfil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Não foi possível atualizar o usuário."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Não foi possível bloquear o usuário."
@@ -254,16 +259,14 @@ msgid "No status found with that ID."
msgstr "Não foi encontrado nenhum status com esse ID."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite!"
-msgstr "Essa mensagem já é uma favorita!"
+msgstr "Esta mensagem já é favorita!"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "Não foi possível criar a favorita."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite!"
msgstr "Essa mensagem não é uma favorita!"
@@ -573,7 +576,7 @@ msgstr "Cortar"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -833,51 +836,51 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Tamanho inválido."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Esta página não está disponível em um "
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Altere a sua senha"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Convidar"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Alterar"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Nova mensagem"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "Sair deste site"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Alterar imagem de plano de fundo."
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -886,58 +889,58 @@ msgstr ""
"Você pode enviar uma imagem de plano de fundo para o site. O tamanho máximo "
"do arquivo é %l$s"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Ligado"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Altere a sua senha"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Conteúdo"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Procurar"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Texto"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Lista"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "Usar o padrão."
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -947,7 +950,7 @@ msgstr ""
msgid "Save"
msgstr "Salvar"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1395,20 +1398,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Não foi possível atualizar o usuário."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Não foi possível salvar suas configurações do Twitter!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "As preferências de sincronização foram salvas."
@@ -1734,7 +1737,7 @@ msgstr "Mensagem pessoal"
msgid "Optionally add a personal message to the invitation."
msgstr "Você pode, opcionalmente, adicionar uma mensagem pessoal ao convite."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Enviar"
@@ -1847,11 +1850,11 @@ msgstr "Não é possível acompanhar o usuário: Usuário não encontrado."
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Já está logado."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "O conteúdo da mensagem é inválido"
@@ -2069,8 +2072,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -4495,40 +4498,54 @@ msgstr "Notificação ligada."
msgid "Can't turn on notification."
msgstr "Não é possível ligar a notificação."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Não foi possível criar a favorita."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Você não está assinando esse perfil."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Você já está assinando esses usuários:"
msgstr[1] "Você já está assinando esses usuários:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Não foi possível fazer com que o outros o sigam."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Não foi possível fazer com que o outros o sigam."
msgstr[1] "Não foi possível fazer com que o outros o sigam."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Você não está assinando esse perfil."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Você não é membro deste grupo."
msgstr[1] "Você não é membro deste grupo."
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4547,6 +4564,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4611,11 +4629,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "Você pode enviar seu avatar pessoal. O tamanho máximo do arquivo é %s"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5080,7 +5094,7 @@ msgstr "Enviar uma mensagem direta"
msgid "To"
msgstr "Para"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "Caracteres disponíveis"
@@ -5093,11 +5107,11 @@ msgstr "Enviar uma mensagem"
msgid "What's up, %s?"
msgstr "E aí, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5378,7 +5392,12 @@ msgstr "Não foi possível fazer com que o outros o sigam."
msgid "Not subscribed!"
msgstr "Não é seguido!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Não foi possível excluir a assinatura."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Não foi possível excluir a assinatura."
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index 25e8d8e7c..713357714 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:42+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:20+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
@@ -190,7 +190,11 @@ msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ профилÑ."
msgid "Could not save profile."
msgstr "Ðе удаётÑÑ Ñохранить профиль."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Ð’Ñ‹ не можете заблокировать Ñамого ÑебÑ!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Ðеудача при блокировке пользователÑ."
@@ -577,7 +581,7 @@ msgstr "Обрезать"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -829,45 +833,45 @@ msgstr "Оформление"
msgid "Design settings for this StatusNet site."
msgstr "ÐаÑтройки Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñтого Ñайта StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "Ðеверный URL логотипа."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Тема не доÑтупна: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Изменить логотип"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Логотип Ñайта"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Изменить тему"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Тема Ñайта"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Тема Ð´Ð»Ñ Ñайта."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Изменение фонового изображениÑ"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Фон"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -876,55 +880,55 @@ msgstr ""
"Ð’Ñ‹ можете загрузить фоновое изображение Ð´Ð»Ñ Ñайта. МакÑимальный размер файла "
"ÑоÑтавлÑет %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Включить"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Отключить"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "Включить или отключить показ фонового изображениÑ."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "РаÑÑ‚Ñнуть фоновое изображение"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Изменение цветовой гаммы"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "Содержание"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Ð‘Ð¾ÐºÐ¾Ð²Ð°Ñ Ð¿Ð°Ð½ÐµÐ»ÑŒ"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "ТекÑÑ‚"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "СÑылки"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "ИÑпользовать Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "ВоÑÑтановить оформление по умолчанию"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -934,7 +938,7 @@ msgstr "ВоÑÑтановить Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ умолчанию"
msgid "Save"
msgstr "Сохранить"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Сохранить оформление"
@@ -1381,18 +1385,18 @@ msgstr ""
"ÐаÑтройте внешний вид группы, уÑтановив фоновое изображение и цветовую гамму "
"на ваш выбор."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ ваше оформление."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Ðе удаётÑÑ Ñохранить ваши наÑтройки оформлениÑ!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "ÐаÑтройки Ð¾Ñ„Ð¾Ñ€Ð¼Ð»ÐµÐ½Ð¸Ñ Ñохранены."
@@ -1719,7 +1723,7 @@ msgstr "Личное Ñообщение"
msgid "Optionally add a personal message to the invitation."
msgstr "Можно добавить к приглашению личное Ñообщение."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "ОК"
@@ -1825,11 +1829,11 @@ msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s из гр
msgid "%s left group %s"
msgstr "%s покинул группу %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Ð’Ñ‹ уже авторизовалиÑÑŒ."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "Ðеверный или уÑтаревший ключ."
@@ -2043,8 +2047,8 @@ msgstr "тип Ñодержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Ðеподдерживаемый формат данных."
@@ -2830,11 +2834,8 @@ msgid "Invalid profile URL (bad format)"
msgstr "Ðеверный URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (плохой формат)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr ""
-"Ðеверный URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ (не YADIS-документ либо не указан или указан неверный "
-"XRDS)."
+msgstr "Ðеправильный URL-профиль (нет YADIS-документа, либо неверный XRDS)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
@@ -4450,40 +4451,54 @@ msgstr "ЕÑÑ‚ÑŒ оповещение."
msgid "Can't turn on notification."
msgstr "ЕÑÑ‚ÑŒ оповещение."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "Ð’Ñ‹ ни на кого не подпиÑаны."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[1] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[2] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "Ðикто не подпиÑан на ваÑ."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[1] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[2] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Ð’Ñ‹ не ÑоÑтоите ни в одной группе."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
msgstr[1] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
msgstr[2] "Ð’Ñ‹ ÑвлÑетеÑÑŒ учаÑтником Ñледующих групп:"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4503,6 +4518,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4538,7 +4554,6 @@ msgstr ""
"reply #<notice_id> — ответить на запиÑÑŒ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ id\n"
"reply <nickname> — ответить на поÑледнюю запиÑÑŒ пользователÑ\n"
"join <group> — приÑоединитьÑÑ Ðº группе\n"
-"login — получить ÑÑылку на вход в веб-интерфейÑ\n"
"drop <group> — покинуть группу\n"
"stats — получить Ñвою ÑтатиÑтику\n"
"stop — то же, что и 'off'\n"
@@ -4600,11 +4615,7 @@ msgstr ""
"Ð’Ñ‹ можете загрузить ÑобÑтвенное фоновое изображение. МакÑимальный размер "
"файла ÑоÑтавлÑет 2МБ."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Плохие наÑтройки цвета по умолчанию: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Оформление по умолчанию воÑÑтановлено."
@@ -5141,7 +5152,7 @@ msgstr "ПоÑлать прÑмую запиÑÑŒ"
msgid "To"
msgstr "ДлÑ"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "6 или больше знаков"
@@ -5154,11 +5165,11 @@ msgstr "ПоÑлать запиÑÑŒ"
msgid "What's up, %s?"
msgstr "Что нового, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "Прикрепить"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "Прикрепить файл"
@@ -5425,7 +5436,11 @@ msgstr "Ðе удаётÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñать других на вашу лен
msgid "Not subscribed!"
msgstr "Ðе подпиÑаны!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Ðевозможно удалить ÑамоподпиÑку."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку."
diff --git a/locale/statusnet.po b/locale/statusnet.po
index 0ab702ae5..dce6f6551 100644
--- a/locale/statusnet.po
+++ b/locale/statusnet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
+"POT-Creation-Date: 2009-12-07 21: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"
@@ -176,7 +176,11 @@ msgstr ""
msgid "Could not save profile."
msgstr ""
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr ""
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -555,7 +559,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -800,100 +804,100 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr ""
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr ""
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr ""
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr ""
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr ""
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr ""
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr ""
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr ""
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr ""
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr ""
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -903,7 +907,7 @@ msgstr ""
msgid "Save"
msgstr ""
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1325,18 +1329,18 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr ""
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
@@ -1632,7 +1636,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr ""
@@ -1712,11 +1716,11 @@ msgstr ""
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr ""
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr ""
@@ -1917,8 +1921,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4176,37 +4180,51 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, php-format
+msgid "Could not create login token for %s"
+msgstr ""
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4225,6 +4243,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4285,11 +4304,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4733,7 +4748,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr ""
@@ -4746,11 +4761,11 @@ msgstr ""
msgid "What's up, %s?"
msgstr ""
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5017,7 +5032,11 @@ msgstr ""
msgid "Not subscribed!"
msgstr ""
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index 8421ccdb0..01e895f8e 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -1,5 +1,6 @@
# Translation of StatusNet to Swedish
#
+# Author@translatewiki.net: Jamminjohn
# Author@translatewiki.net: McDutchie
# --
# This file is distributed under the same license as the StatusNet package.
@@ -8,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:46+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:23+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
@@ -21,9 +22,8 @@ msgstr ""
#: actions/all.php:63 actions/public.php:97 actions/replies.php:92
#: actions/showfavorites.php:137 actions/tag.php:51
-#, fuzzy
msgid "No such page"
-msgstr "Inget sådant meddelande."
+msgstr "Ingen sådan sida"
#: actions/all.php:74 actions/allrss.php:68
#: actions/apiaccountupdatedeliverydevice.php:113
@@ -48,39 +48,39 @@ msgstr "Inget sådant meddelande."
#: lib/galleryaction.php:59 lib/mailbox.php:82 lib/profileaction.php:77
#: lib/subs.php:34 lib/subs.php:116
msgid "No such user."
-msgstr "Ingen sådan användare"
+msgstr "Ingen sådan användare."
#: actions/all.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%s and friends, page %d"
-msgstr "%s med vänner"
+msgstr "%s och vänner, sida %d"
#: actions/all.php:86 actions/all.php:167 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 lib/personalgroupnav.php:100
#, php-format
msgid "%s and friends"
-msgstr "%s med vänner"
+msgstr "%s och vänner"
#: actions/all.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 1.0)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöden för %ss vänner (RSS 1.0)"
#: actions/all.php:107
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (RSS 2.0)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöden för %ss vänner (RSS 2.0)"
#: actions/all.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Feed for friends of %s (Atom)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöden för %ss vänner (Atom)"
#: actions/all.php:127
#, php-format
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
-msgstr ""
+msgstr "Detta är tidslinjen för %s och vänner men ingen har postat något än."
#: actions/all.php:132
#, php-format
@@ -88,6 +88,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Prova att prenumerera på fler personer, [gå med i en grupp](%%action.groups%"
+"%) eller posta något själv."
#: actions/all.php:134
#, php-format
@@ -95,6 +97,9 @@ msgid ""
"You can try to [nudge %s](../%s) from his profile or [post something to his "
"or her attention](%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"Du kan prova att [knuffa %s](../%s) från dennes profil eller [posta "
+"någonting för hans eller hennes uppmärksamhet](%%%%action.newnotice%%%%?"
+"status_textarea=%s)."
#: actions/all.php:137 actions/replies.php:209 actions/showstream.php:202
#, php-format
@@ -102,11 +107,12 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
"post a notice to his or her attention."
msgstr ""
+"Varför inte [registrera ett konto](%%%%action.register%%%%) och sedan knuffa "
+"%s eller posta en notis för hans eller hennes uppmärksamhet."
#: actions/all.php:165
-#, fuzzy
msgid "You and friends"
-msgstr "%s med vänner"
+msgstr "Du och vänner"
#: actions/allrss.php:119 actions/apitimelinefriends.php:121
#, php-format
@@ -118,9 +124,8 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apiaccountupdateprofilebackgroundimage.php:94
#: actions/apiaccountupdateprofilecolors.php:118
#: actions/apiaccountupdateprofile.php:97
-#, fuzzy
msgid "API method not found."
-msgstr "API-metoden hittades inte!"
+msgstr "API-metoden hittades inte"
#: actions/apiaccountupdatedeliverydevice.php:85
#: actions/apiaccountupdateprofilebackgroundimage.php:86
@@ -139,10 +144,9 @@ msgstr "Denna metod kräver en POST."
msgid ""
"You must specify a parameter named 'device' with a value of one of: sms, im, "
"none"
-msgstr ""
+msgstr "Du måste ange ett värdet på parametern 'device': sms, im, none"
#: actions/apiaccountupdatedeliverydevice.php:132
-#, fuzzy
msgid "Could not update user."
msgstr "Kunde inte uppdatera användare."
@@ -156,20 +160,20 @@ msgid ""
"The server was unable to handle that much POST data (%s bytes) due to its "
"current configuration."
msgstr ""
+"Servern kunde inte hantera så mycket POST-data (%s byte) på grund av sin "
+"nuvarande konfiguration."
#: actions/apiaccountupdateprofilebackgroundimage.php:136
#: actions/apiaccountupdateprofilebackgroundimage.php:146
#: actions/apiaccountupdateprofilecolors.php:164
#: actions/apiaccountupdateprofilecolors.php:174
-#, fuzzy
msgid "Unable to save your design settings."
-msgstr "Kunde inte spara dina Twitter inställningar!"
+msgstr "Kunde inte spara dina utseendeinställningar."
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
-#, fuzzy
msgid "Could not update your design."
-msgstr "Kunde inte uppdatera användare."
+msgstr "Kunde inte uppdatera din profils utseende."
#: actions/apiaccountupdateprofilebackgroundimage.php:194
#: actions/apiaccountupdateprofilecolors.php:185
@@ -181,45 +185,47 @@ msgid "User has no profile."
msgstr "Användaren har ingen profil."
#: actions/apiaccountupdateprofile.php:147
-#, fuzzy
msgid "Could not save profile."
msgstr "Kunde inte spara profil."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Du kan inte blockera dig själv!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
-msgstr ""
+msgstr "Blockering av användare misslyckades."
#: actions/apiblockdestroy.php:107
msgid "Unblock user failed."
-msgstr ""
+msgstr "Hävning av blockering av användare misslyckades."
#: actions/apidirectmessagenew.php:126
msgid "No message text!"
-msgstr "Ingen meddelande text!"
+msgstr "Ingen meddelandetext!"
#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max message size is %d chars."
-msgstr "Det är för långt. Max är 140 tecken. "
+msgstr "Detta är för långt. Maximal meddelandestorlek är %d tecken."
#: actions/apidirectmessagenew.php:146
msgid "Recipient user not found."
-msgstr "Mottagaren kunde inte hittas."
+msgstr "Mottagare hittades inte."
#: actions/apidirectmessagenew.php:150
msgid "Can't send direct messages to users who aren't your friend."
-msgstr ""
-"Kan inte skicka direktmeddelanden till användare som inte är dina vänner."
+msgstr "Kan inte skicka direktmeddelanden till användare som inte är din vän."
#: actions/apidirectmessage.php:89
-#, fuzzy, php-format
+#, php-format
msgid "Direct messages from %s"
-msgstr "Direktmeddelande till %s"
+msgstr "Direktmeddelande från %s"
#: actions/apidirectmessage.php:93
#, php-format
msgid "All the direct messages sent from %s"
-msgstr "Alla direktmeddelanden skickade ifrån %s"
+msgstr "Alla direktmeddelanden skickade från %s"
#: actions/apidirectmessage.php:101
#, php-format
@@ -251,57 +257,52 @@ msgstr "API-metoden hittades inte!"
#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
#: actions/apistatusesdestroy.php:113
msgid "No status found with that ID."
-msgstr "Ingen status hittad med det ID"
+msgstr "Ingen status hittad med det ID:t."
#: actions/apifavoritecreate.php:119
-#, fuzzy
msgid "This status is already a favorite!"
-msgstr "Detta inlägg är redan en favorit!"
+msgstr "Denna status är redan en favorit!"
#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
msgid "Could not create favorite."
msgstr "Kunde inte skapa favorit."
#: actions/apifavoritedestroy.php:122
-#, fuzzy
msgid "That status is not a favorite!"
-msgstr "Det inlägget är ingen favorit!"
+msgstr "Denna status är inte en favorit!"
#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
msgid "Could not delete favorite."
-msgstr "Kunde inte tabort favoriten."
+msgstr "Kunde inte ta bort favoriten."
#: actions/apifriendshipscreate.php:109
msgid "Could not follow user: User not found."
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte följa användare: användare hittades inte."
#: actions/apifriendshipscreate.php:118
#, php-format
msgid "Could not follow user: %s is already on your list."
-msgstr "Kunde inte följa användaren: %s finns redan i din lista."
+msgstr "Kunde inte följa användare: %s finns redan i din lista."
#: actions/apifriendshipsdestroy.php:109
-#, fuzzy
msgid "Could not unfollow user: User not found."
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte sluta följa användaren: användaren hittades inte."
#: actions/apifriendshipsdestroy.php:120
msgid "You cannot unfollow yourself!"
-msgstr ""
+msgstr "Du kan inte sluta följa dig själv!"
#: actions/apifriendshipsexists.php:94
msgid "Two user ids or screen_names must be supplied."
-msgstr "Två användarid eller namn måste läggas till."
+msgstr "Två användar-ID:n eller screen_names måste tillhandahållas."
#: actions/apifriendshipsshow.php:135
-#, fuzzy
msgid "Could not determine source user."
-msgstr "Kunde inte ta emot favoritinläggen."
+msgstr ""
#: actions/apifriendshipsshow.php:143
-#, fuzzy
msgid "Could not find target user."
-msgstr "Kunde inte få fram status."
+msgstr ""
#: actions/apigroupcreate.php:164 actions/editgroup.php:182
#: actions/newgroup.php:126 actions/profilesettings.php:208
@@ -314,133 +315,129 @@ msgstr ""
#: actions/newgroup.php:130 actions/profilesettings.php:231
#: actions/register.php:208
msgid "Nickname already in use. Try another one."
-msgstr "Användarnamnet används redan, försök med ett annat."
+msgstr "Smeknamnet används redan. Försök med ett annat."
#: actions/apigroupcreate.php:180 actions/editgroup.php:189
#: actions/newgroup.php:133 actions/profilesettings.php:211
#: actions/register.php:210
msgid "Not a valid nickname."
-msgstr "Det är inget giltigt användarnamn."
+msgstr "Inte ett giltigt smeknamn."
#: actions/apigroupcreate.php:196 actions/editgroup.php:195
#: actions/newgroup.php:139 actions/profilesettings.php:215
#: actions/register.php:217
msgid "Homepage is not a valid URL."
-msgstr "Hemsidan har ingen giltig URL"
+msgstr "Hemsida är inte en giltig URL."
#: actions/apigroupcreate.php:205 actions/editgroup.php:198
#: actions/newgroup.php:142 actions/profilesettings.php:218
#: actions/register.php:220
msgid "Full name is too long (max 255 chars)."
-msgstr "Ditt namn är för långt (max 255 tecken)."
+msgstr "Fullständigt namn är för långt (max 255 tecken)."
#: actions/apigroupcreate.php:213
-#, fuzzy, php-format
+#, php-format
msgid "Description is too long (max %d chars)."
-msgstr "Biografin är för lång (max 140 tecken)"
+msgstr "Beskrivning är för lång (max 140 tecken)"
#: actions/apigroupcreate.php:224 actions/editgroup.php:204
#: actions/newgroup.php:148 actions/profilesettings.php:225
#: actions/register.php:227
msgid "Location is too long (max 255 chars)."
-msgstr "Platse är för lång (max 255 tecken)."
+msgstr "Beskrivning av plats är för lång (max 255 tecken)."
#: actions/apigroupcreate.php:243 actions/editgroup.php:215
#: actions/newgroup.php:159
#, php-format
msgid "Too many aliases! Maximum %d."
-msgstr ""
+msgstr "För många alias! Maximum %d."
#: actions/apigroupcreate.php:264 actions/editgroup.php:224
#: actions/newgroup.php:168
-#, fuzzy, php-format
+#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Ogiltig hemsideadress '%s'"
+msgstr "Ogiltigt alias: \"%s\""
#: actions/apigroupcreate.php:273 actions/editgroup.php:228
#: actions/newgroup.php:172
-#, fuzzy, php-format
+#, php-format
msgid "Alias \"%s\" already in use. Try another one."
-msgstr "Användarnamnet används redan, försök med ett annat."
+msgstr "Alias \"%s\" används redan. Försök med ett annat."
#: actions/apigroupcreate.php:286 actions/editgroup.php:234
#: actions/newgroup.php:178
msgid "Alias can't be the same as nickname."
-msgstr ""
+msgstr "Alias kan inte vara samma som smeknamn."
#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
#: actions/apigroupshow.php:90 actions/apitimelinegroup.php:91
-#, fuzzy
msgid "Group not found!"
-msgstr "API-metoden hittades inte!"
+msgstr "Grupp hittades inte!"
#: actions/apigroupjoin.php:110
-#, fuzzy
msgid "You are already a member of that group."
-msgstr "Du prenumererar redan på dessa användare:"
+msgstr "Du är redan en medlem i denna grupp."
#: actions/apigroupjoin.php:119 actions/joingroup.php:95 lib/command.php:221
msgid "You have been blocked from that group by the admin."
-msgstr ""
+msgstr "Du har blivit blockerad från denna grupp av administratören."
#: actions/apigroupjoin.php:138
-#, fuzzy, php-format
+#, php-format
msgid "Could not join user %s to group %s."
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte ansluta användare % till grupp %s."
#: actions/apigroupleave.php:114
-#, fuzzy
msgid "You are not a member of this group."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Du är inte en medlem i denna grupp."
#: actions/apigroupleave.php:124
-#, fuzzy, php-format
+#, php-format
msgid "Could not remove user %s to group %s."
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte ta bort användare %s från grupp %s."
#: actions/apigrouplistall.php:90 actions/usergroups.php:62
#, php-format
msgid "%s groups"
-msgstr ""
+msgstr "%s grupper"
#: actions/apigrouplistall.php:94
-#, fuzzy, php-format
+#, php-format
msgid "groups on %s"
-msgstr "Sök personer på denna sida"
+msgstr "grupper på %s"
#: actions/apigrouplist.php:95
-#, fuzzy, php-format
+#, php-format
msgid "%s's groups"
-msgstr "%s / Favoriter från %s"
+msgstr "%ss grupper"
#: actions/apigrouplist.php:103
-#, fuzzy, php-format
+#, php-format
msgid "Groups %s is a member of on %s."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Grupper %s är en medlem i på %s."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
-msgstr "Denna metod kräver antingen skicka eller tabort."
+msgstr "Denna metod kräver en POST eller en DELETE."
#: actions/apistatusesdestroy.php:130
msgid "You may not delete another user's status."
-msgstr "Du kan inte tabort nån annan användares status."
+msgstr "Du kan inte ta bort en annan användares status."
#: actions/apistatusesshow.php:138
-#, fuzzy
msgid "Status deleted."
-msgstr "Användarbilden uppdaterad."
+msgstr "Status borttagen."
#: actions/apistatusesshow.php:144
msgid "No status with that ID found."
-msgstr "Ingen status med det ID hittades."
+msgstr "Ingen status med det ID:t hittades."
#: actions/apistatusesupdate.php:157 actions/newnotice.php:155
#: scripts/maildaemon.php:71
-#, fuzzy, php-format
+#, php-format
msgid "That's too long. Max notice size is %d chars."
-msgstr "För långt. Maximalt 140 tecken"
+msgstr "Det är för långt. Maximal notisstorlek är %d tecken."
#: actions/apistatusesupdate.php:198
msgid "Not found"
@@ -449,12 +446,11 @@ msgstr "Hittades inte"
#: actions/apistatusesupdate.php:227 actions/newnotice.php:183
#, php-format
msgid "Max notice size is %d chars, including attachment URL."
-msgstr ""
+msgstr "Maximal notisstorlek är %d tecken, inklusive bilage-URL."
#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
-#, fuzzy
msgid "Unsupported format."
-msgstr "Bildfilens format stödjs inte."
+msgstr "Format som inte stödjs."
#: actions/apitimelinefavorites.php:107
#, php-format
@@ -464,7 +460,7 @@ msgstr "%s / Favoriter från %s"
#: actions/apitimelinefavorites.php:119
#, php-format
msgid "%s updates favorited by %s / %s."
-msgstr "%s uppdaterade favoriter av %s / %s."
+msgstr "%s uppdateringar markerade som favorit av %s / %s."
#: actions/apitimelinegroup.php:108 actions/apitimelineuser.php:117
#: actions/grouprss.php:131 actions/userrss.php:90
@@ -479,14 +475,14 @@ msgid "Updates from %1$s on %2$s!"
msgstr "Uppdateringar från %1$s på %2$s!"
#: actions/apitimelinementions.php:116
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Updates mentioning %2$s"
-msgstr "%1$s / Uppdateringar med svar till %2$s"
+msgstr "%1$s / Uppdateringar som nämner %2$s"
#: actions/apitimelinementions.php:126
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
-msgstr "%1$s uppdateringar med svar till uppdatering från %2$s / %3$s."
+msgstr "%1$s uppdateringar med svar på uppdatering från %2$s / %3$s."
#: actions/apitimelinepublic.php:106 actions/publicrss.php:103
#, php-format
@@ -496,49 +492,48 @@ msgstr "%s publika tidslinje"
#: actions/apitimelinepublic.php:110 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
-msgstr "%s uppdateringar ifrån allihop!"
+msgstr "%s uppdateringar från alla!"
#: actions/apitimelinetag.php:101 actions/tag.php:66
#, php-format
msgid "Notices tagged with %s"
-msgstr "Inlägg taggade med %s"
+msgstr "Notiser taggade med %s"
#: actions/apitimelinetag.php:107 actions/tagrss.php:64
-#, fuzzy, php-format
+#, php-format
msgid "Updates tagged with %1$s on %2$s!"
-msgstr "Uppdateringar från %1$s på %2$s!"
+msgstr "Uppdateringar taggade med %1$s på %2$s!"
#: actions/apiusershow.php:96
-#, fuzzy
msgid "Not found."
-msgstr "Hittades inte"
+msgstr "Hittades inte."
#: actions/attachment.php:73
-#, fuzzy
msgid "No such attachment."
-msgstr "Inget sådant dokument."
+msgstr "Ingen sådan bilaga."
#: actions/avatarbynickname.php:59 actions/leavegroup.php:76
msgid "No nickname."
-msgstr "Inget användarnamn"
+msgstr "Inget smeknamn."
#: actions/avatarbynickname.php:64
msgid "No size."
-msgstr "Ingen storlek"
+msgstr "Ingen storlek."
#: actions/avatarbynickname.php:69
msgid "Invalid size."
-msgstr "Felaktig storlek"
+msgstr "Ogiltig storlek."
#: actions/avatarsettings.php:67 actions/showgroup.php:221
#: lib/accountsettingsaction.php:112
msgid "Avatar"
-msgstr "Användarbild"
+msgstr "Avatar"
#: actions/avatarsettings.php:78
-#, fuzzy, php-format
+#, php-format
msgid "You can upload your personal avatar. The maximum file size is %s."
-msgstr "Du kan uppdatera din personliga profil här"
+msgstr ""
+"Du kan ladda upp din personliga avatar. Den maximala filstorleken är %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:182
#: actions/grouplogo.php:178 actions/remotesubscribe.php:191
@@ -548,23 +543,21 @@ msgstr "Användare utan matchande profil"
#: actions/avatarsettings.php:119 actions/avatarsettings.php:194
#: actions/grouplogo.php:251
-#, fuzzy
msgid "Avatar settings"
-msgstr "Twitter inställningar"
+msgstr "Avatarinställningar"
#: actions/avatarsettings.php:126 actions/avatarsettings.php:202
#: actions/grouplogo.php:199 actions/grouplogo.php:259
msgid "Original"
-msgstr ""
+msgstr "Orginal"
#: actions/avatarsettings.php:141 actions/avatarsettings.php:214
#: actions/grouplogo.php:210 actions/grouplogo.php:271
msgid "Preview"
-msgstr ""
+msgstr "Förhandsgranska"
#: actions/avatarsettings.php:148 lib/deleteuserform.php:66
#: lib/noticelist.php:550
-#, fuzzy
msgid "Delete"
msgstr "Ta bort"
@@ -574,13 +567,13 @@ msgstr "Ladda upp"
#: actions/avatarsettings.php:228 actions/grouplogo.php:286
msgid "Crop"
-msgstr ""
+msgstr "Beskär"
#: actions/avatarsettings.php:265 actions/disfavor.php:74
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -589,89 +582,83 @@ msgstr ""
#: actions/tagother.php:166 actions/unsubscribe.php:69
#: actions/userauthorization.php:52 lib/designsettings.php:294
msgid "There was a problem with your session token. Try again, please."
-msgstr "Det var något problem med din session. Försök igen, tack."
+msgstr "Det var ett problem med din sessions-token. Var vänlig försök igen."
#: actions/avatarsettings.php:277 actions/designadminpanel.php:103
#: actions/emailsettings.php:256 actions/grouplogo.php:319
#: actions/imsettings.php:220 actions/recoverpassword.php:44
#: actions/smssettings.php:248 lib/designsettings.php:304
msgid "Unexpected form submission."
-msgstr "Oväntat utskick av formuläret."
+msgstr "Oväntat inskick av formulär."
#: actions/avatarsettings.php:322
msgid "Pick a square area of the image to be your avatar"
-msgstr ""
+msgstr "Välj ett kvadratiskt område i bilden som din avatar"
#: actions/avatarsettings.php:337 actions/grouplogo.php:377
msgid "Lost our file data."
-msgstr ""
+msgstr "Förlorade vår fildata."
#: actions/avatarsettings.php:360
msgid "Avatar updated."
-msgstr "Användarbilden uppdaterad."
+msgstr "Avatar uppdaterad."
#: actions/avatarsettings.php:363
msgid "Failed updating avatar."
-msgstr "Uppdatering av profilbild misslyckades."
+msgstr "Misslyckades uppdatera avatar."
#: actions/avatarsettings.php:387
-#, fuzzy
msgid "Avatar deleted."
-msgstr "Användarbilden uppdaterad."
+msgstr "Avatar borttagen."
#: actions/blockedfromgroup.php:73 actions/editgroup.php:84
#: actions/groupdesignsettings.php:84 actions/grouplogo.php:86
#: actions/groupmembers.php:76 actions/grouprss.php:91
#: actions/joingroup.php:76 actions/showgroup.php:121
-#, fuzzy
msgid "No nickname"
-msgstr "Inget användarnamn"
+msgstr "Inget smeknamn"
#: actions/blockedfromgroup.php:80 actions/editgroup.php:96
#: actions/groupbyid.php:83 actions/groupdesignsettings.php:97
#: actions/grouplogo.php:99 actions/groupmembers.php:83
#: actions/grouprss.php:98 actions/joingroup.php:83 actions/showgroup.php:137
-#, fuzzy
msgid "No such group"
-msgstr "Ingen sådan användare"
+msgstr "Ingen sådan grupp"
#: actions/blockedfromgroup.php:90
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles"
-msgstr "Användaren har ingen profil."
+msgstr "%s blockerade profiler"
#: actions/blockedfromgroup.php:93
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked profiles, page %d"
-msgstr "%s med vänner"
+msgstr "%s blockerade profiler, sida %d"
#: actions/blockedfromgroup.php:108
msgid "A list of the users blocked from joining this group."
msgstr ""
+"En lista med de användare som blockerats från att gå med i denna grupp."
#: actions/blockedfromgroup.php:281
-#, fuzzy
msgid "Unblock user from group"
-msgstr "Ingen sådan användare"
+msgstr "Häv blockering av användare från grupp"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:69
msgid "Unblock"
-msgstr ""
+msgstr "Häv blockering"
#: actions/blockedfromgroup.php:313 lib/unblockform.php:80
-#, fuzzy
msgid "Unblock this user"
-msgstr "Ingen sådan användare"
+msgstr "Häv blockering av denna användare"
#: actions/block.php:69
-#, fuzzy
msgid "You already blocked that user."
-msgstr "Du prenumererar redan på dessa användare:"
+msgstr "Du har redan blockerat denna användare."
#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
-#, fuzzy
msgid "Block user"
-msgstr "Ingen sådan användare"
+msgstr "Blockera användare"
#: actions/block.php:130
msgid ""
@@ -679,6 +666,9 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"Är du säker på att du vill blockera denna användare? Efteråt kommer deras "
+"prenumeration på dig tas bort, de kommer inte kunna prenumerera på dig i "
+"framtiden och du kommer inte bli underrättad om några @-svar från dem."
#: actions/block.php:143 actions/deletenotice.php:145
#: actions/deleteuser.php:147 actions/groupblock.php:178
@@ -686,9 +676,8 @@ msgid "No"
msgstr "Nej"
#: actions/block.php:143 actions/deleteuser.php:147
-#, fuzzy
msgid "Do not block this user"
-msgstr "Ingen sådan användare"
+msgstr "Blockera inte denna användare"
#: actions/block.php:144 actions/deletenotice.php:146
#: actions/deleteuser.php:148 actions/groupblock.php:179
@@ -696,17 +685,16 @@ msgid "Yes"
msgstr "Ja"
#: actions/block.php:144 actions/groupmembers.php:346 lib/blockform.php:80
-#, fuzzy
msgid "Block this user"
-msgstr "Ingen sådan användare"
+msgstr "Blockera denna användare"
#: actions/block.php:162
msgid "Failed to save block information."
-msgstr ""
+msgstr "Misslyckades att spara blockeringsinformation."
#: actions/bookmarklet.php:50
msgid "Post to "
-msgstr ""
+msgstr "Posta till "
#: actions/confirmaddress.php:75
msgid "No confirmation code."
@@ -714,20 +702,20 @@ msgstr "Ingen bekräftelsekod."
#: actions/confirmaddress.php:80
msgid "Confirmation code not found."
-msgstr "Bekräftelsekoden kunde inte hittas."
+msgstr "Bekräftelsekod kunde inte hittas."
#: actions/confirmaddress.php:85
msgid "That confirmation code is not for you!"
-msgstr "Den bekräftelsekoden är inte för dig!"
+msgstr "Denna bekräftelsekod är inte för dig!"
#: actions/confirmaddress.php:90
#, php-format
msgid "Unrecognized address type %s"
-msgstr "Adresstypen känns inte igen %s"
+msgstr "Adresstypen %s känns inte igen"
#: actions/confirmaddress.php:94
msgid "That address has already been confirmed."
-msgstr "Den adressen har redan blivit bekräftad en gång."
+msgstr "Denna adress har redan blivit bekräftad."
#: actions/confirmaddress.php:114 actions/emailsettings.php:296
#: actions/emailsettings.php:427 actions/imsettings.php:258
@@ -740,7 +728,7 @@ msgstr "Kunde inte uppdatera användare."
#: actions/confirmaddress.php:126 actions/emailsettings.php:391
#: actions/imsettings.php:363 actions/smssettings.php:382
msgid "Couldn't delete email confirmation."
-msgstr "Kunde inte radera epost bekräftelsen."
+msgstr "Kunde inte ta bort e-postbekräftelse."
#: actions/confirmaddress.php:144
msgid "Confirm Address"
@@ -752,18 +740,17 @@ msgid "The address \"%s\" has been confirmed for your account."
msgstr "Adressen \"%s\" har blivit bekräftad för ditt konto."
#: actions/conversation.php:99
-#, fuzzy
msgid "Conversation"
-msgstr "Bekräftelsekod"
+msgstr "Konversationer"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
#: lib/profileaction.php:216 lib/searchgroupnav.php:82
msgid "Notices"
-msgstr "Inlägg"
+msgstr "Notiser"
#: actions/deletenotice.php:52 actions/shownotice.php:92
msgid "No such notice."
-msgstr "Inget sådant inlägg."
+msgstr "Ingen sådan notis."
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
@@ -776,178 +763,165 @@ msgstr "Inte inloggad."
#: actions/deletenotice.php:71
msgid "Can't delete this notice."
-msgstr "Kan inte ta bort detta inlägg."
+msgstr "Kan inte ta bort denna notis."
#: actions/deletenotice.php:103
-#, fuzzy
msgid ""
"You are about to permanently delete a notice. Once this is done, it cannot "
"be undone."
msgstr ""
-"Du håller på att tabort inlägget permanent. När det väl är gjort kan du inte "
-"Ã¥ngra dig."
+"Du håller på att ta bort en notis permanent. När det väl är gjort kan du "
+"inte ångra dig."
#: actions/deletenotice.php:109 actions/deletenotice.php:141
msgid "Delete notice"
-msgstr "Tabort inlägg"
+msgstr "Ta bort notis"
#: actions/deletenotice.php:144
msgid "Are you sure you want to delete this notice?"
-msgstr "Är du säker på att du vill tabort detta inlägg?"
+msgstr "Är du säker på att du vill ta bort denna notis?"
#: actions/deletenotice.php:145
-#, fuzzy
msgid "Do not delete this notice"
-msgstr "Kan inte ta bort detta inlägg."
+msgstr "Ta inte bort denna notis"
#: actions/deletenotice.php:146 lib/noticelist.php:550
-#, fuzzy
msgid "Delete this notice"
-msgstr "Ta bort inlägg"
+msgstr "Ta bort denna notis"
#: actions/deletenotice.php:157
-#, fuzzy
msgid "There was a problem with your session token. Try again, please."
-msgstr "Det var något problem med din session. Försök igen, tack."
+msgstr "Det var något problem med din sessions-token. Var vänlig försök igen."
#: actions/deleteuser.php:67
-#, fuzzy
msgid "You cannot delete users."
-msgstr "Kunde inte uppdatera användare."
+msgstr "Du kan inte ta bort användare."
#: actions/deleteuser.php:74
-#, fuzzy
msgid "You can only delete local users."
-msgstr "Du kan inte tabort nån annan användares status."
+msgstr "Du kan bara ta bort lokala användare."
#: actions/deleteuser.php:110 actions/deleteuser.php:133
-#, fuzzy
msgid "Delete user"
-msgstr "Ta bort"
+msgstr "Ta bort användare"
#: actions/deleteuser.php:135
msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
+"Är du säker på att du vill ta bort denna användare? Det kommer rensa all "
+"data om användaren från databasen, utan en säkerhetskopia."
#: actions/deleteuser.php:148 lib/deleteuserform.php:77
-#, fuzzy
msgid "Delete this user"
-msgstr "Ta bort inlägg"
+msgstr "Ta bort denna användare"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/adminpanelaction.php:302 lib/groupnav.php:119
msgid "Design"
-msgstr ""
+msgstr "Utseende"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
-msgstr ""
+msgstr "Utseendeinställningar för denna StatusNet-webbplats."
-#: actions/designadminpanel.php:270
-#, fuzzy
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
-msgstr "Felaktig storlek"
+msgstr "Ogiltig logtyp-URL."
-#: actions/designadminpanel.php:274
-#, fuzzy, php-format
+#: actions/designadminpanel.php:279
+#, php-format
msgid "Theme not available: %s"
-msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat"
+msgstr "Tema inte tillgängligt: %s"
-#: actions/designadminpanel.php:370
-#, fuzzy
+#: actions/designadminpanel.php:375
msgid "Change logo"
-msgstr "Ändra ditt lösenord"
+msgstr "Byt logotyp"
-#: actions/designadminpanel.php:375
-#, fuzzy
+#: actions/designadminpanel.php:380
msgid "Site logo"
-msgstr "Bjud in"
+msgstr "Webbplatslogotyp"
-#: actions/designadminpanel.php:382
-#, fuzzy
+#: actions/designadminpanel.php:387
msgid "Change theme"
-msgstr "Ändra"
+msgstr "Byt tema"
-#: actions/designadminpanel.php:399
-#, fuzzy
+#: actions/designadminpanel.php:404
msgid "Site theme"
-msgstr "Nytt inlägg"
+msgstr "Webbplatstema"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
-msgstr ""
+msgstr "Tema för webbplatsen."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
-msgstr ""
+msgstr "Ändra bakgrundsbild"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
-msgstr ""
+msgstr "Bakgrund"
-#: actions/designadminpanel.php:422
-#, fuzzy, php-format
+#: actions/designadminpanel.php:427
+#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
-msgstr "Du kan uppdatera din personliga profil här"
+msgstr ""
+"Du kan ladda upp en bakgrundsbild för denna webbplats. Den maximala "
+"filstorleken är %1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
-msgstr ""
+msgstr "PÃ¥"
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
-msgstr ""
+msgstr "Av"
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Sätt på eller stäng av bakgrundsbild."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Upprepa bakgrundsbild"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
-#, fuzzy
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
-msgstr "Ändra ditt lösenord"
+msgstr "Byt färger"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
-#, fuzzy
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
-msgstr "Anslut"
+msgstr "Innehåll"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
-#, fuzzy
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
-msgstr "Sök"
+msgstr "Sidofält"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Text"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
-#, fuzzy
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
-msgstr "Logga in"
+msgstr "Länkar"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Använd standardvärden"
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
-msgstr ""
+msgstr "Återställ standardutseende"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
-msgstr ""
+msgstr "Återställ till standardvärde"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -957,18 +931,17 @@ msgstr ""
msgid "Save"
msgstr "Spara"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
-msgstr ""
+msgstr "Spara utseende"
#: actions/disfavor.php:81
msgid "This notice is not a favorite!"
-msgstr "Det inlägget är ingen favorit!"
+msgstr "Denna notis är inte en favorit!"
#: actions/disfavor.php:94
-#, fuzzy
msgid "Add to favorites"
-msgstr "Feed för %s favoriter"
+msgstr "Lägg till i favoriter"
#: actions/doc.php:69
msgid "No such document."
@@ -977,51 +950,46 @@ msgstr "Inget sådant dokument."
#: actions/editgroup.php:56
#, php-format
msgid "Edit %s group"
-msgstr ""
+msgstr "Redigera %s grupp"
#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
-#, fuzzy
msgid "You must be logged in to create a group."
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att skapa en grupp."
#: actions/editgroup.php:103 actions/editgroup.php:168
#: actions/groupdesignsettings.php:104 actions/grouplogo.php:106
-#, fuzzy
msgid "You must be an admin to edit the group"
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att redigera gruppen"
#: actions/editgroup.php:154
msgid "Use this form to edit the group."
-msgstr ""
+msgstr "Använd detta formulär för att redigera gruppen."
#: actions/editgroup.php:201 actions/newgroup.php:145
-#, fuzzy, php-format
+#, php-format
msgid "description is too long (max %d chars)."
-msgstr "Biografin är för lång (max 140 tecken)"
+msgstr "beskrivning är för lång (max %d tecken)."
#: actions/editgroup.php:253
-#, fuzzy
msgid "Could not update group."
-msgstr "Kunde inte uppdatera användare."
+msgstr "Kunde inte uppdatera grupp."
#: actions/editgroup.php:259 classes/User_group.php:390
-#, fuzzy
msgid "Could not create aliases."
-msgstr "Kunde inte skapa favorit."
+msgstr "Kunde inte skapa alias."
#: actions/editgroup.php:269
-#, fuzzy
msgid "Options saved."
-msgstr "Inställningar sparade."
+msgstr "Alternativ sparade."
#: actions/emailsettings.php:60
msgid "Email Settings"
-msgstr "Email inställningar"
+msgstr "E-postinställningar"
#: actions/emailsettings.php:71
#, php-format
msgid "Manage how you get email from %%site.name%%."
-msgstr "Ställ in hur du tar emot email ifrån %%site.name%%"
+msgstr "Hantera hur du får e-post från %%site.name%%"
#: actions/emailsettings.php:100 actions/imsettings.php:100
#: actions/smssettings.php:104
@@ -1030,7 +998,7 @@ msgstr "Adress"
#: actions/emailsettings.php:105
msgid "Current confirmed email address."
-msgstr "Nuvarande bekräftade emailadress."
+msgstr "Aktuell, bekräftad e-postadress."
#: actions/emailsettings.php:107 actions/emailsettings.php:140
#: actions/imsettings.php:108 actions/smssettings.php:115
@@ -1043,8 +1011,8 @@ msgid ""
"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
"a message with further instructions."
msgstr ""
-"Väntar bekräftelse på denna adress. Kontrollera din inbox (och spamlådan!) "
-"efter meddelande om vidare instruktioner."
+"Väntar bekräftelse av denna adress. Kontrollera din inkorg (och "
+"skräppostkorg!) efter ett meddelande med vidare instruktioner."
#: actions/emailsettings.php:117 actions/imsettings.php:120
#: actions/smssettings.php:126
@@ -1053,11 +1021,11 @@ msgstr "Avbryt"
#: actions/emailsettings.php:121
msgid "Email Address"
-msgstr "Emailadress"
+msgstr "E-postadress"
#: actions/emailsettings.php:123
msgid "Email address, like \"UserName@example.org\""
-msgstr "Emailadress såsom \"användare@example.org\""
+msgstr "E-postadress, såsom \"användarnamn@exempel.se\""
#: actions/emailsettings.php:126 actions/imsettings.php:133
#: actions/smssettings.php:145
@@ -1066,15 +1034,16 @@ msgstr "Lägg till"
#: actions/emailsettings.php:133 actions/smssettings.php:152
msgid "Incoming email"
-msgstr "Inkommande email"
+msgstr "Inkommande e-post"
#: actions/emailsettings.php:138 actions/smssettings.php:157
msgid "Send email to this address to post new notices."
-msgstr "Skicka email till denna adress för att posta ett nya inlägg."
+msgstr "Skicka e-post till denna adress för att posta nya notiser."
#: actions/emailsettings.php:145 actions/smssettings.php:162
msgid "Make a new email address for posting to; cancels the old one."
-msgstr "Skapa en ny emailadress för att posta till, avaktiverar den gamla"
+msgstr ""
+"Ange en ny e-postadress för att posta till; detta inaktiverar den gamla."
#: actions/emailsettings.php:148 actions/smssettings.php:164
msgid "New"
@@ -1087,7 +1056,7 @@ msgstr "Inställningar"
#: actions/emailsettings.php:158
msgid "Send me notices of new subscriptions through email."
-msgstr "Skicka meddelande till mig via email vid nya prenumerationer."
+msgstr "Skicka notiser om nya prenumerationer till mig genom e-post."
#: actions/emailsettings.php:163
msgid "Send me email when someone adds my notice as a favorite."
@@ -1095,24 +1064,23 @@ msgstr "Skicka mig ett email när någon lägger till mitt inlägg som favorit."
#: actions/emailsettings.php:169
msgid "Send me email when someone sends me a private message."
-msgstr "Skicka mig ett email när någon sänder ett privat meddelande."
+msgstr "Skicka mig e-post när någon skickar mig ett privat meddelande."
#: actions/emailsettings.php:174
-#, fuzzy
msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr "Skicka mig ett email när någon sänder ett privat meddelande."
+msgstr "Skicka mig e-post när någon skickar ett \"@-svar\"."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
-msgstr ""
+msgstr "Tillåt vänner att knuffa mig och skicka e-post till mig."
#: actions/emailsettings.php:185
msgid "I want to post notices by email."
-msgstr "Jag vill posta inlägg via min email."
+msgstr "Jag vill posta notiser genom min e-post."
#: actions/emailsettings.php:191
msgid "Publish a MicroID for my email address."
-msgstr "Publicera ett MicroID för min emailadress."
+msgstr "Publicera ett MicroID för min e-postadress."
#: actions/emailsettings.php:302 actions/imsettings.php:264
#: actions/othersettings.php:180 actions/smssettings.php:284
@@ -1121,37 +1089,37 @@ msgstr "Inställningar sparade."
#: actions/emailsettings.php:320
msgid "No email address."
-msgstr "Ingen emailadress."
+msgstr "Ingen e-postadress."
#: actions/emailsettings.php:327
msgid "Cannot normalize that email address"
-msgstr "Kan inte normalisera den emailadressen"
+msgstr "Kan inte normalisera den e-postadressen"
#: actions/emailsettings.php:331 actions/siteadminpanel.php:158
msgid "Not a valid email address"
-msgstr "Ingen giltig emailadress"
+msgstr "Inte en giltig e-postadress"
#: actions/emailsettings.php:334
msgid "That is already your email address."
-msgstr "Det är redan din emailadress."
+msgstr "Detta är redan din e-postadress."
#: actions/emailsettings.php:337
msgid "That email address already belongs to another user."
-msgstr "Den emailadressen tillhör redan en annan användare."
+msgstr "Den e-postadressen tillhör redan en annan användare."
#: actions/emailsettings.php:353 actions/imsettings.php:317
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
-msgstr "Kunde inte lägga till bekräftelsekoden."
+msgstr "Kunde inte infoga bekräftelsekod."
#: actions/emailsettings.php:359
msgid ""
"A confirmation code was sent to the email address you added. Check your "
"inbox (and spam box!) for the code and instructions on how to use it."
msgstr ""
-"En bekräftelsekod har skickats ut till email adressen du fyllde i. "
-"Kontrollera din inbox (och spamlådan!) efter kod och instruktioner hur du "
-"använder den."
+"En bekräftelsekod har skickats till e-postadressen du lade till. Kontrollera "
+"din inkorg (och skräppostkorg!) för koden och instruktioner hur du använder "
+"den."
#: actions/emailsettings.php:379 actions/imsettings.php:351
#: actions/smssettings.php:370
@@ -1160,58 +1128,58 @@ msgstr "Ingen väntande bekräftelse att avbryta."
#: actions/emailsettings.php:383 actions/imsettings.php:355
msgid "That is the wrong IM address."
-msgstr "Det är fel IM adress."
+msgstr "Detta är fel IM-adress."
#: actions/emailsettings.php:395 actions/imsettings.php:367
#: actions/smssettings.php:386
msgid "Confirmation cancelled."
-msgstr "Verifikation avbruten"
+msgstr "Bekräftelse avbruten."
#: actions/emailsettings.php:413
msgid "That is not your email address."
-msgstr "Det är inte din emailadress."
+msgstr "Detta är inte din e-postadress."
#: actions/emailsettings.php:432 actions/imsettings.php:408
#: actions/smssettings.php:425
msgid "The address was removed."
-msgstr "Adressen är borttagen."
+msgstr "Adressen togs bort."
#: actions/emailsettings.php:446 actions/smssettings.php:518
msgid "No incoming email address."
-msgstr "Ingen inkommande emailadress."
+msgstr "Ingen inkommande e-postadress."
#: actions/emailsettings.php:456 actions/emailsettings.php:478
#: actions/smssettings.php:528 actions/smssettings.php:552
msgid "Couldn't update user record."
-msgstr "Kunde inte uppdatera användarens inställningar."
+msgstr "Kunde inte uppdatera användaruppgift."
#: actions/emailsettings.php:459 actions/smssettings.php:531
msgid "Incoming email address removed."
-msgstr "Inkommande emailadress borttagen."
+msgstr "Inkommande e-postadress borttagen."
#: actions/emailsettings.php:481 actions/smssettings.php:555
msgid "New incoming email address added."
-msgstr "Ny inkommande emailadress inlagd."
+msgstr "Ny inkommande e-postadress tillagd."
#: actions/favorited.php:65 lib/popularnoticesection.php:88
#: lib/publicgroupnav.php:93
-#, fuzzy
msgid "Popular notices"
-msgstr "Inget sådant inlägg."
+msgstr "Populära notiser"
#: actions/favorited.php:67
-#, fuzzy, php-format
+#, php-format
msgid "Popular notices, page %d"
-msgstr "Inget sådant inlägg."
+msgstr "Populära notiser, sida %d"
#: actions/favorited.php:79
-#, fuzzy
msgid "The most popular notices on the site right now."
-msgstr "Visar dom populäraste taggarna ifrån den senaste veckan."
+msgstr "De mest populära notiserna på webbplatsen just nu."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
msgstr ""
+"Favoritnotiser kommer upp på denna sida, men ingen har markerat några "
+"favoriter än."
#: actions/favorited.php:153
msgid ""
@@ -1225,26 +1193,27 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to add a "
"notice to your favorites!"
msgstr ""
+"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
+"lägga en notis till dina favoriter!"
#: actions/favoritesrss.php:111 actions/showfavorites.php:77
#: lib/personalgroupnav.php:115
#, php-format
msgid "%s's favorite notices"
-msgstr ""
+msgstr "%ss favoritnotiser"
#: actions/favoritesrss.php:115
-#, fuzzy, php-format
+#, php-format
msgid "Updates favored by %1$s on %2$s!"
-msgstr "Uppdateringar från %1$s på %2$s!"
+msgstr "Uppdateringar markerade som favorit av %1$s på %2$s!"
#: actions/favor.php:79
msgid "This notice is already a favorite!"
-msgstr "Detta inlägg är redan en favorit!"
+msgstr "Denna notis är redan en favorit!"
#: actions/favor.php:92 lib/disfavorform.php:140
-#, fuzzy
msgid "Disfavor favorite"
-msgstr "Avfavorisera"
+msgstr "Ta bort märkning som favorit"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@@ -1262,114 +1231,99 @@ msgid "A selection of some of the great users on %s"
msgstr ""
#: actions/file.php:34
-#, fuzzy
msgid "No notice id"
-msgstr "Nytt inlägg"
+msgstr "Ingen notis-ID"
#: actions/file.php:38
-#, fuzzy
msgid "No notice"
-msgstr "Nytt inlägg"
+msgstr "Ingen notis"
#: actions/file.php:42
msgid "No attachments"
-msgstr ""
+msgstr "Inga bilagor"
#: actions/file.php:51
msgid "No uploaded attachments"
-msgstr ""
+msgstr "Inga uppladdade bilagor"
#: actions/finishremotesubscribe.php:69
msgid "Not expecting this response!"
-msgstr "Väntade mig inte detta svar!"
+msgstr "Väntade mig inte denna respons!"
#: actions/finishremotesubscribe.php:80
-#, fuzzy
msgid "User being listened to does not exist."
-msgstr "Användaren som avlyssnas existerar inte."
+msgstr "Användaren som lyssnas på existerar inte."
#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
msgid "You can use the local subscription!"
-msgstr "Du kan använda lokala prenumerationer!"
+msgstr "Du kan använda den lokala prenumerationen!"
#: actions/finishremotesubscribe.php:99
msgid "That user has blocked you from subscribing."
-msgstr ""
+msgstr "Denna användaren har blockerat dig från att prenumerera."
#: actions/finishremotesubscribe.php:110
-#, fuzzy
msgid "You are not authorized."
-msgstr "Inte tillstånd ännu."
+msgstr "Du har inte tillstånd."
#: actions/finishremotesubscribe.php:113
-#, fuzzy
msgid "Could not convert request token to access token."
-msgstr "Kunde inte konvertera förfrågan tokens till Access tokens."
+msgstr "Kunde inte konvertera förfrågnings-token till access-token."
#: actions/finishremotesubscribe.php:118
-#, fuzzy
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Okänd version av OMB protokollet."
+msgstr "Fjärrtjänsten använder en okänd version av OMB-protokollet."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
-msgstr "Fel uppstog under uppdatering av fjärranvändare"
+msgstr "Fel vid uppdatering av fjärrprofil"
#: actions/foafgroup.php:44 actions/foafgroup.php:62 actions/groupblock.php:86
#: actions/groupunblock.php:86 actions/leavegroup.php:83
#: actions/makeadmin.php:86 lib/command.php:212 lib/command.php:263
-#, fuzzy
msgid "No such group."
-msgstr "Inget sådant meddelande."
+msgstr "Ingen sådan grupp."
#: actions/getfile.php:75
-#, fuzzy
msgid "No such file."
-msgstr "Inget sådant inlägg."
+msgstr "Ingen sådan fil."
#: actions/getfile.php:79
-#, fuzzy
msgid "Cannot read file."
-msgstr "Inget sådant inlägg."
+msgstr "Kan inte läsa fil."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
-#, fuzzy
msgid "No profile specified."
-msgstr "Ingen mottagare tillagd."
+msgstr "Ingen profil angiven."
#: actions/groupblock.php:76 actions/groupunblock.php:76
#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
#: lib/profileformaction.php:77
-#, fuzzy
msgid "No profile with that ID."
-msgstr "Ingen status hittad med det ID"
+msgstr "Ingen profil med det ID:t."
#: actions/groupblock.php:81 actions/groupunblock.php:81
#: actions/makeadmin.php:81
-#, fuzzy
msgid "No group specified."
-msgstr "Ingen mottagare tillagd."
+msgstr "Ingen grupp angiven."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
-msgstr ""
+msgstr "Bara en administratör kan blockera gruppmedlemmar."
#: actions/groupblock.php:95
-#, fuzzy
msgid "User is already blocked from group."
-msgstr "Användaren har ingen profil."
+msgstr "Användaren är redan blockerad från grupp."
#: actions/groupblock.php:100
-#, fuzzy
msgid "User is not a member of group."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Användare är inte en gruppmedlem."
#: actions/groupblock.php:136 actions/groupmembers.php:314
-#, fuzzy
msgid "Block user from group"
-msgstr "Ingen sådan användare"
+msgstr "Blockera användare från grupp"
#: actions/groupblock.php:162
#, php-format
@@ -1378,141 +1332,137 @@ msgid ""
"be removed from the group, unable to post, and unable to subscribe to the "
"group in the future."
msgstr ""
+"Är du säker på att du vill blockera användare \"%s\" från gruppen \"%s\"? De "
+"kommer bli borttagna från gruppen, inte kunna posta och inte kunna "
+"prenumerera på gruppen i framtiden."
#: actions/groupblock.php:178
-#, fuzzy
msgid "Do not block this user from this group"
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Blockera inte denna användare från denna grupp"
#: actions/groupblock.php:179
-#, fuzzy
msgid "Block this user from this group"
-msgstr "Ingen sådan användare"
+msgstr "Blockera denna användare från denna grupp"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
-msgstr ""
+msgstr "Databasfel vid blockering av användare från grupp."
#: actions/groupbyid.php:74
msgid "No ID"
-msgstr ""
+msgstr "Ingen ID"
#: actions/groupdesignsettings.php:68
-#, fuzzy
msgid "You must be logged in to edit a group."
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att redigera en grupp."
#: actions/groupdesignsettings.php:141
msgid "Group design"
-msgstr ""
+msgstr "Gruppens utseende"
#: actions/groupdesignsettings.php:152
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Anpassa hur din grupp ser ut genom att välja bakgrundbild och färgpalett."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
-#, fuzzy
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
-msgstr "Kunde inte uppdatera användare."
+msgstr "Kunde inte uppdatera dina utseendeinställningar."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
-#, fuzzy
msgid "Unable to save your design settings!"
-msgstr "Kunde inte spara dina Twitter inställningar!"
+msgstr "Kunde inte spara dina utseendeinställningar!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
-#, fuzzy
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr "Inställningar sparade."
+msgstr "Utseendeinställningar sparade."
#: actions/grouplogo.php:139 actions/grouplogo.php:192
msgid "Group logo"
-msgstr ""
+msgstr "Gruppens logotyp"
#: actions/grouplogo.php:150
#, php-format
msgid ""
"You can upload a logo image for your group. The maximum file size is %s."
msgstr ""
+"Du kan ladda upp en logotypbild för din grupp. Den maximala filstorleken är %"
+"s."
#: actions/grouplogo.php:362
msgid "Pick a square area of the image to be the logo."
-msgstr ""
+msgstr "Välj ett kvadratiskt område i bilden som logotyp"
#: actions/grouplogo.php:396
-#, fuzzy
msgid "Logo updated."
-msgstr "Användarbilden uppdaterad."
+msgstr "Logtyp uppdaterad."
#: actions/grouplogo.php:398
-#, fuzzy
msgid "Failed updating logo."
-msgstr "Uppdatering av profilbild misslyckades."
+msgstr "Misslyckades uppdatera logtyp."
#: actions/groupmembers.php:93 lib/groupnav.php:92
#, php-format
msgid "%s group members"
-msgstr ""
+msgstr "%s gruppmedlemmar"
#: actions/groupmembers.php:96
#, php-format
msgid "%s group members, page %d"
-msgstr ""
+msgstr "%s gruppmedlemmar, sida %d"
#: actions/groupmembers.php:111
msgid "A list of the users in this group."
-msgstr ""
+msgstr "En lista av användarna i denna grupp."
#: actions/groupmembers.php:175 lib/action.php:440 lib/groupnav.php:107
msgid "Admin"
-msgstr ""
+msgstr "Administratör"
#: actions/groupmembers.php:346 lib/blockform.php:69
msgid "Block"
-msgstr ""
+msgstr "Blockera"
#: actions/groupmembers.php:441
-#, fuzzy
msgid "Make user an admin of the group"
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Gör användare till en administratör för gruppen"
#: actions/groupmembers.php:473
msgid "Make Admin"
-msgstr ""
+msgstr "Gör till administratör"
#: actions/groupmembers.php:473
msgid "Make this user an admin"
-msgstr ""
+msgstr "Gör denna användare till administratör"
#: actions/grouprss.php:133
-#, fuzzy, php-format
+#, php-format
msgid "Updates from members of %1$s on %2$s!"
-msgstr "Uppdateringar från %1$s på %2$s!"
+msgstr "Uppdateringar från medlemmar i %1$s på %2$s!"
#: actions/groupsearch.php:52
-#, fuzzy, php-format
+#, php-format
msgid ""
"Search for groups on %%site.name%% by their name, location, or description. "
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
-"Sök efter personer på %%site.name%% efter deras namn, plats eller intressen. "
-"Skilj söktermerna åt med mellanslag; de måste vara minst tre tecken långa. "
+"Sök efter grupper på %%site.name%% efter deras namn, plats eller "
+"beskrivning. Skilj söktermerna åt med mellanslag; de måste vara minst tre "
+"tecken långa."
#: actions/groupsearch.php:58
-#, fuzzy
msgid "Group search"
-msgstr "Sökning personer"
+msgstr "Gruppsökning"
#: actions/groupsearch.php:79 actions/noticesearch.php:117
#: actions/peoplesearch.php:83
-#, fuzzy
msgid "No results."
-msgstr "Inget resultat"
+msgstr "Inga resultat."
#: actions/groupsearch.php:82
#, php-format
@@ -1520,6 +1470,8 @@ msgid ""
"If you can't find the group you're looking for, you can [create it](%%action."
"newgroup%%) yourself."
msgstr ""
+"Om du inte kan hitta gruppen du söker efter kan du [skapa den](%%action."
+"newgroup%%) själv."
#: actions/groupsearch.php:85
#, php-format
@@ -1527,16 +1479,18 @@ msgid ""
"Why not [register an account](%%action.register%%) and [create the group](%%"
"action.newgroup%%) yourself!"
msgstr ""
+"Varför inte [registrera ett konto](%%action.register%%) och [skapa gruppen](%"
+"%action.newgroup%%) själv!"
#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
-msgstr ""
+msgstr "Grupper"
#: actions/groups.php:64
#, php-format
msgid "Groups, page %d"
-msgstr ""
+msgstr "Grupper, sida %d"
#: actions/groups.php:90
#, php-format
@@ -1547,29 +1501,31 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"%%%%site.name%%%% grupper låter dig hitta och prata med personer med "
+"liknande intressen. Efter att ha gått med i en grupp kan du skicka "
+"meddelanden till alla andra medlemmar mha. syntaxen \"!gruppnamn\". Ser du "
+"inte någon grupp du gillar? Prova att [söka efter en](%%%%action.groupsearch%"
+"%%%) eller [starta din egen!](%%%%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
-#, fuzzy
msgid "Create a new group"
-msgstr "Skapa ett nytt konto"
+msgstr "Skapa en ny grupp"
#: actions/groupunblock.php:91
msgid "Only an admin can unblock group members."
-msgstr ""
+msgstr "Bara en administratör kan häva blockering av gruppmedlemmar."
#: actions/groupunblock.php:95
-#, fuzzy
msgid "User is not blocked from group."
-msgstr "Användaren har ingen profil."
+msgstr "Användare är inte blockerad från grupp."
#: actions/groupunblock.php:128 actions/unblock.php:77
-#, fuzzy
msgid "Error removing the block."
-msgstr "Fel uppstog när användaren skulle sparas."
+msgstr "Fel vid hävning av blockering."
#: actions/imsettings.php:59
msgid "IM Settings"
-msgstr "IM inställningar"
+msgstr "IM-inställningar"
#: actions/imsettings.php:70
#, php-format
@@ -1577,13 +1533,12 @@ msgid ""
"You can send and receive notices through Jabber/GTalk [instant messages](%%"
"doc.im%%). Configure your address and settings below."
msgstr ""
-"Du kan skicka och ta emot inlägg genom Jabber/GTalk [instant messages](%%doc."
-"im%%). Konfigurera din adress och inställningar nedan. "
+"Du kan skicka och ta emot notiser genom Jabber/GTalk [snabbmeddelanden](%%"
+"doc.im%%). Konfigurera din adress och dina inställningar nedan."
#: actions/imsettings.php:89
-#, fuzzy
msgid "IM is not available."
-msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat"
+msgstr "IM är inte tillgänglig."
#: actions/imsettings.php:106
msgid "Current confirmed Jabber/GTalk address."
@@ -1595,12 +1550,12 @@ msgid ""
"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
"message with further instructions. (Did you add %s to your buddy list?)"
msgstr ""
-"Väntar bekräftelse på denna adress. Kontrollera ditt Jabber/GTalk konto för "
-"vidare instruktioner. (La du till %s i din vännerlista?)"
+"Väntar bekräftelse av denna adress. Kontrollera ditt Jabber/GTalk-konto för "
+"vidare instruktioner. (La du till %s i din kompislista?)"
#: actions/imsettings.php:124
msgid "IM Address"
-msgstr "IM adress"
+msgstr "IM-adress"
#: actions/imsettings.php:126
#, php-format
@@ -1608,46 +1563,46 @@ msgid ""
"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
"add %s to your buddy list in your IM client or on GTalk."
msgstr ""
-"Jabber eller GTalk adress liknande \"användare@exempel.se\". Först se till "
-"att lägga till %s i din vännerlista i IM klienten eller GTalk."
+"Jabber- eller GTalk-adress liknande \"användare@exempel.se\". Se först till "
+"att lägga till %s i din kompislista i din IM-klient eller hos GTalk."
#: actions/imsettings.php:143
msgid "Send me notices through Jabber/GTalk."
-msgstr "Skicka inlägg till mig via Jabber/GTalk."
+msgstr "Skicka notiser till mig genom Jabber/GTalk."
#: actions/imsettings.php:148
msgid "Post a notice when my Jabber/GTalk status changes."
-msgstr "Posta ett inlägg när min Jabber/GTalk status ändras."
+msgstr "Posta en notis när min Jabber/GTalk-status ändras."
#: actions/imsettings.php:153
msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
msgstr ""
-"Skicka svar till mig via Jabber/GTalk från personer som inte jag "
+"Skicka svar till mig genom Jabber/GTalk från personer som jag inte "
"prenumererar på."
#: actions/imsettings.php:159
msgid "Publish a MicroID for my Jabber/GTalk address."
-msgstr "Publicera ett MicroID för min Jabber/GTalk adress."
+msgstr "Publicera ett MicroID för min Jabber/GTalk-adress."
#: actions/imsettings.php:285
msgid "No Jabber ID."
-msgstr "Inget Jabber ID."
+msgstr "Inget Jabber-ID."
#: actions/imsettings.php:292
msgid "Cannot normalize that Jabber ID"
-msgstr "Kan inte normalisera det Jabber ID"
+msgstr "Kan inte normalisera detta Jabber-ID"
#: actions/imsettings.php:296
msgid "Not a valid Jabber ID"
-msgstr "Det är inget giltigt Jabber ID"
+msgstr "Inte ett giltigt Jabber-ID"
#: actions/imsettings.php:299
msgid "That is already your Jabber ID."
-msgstr "Det är redan din Jabber ID."
+msgstr "Detta är redan ditt Jabber-ID"
#: actions/imsettings.php:302
msgid "Jabber ID already belongs to another user."
-msgstr "Jabber ID används redan utav en annan användare."
+msgstr "Jabber-ID:t tillhör redan en annan användare."
#: actions/imsettings.php:327
#, php-format
@@ -1655,44 +1610,45 @@ msgid ""
"A confirmation code was sent to the IM address you added. You must approve %"
"s for sending messages to you."
msgstr ""
-"En bekräftelsekod har skickats till den IM-adress som du angav. Du måste "
+"En bekräftelsekod har skickats till den IM-adress du angav. Du måste "
"godkänna att %s får skicka meddelanden till dig."
#: actions/imsettings.php:387
msgid "That is not your Jabber ID."
-msgstr "Det är inte ditt Jabber ID."
+msgstr "Detta är inte ditt Jabber-ID."
#: actions/inbox.php:59
#, php-format
msgid "Inbox for %s - page %d"
-msgstr "Inbox för %s - sida %d"
+msgstr "Inkorg för %s - sida %d"
#: actions/inbox.php:62
#, php-format
msgid "Inbox for %s"
-msgstr "Inbox för %s"
+msgstr "Inkorg för %s"
#: actions/inbox.php:115
msgid "This is your inbox, which lists your incoming private messages."
-msgstr "Detta är din inbox som innehåller dina privata meddelanden."
+msgstr ""
+"Detta är din inkorg som innehåller dina inkommande privata meddelanden."
#: actions/invite.php:39
msgid "Invites have been disabled."
-msgstr ""
+msgstr "Inbjudningar har blivit inaktiverade."
#: actions/invite.php:41
#, php-format
msgid "You must be logged in to invite other users to use %s"
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att kunna bjuda in andra användare till %s"
#: actions/invite.php:72
#, php-format
msgid "Invalid email address: %s"
-msgstr "Ogiltig emailadress: %s"
+msgstr "Ogiltig e-postadress: %s"
#: actions/invite.php:110
msgid "Invitation(s) sent"
-msgstr "Inbjudan(ar) skickad"
+msgstr "Inbjudan(ar) skickad(e)"
#: actions/invite.php:112
msgid "Invite new users"
@@ -1705,25 +1661,25 @@ msgstr "Du prenumererar redan på dessa användare:"
#: actions/invite.php:131 actions/invite.php:139
#, php-format
msgid "%s (%s)"
-msgstr "%s(%s)"
+msgstr "%s (%s)"
#: actions/invite.php:136
msgid ""
"These people are already users and you were automatically subscribed to them:"
msgstr ""
-"Dom personerna är redan registrerade användare och du blev nu automatiskt "
-"prenumerant till dom:"
+"Dessa personer är redan registrerade användare och du blev automatiskt "
+"prenumerat hos dem:"
#: actions/invite.php:144
msgid "Invitation(s) sent to the following people:"
-msgstr "Inbjudan(ar) är skickade till följande personer:"
+msgstr "Inbjudning(ar) har skickats till följande personer:"
#: actions/invite.php:150
msgid ""
"You will be notified when your invitees accept the invitation and register "
"on the site. Thanks for growing the community!"
msgstr ""
-"du kommer bli meddelad när någon du bjudit in accepterar inbjudan och "
+"Du kommer bli meddelad när någon du bjudit in accepterar inbjudan och "
"registrerar sig. Tack för att du hjälper oss växa!"
#: actions/invite.php:162
@@ -1731,11 +1687,11 @@ msgid ""
"Use this form to invite your friends and colleagues to use this service."
msgstr ""
"Använd detta formulär för att bjuda in dina vänner och kollegor till denna "
-"sida."
+"webbplats."
#: actions/invite.php:187
msgid "Email addresses"
-msgstr "Emailadresser"
+msgstr "E-postadresser"
#: actions/invite.php:189
msgid "Addresses of friends to invite (one per line)"
@@ -1747,16 +1703,16 @@ msgstr "Personligt meddelande"
#: actions/invite.php:194
msgid "Optionally add a personal message to the invitation."
-msgstr "Om du vill, skriv ett personligt meddelande med inbjudan."
+msgstr "Om du vill, skriv ett personligt meddelande till inbjudan."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Skicka"
#: actions/invite.php:226
#, php-format
msgid "%1$s has invited you to join them on %2$s"
-msgstr "%1$s har bjudit in dig till %2$s"
+msgstr "%1$s har bjudit in dig att gå med dem på %2$s"
#: actions/invite.php:228
#, php-format
@@ -1788,92 +1744,62 @@ msgid ""
"\n"
"Sincerely, %2$s\n"
msgstr ""
-"%1$s har bjudit in dig till %2$s (%3$s).\n"
-"\n"
-"%2$s är en mikroblogg service som låter dig via sidan hålla direktkontakt "
-"med människor du känner eller intresserar dig.\n"
-"\n"
-"Du kan även dela med dig utav nyheter om dig själv, dina tankar, eller ditt "
-"liv online som känner igen dig. Det är också perfekt för att möta nya "
-"personer som delar ditt intresse.\n"
-"\n"
-"%1$s sa:\n"
-"\n"
-"%4$s\n"
-"\n"
-"Du kan se %1$s's profilsida på %2$s här:\n"
-"\n"
-"%5$s\n"
-"\n"
-"Om du vill prova på denna service, klicka på länken nedan för att acceptera "
-"denna inbjudan.\n"
-"\n"
-"%6$s\n"
-"\n"
-"Om inte, då kan du ignorera detta meddelande. Tack för att du tog dig\n"
#: actions/joingroup.php:60
-#, fuzzy
msgid "You must be logged in to join a group."
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att kunna gå med i en grupp."
#: actions/joingroup.php:90 lib/command.php:217
-#, fuzzy
msgid "You are already a member of that group"
-msgstr "Du prenumererar redan på dessa användare:"
+msgstr "Du är redan en medlem i denna grupp"
#: actions/joingroup.php:128 lib/command.php:234
-#, fuzzy, php-format
+#, php-format
msgid "Could not join user %s to group %s"
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte ansluta användare %s till groupp %s"
#: actions/joingroup.php:135 lib/command.php:239
-#, fuzzy, php-format
+#, php-format
msgid "%s joined group %s"
-msgstr "%s / Favoriter från %s"
+msgstr "%s gick med i grupp %s"
#: actions/leavegroup.php:60
-#, fuzzy
msgid "You must be logged in to leave a group."
-msgstr "du måste vara inloggad för att kunna bjuda in andra användare till %s"
+msgstr "Du måste vara inloggad för att lämna en grupp."
#: actions/leavegroup.php:90 lib/command.php:268
-#, fuzzy
msgid "You are not a member of that group."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Du är inte en medlem i den gruppen."
#: actions/leavegroup.php:119 lib/command.php:278
-#, fuzzy
msgid "Could not find membership record."
-msgstr "Kunde inte uppdatera användarens inställningar."
+msgstr "Kunde inte hitta uppgift om medlemskap."
#: actions/leavegroup.php:127 lib/command.php:284
-#, fuzzy, php-format
+#, php-format
msgid "Could not remove user %s to group %s"
-msgstr "Kunde inte följa användaren: Användaren kunde inte hittas."
+msgstr "Kunde inte ta bort användare %s från grupp %s"
#: actions/leavegroup.php:134 lib/command.php:289
#, php-format
msgid "%s left group %s"
-msgstr ""
+msgstr "%s lämnade grupp %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Redan inloggad."
-#: actions/login.php:108 actions/login.php:118
-#, fuzzy
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
-msgstr "Ogiltig innehåll i inlägget "
+msgstr "Ogiltig eller utgången token."
#: actions/login.php:146
msgid "Incorrect username or password."
msgstr "Felaktigt användarnamn eller lösenord."
#: actions/login.php:152
-#, fuzzy
msgid "Error setting user. You are probably not authorized."
-msgstr "Inte tillstånd ännu."
+msgstr "Fel vid inställning av användare. Du har sannolikt inte tillstånd."
#: actions/login.php:207 actions/login.php:260 lib/action.php:458
#: lib/logingroupnav.php:79
@@ -1882,7 +1808,7 @@ msgstr "Logga in"
#: actions/login.php:246
msgid "Login to site"
-msgstr ""
+msgstr "Logga in på webbplatsen"
#: actions/login.php:249 actions/profilesettings.php:106
#: actions/register.php:423 actions/showgroup.php:236 actions/tagother.php:94
@@ -1901,60 +1827,59 @@ msgstr "Kom ihåg mig"
#: actions/login.php:256 actions/register.php:479
msgid "Automatically login in the future; not for shared computers!"
-msgstr "Logga in automatiskt i framtiden; Ej för publika datorer!"
+msgstr "Logga in automatiskt i framtiden; inte för delade datorer!"
#: actions/login.php:266
msgid "Lost or forgotten password?"
-msgstr "Glömt bort lösenord?"
+msgstr "Tappat bort eller glömt ditt lösenord?"
#: actions/login.php:285
msgid ""
"For security reasons, please re-enter your user name and password before "
"changing your settings."
msgstr ""
-"Av säkerhetsskäl, var vänlig skriv in ditt användarnamn och lösenord innan "
-"du ändrar dina inställningar."
+"Av säkerhetsskäl, var vänlig och skriv in ditt användarnamn och lösenord "
+"igen innan du ändrar dina inställningar."
#: actions/login.php:289
-#, fuzzy, php-format
+#, php-format
msgid ""
"Login with your username and password. Don't have a username yet? [Register]"
"(%%action.register%%) a new account."
msgstr ""
"Logga in med ditt användarnamn och lösenord. Har du inget användarnamn ännu? "
-"[Registrera](%%action.register%%) ett nytt konto, eller testa [OpenID](%%"
-"action.openidlogin%%)."
+"[Registrera](%%action.register%%) ett nytt konto."
#: actions/makeadmin.php:91
msgid "Only an admin can make another user an admin."
-msgstr ""
+msgstr "Bara en administratör kan göra en annan användare till administratör."
#: actions/makeadmin.php:95
#, php-format
msgid "%s is already an admin for group \"%s\"."
-msgstr ""
+msgstr "%s är redan en administratör för grupp \"%s\"."
#: actions/makeadmin.php:132
#, php-format
msgid "Can't get membership record for %s in group %s"
-msgstr ""
+msgstr "Kan inte hämta uppgift om medlemskap för %s i grupp %s"
#: actions/makeadmin.php:145
#, php-format
msgid "Can't make %s an admin for group %s"
-msgstr ""
+msgstr "Kan inte göra %s till en administratör för grupp %s"
#: actions/microsummary.php:69
msgid "No current status"
-msgstr ""
+msgstr "Ingen aktuell status"
#: actions/newgroup.php:53
msgid "New group"
-msgstr ""
+msgstr "Ny grupp"
#: actions/newgroup.php:110
msgid "Use this form to create a new group."
-msgstr ""
+msgstr "Använd detta formulär för att skapa en ny grupp."
#: actions/newmessage.php:71 actions/newmessage.php:231
msgid "New message"
@@ -1962,7 +1887,7 @@ msgstr "Nytt meddelande"
#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:367
msgid "You can't send a message to this user."
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Du kan inte skicka ett meddelande till den användaren."
#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:351
#: lib/command.php:424
@@ -1971,35 +1896,35 @@ msgstr "Inget innehåll!"
#: actions/newmessage.php:158
msgid "No recipient specified."
-msgstr "Ingen mottagare tillagd."
+msgstr "Ingen mottagare angiven."
#: actions/newmessage.php:164 lib/command.php:370
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
-msgstr "Skicka inte meddelande till dig själv, viska lite tyst istället."
+msgstr ""
+"Skicka inte meddelande till dig själv; viska lite tyst till dig själv "
+"istället."
#: actions/newmessage.php:181
-#, fuzzy
msgid "Message sent"
-msgstr "Nytt meddelande"
+msgstr "Meddelande skickat"
#: actions/newmessage.php:185 lib/command.php:375
#, php-format
msgid "Direct message to %s sent"
-msgstr ""
+msgstr "Direktmeddelande till %s skickat"
#: actions/newmessage.php:210 actions/newnotice.php:240 lib/channel.php:170
msgid "Ajax Error"
-msgstr ""
+msgstr "AJAX-fel"
#: actions/newnotice.php:69
msgid "New notice"
-msgstr "Nytt inlägg"
+msgstr "Ny notis"
#: actions/newnotice.php:206
-#, fuzzy
msgid "Notice posted"
-msgstr "Inlägg"
+msgstr "Notis postad"
#: actions/noticesearch.php:68
#, php-format
@@ -2007,17 +1932,17 @@ msgid ""
"Search for notices on %%site.name%% by their contents. Separate search terms "
"by spaces; they must be 3 characters or more."
msgstr ""
-"Sök efter innehåll i inlägg på %%site.name%%. Skilj söktermerna åt med "
-"mellanslag; dom måste vara minst tre tecken långa."
+"Sök efter innehåll i notiser på %%site.name%%. Skilj söktermerna åt med "
+"mellanslag; de måste vara minst tre tecken långa."
#: actions/noticesearch.php:78
msgid "Text search"
-msgstr "Text sökning"
+msgstr "Textsökning"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%s\" on %s"
-msgstr "Sök i strömmen efter \"%s\""
+msgstr "Sökresultat för \"%s\" på %s"
#: actions/noticesearch.php:121
#, php-format
@@ -2025,6 +1950,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Bli först att [posta i detta ämne](%%%%action.newnotice%%%%?status_textarea=%"
+"s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2032,123 +1959,121 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"Varför inte [registrera ett konto](%%%%action.register%%%%) och bli först "
+"att [posta i detta ämne](%%%%action.newnotice%%%%?status_textarea=%s)!"
#: actions/noticesearchrss.php:96
-#, fuzzy, php-format
+#, php-format
msgid "Updates with \"%s\""
-msgstr "Uppdateringar från %1$s på %2$s!"
+msgstr "Uppdateringar med \"%s\""
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Alla uppdateringar som matchar söksträngen \"%s\""
+msgstr "Uppdateringar som matchar söksträngen \"%1$s\" på %2$s!"
#: actions/nudge.php:85
msgid ""
"This user doesn't allow nudges or hasn't confirmed or set his email yet."
msgstr ""
+"Denna användare har inte tillåtit knuffar eller har inte bekräftat eller "
+"angett sitt e-post än."
#: actions/nudge.php:94
msgid "Nudge sent"
-msgstr ""
+msgstr "Knuff sänd"
#: actions/nudge.php:97
msgid "Nudge sent!"
-msgstr ""
+msgstr "Knuff sänd!"
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
-msgstr "Inlägget har ingen profil"
+msgstr "Notisen har ingen profil"
#: actions/oembed.php:86 actions/shownotice.php:180
#, php-format
msgid "%1$s's status on %2$s"
-msgstr "%1$s's status den %2$s"
+msgstr "%1$ss status den %2$s"
#: actions/oembed.php:157
-#, fuzzy
msgid "content type "
-msgstr "Anslut"
+msgstr "innehållstyp "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
-msgstr "Ingen support för det formatet."
+msgstr "Ett dataformat som inte stödjs"
#: actions/opensearch.php:64
msgid "People Search"
-msgstr "Personer sökning"
+msgstr "Personsökning"
#: actions/opensearch.php:67
msgid "Notice Search"
-msgstr "Inlägg sökning"
+msgstr "Notissökning"
#: actions/othersettings.php:60
-#, fuzzy
msgid "Other Settings"
-msgstr "Twitter inställningar"
+msgstr "Övriga inställningar"
#: actions/othersettings.php:71
msgid "Manage various other options."
-msgstr ""
+msgstr "Hantera diverse andra alternativ."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr "(fri tjänst)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
-msgstr ""
+msgstr "Förkorta URL:er med"
#: actions/othersettings.php:117
msgid "Automatic shortening service to use."
-msgstr ""
+msgstr "Automatiska förkortningstjänster att använda."
#: actions/othersettings.php:122
-#, fuzzy
msgid "View profile designs"
-msgstr "Profil inställningar"
+msgstr "Visa profilutseenden"
#: actions/othersettings.php:123
msgid "Show or hide profile designs."
-msgstr ""
+msgstr "Visa eller göm profilutseenden."
#: actions/othersettings.php:153
-#, fuzzy
msgid "URL shortening service is too long (max 50 chars)."
-msgstr "Språket är för långt(max 50 tecken)."
+msgstr "Namnet på URL-förkortningstjänsen är för långt (max 50 tecken)."
#: actions/outbox.php:58
#, php-format
msgid "Outbox for %s - page %d"
-msgstr "Outbox för %s - sida %d"
+msgstr "Utkorg för %s - sida %d"
#: actions/outbox.php:61
#, php-format
msgid "Outbox for %s"
-msgstr "Outbox för %s"
+msgstr "Utkorg för %s"
#: actions/outbox.php:116
msgid "This is your outbox, which lists private messages you have sent."
-msgstr "Detta är din outbox som innehåller meddelanden som du skickat."
+msgstr "Detta är din utkorg som innehåller privata meddelanden du har skickat."
#: actions/passwordsettings.php:58
msgid "Change password"
msgstr "Byt lösenord"
#: actions/passwordsettings.php:69
-#, fuzzy
msgid "Change your password."
-msgstr "Ändra ditt lösenord"
+msgstr "Byt ditt lösenord."
#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
-#, fuzzy
msgid "Password change"
-msgstr "Lösenord är sparat."
+msgstr "Byte av lösenord"
#: actions/passwordsettings.php:104
msgid "Old password"
@@ -2185,127 +2110,120 @@ msgstr "Lösenorden matchar inte."
#: actions/passwordsettings.php:165
msgid "Incorrect old password"
-msgstr "Felaktigt, gammalt lösenord"
+msgstr "Felaktigt gammalt lösenord"
#: actions/passwordsettings.php:181
msgid "Error saving user; invalid."
-msgstr "Fel uppstog när användare skulle sparas."
+msgstr "Fel vid sparande av användare; ogiltig."
#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
msgid "Can't save new password."
-msgstr "Kan inte spara det nya lösenordet."
+msgstr "Kan inte spara nytt lösenord."
#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
msgid "Password saved."
-msgstr "Lösenord är sparat."
+msgstr "Lösenord sparat."
#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:308
msgid "Paths"
-msgstr ""
+msgstr "Sökvägar"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
-msgstr ""
+msgstr "Sökvägs- och serverinställningar för denna StatusNet-webbplats."
#: actions/pathsadminpanel.php:140
-#, fuzzy, php-format
+#, php-format
msgid "Theme directory not readable: %s"
-msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat"
+msgstr "Katalog med teman är inte läsbar: %s"
#: actions/pathsadminpanel.php:146
#, php-format
msgid "Avatar directory not writable: %s"
-msgstr ""
+msgstr "Katalog med avatarer är inte skrivbar: %s"
#: actions/pathsadminpanel.php:152
#, php-format
msgid "Background directory not writable: %s"
-msgstr ""
+msgstr "Katalog med bakgrunder är inte skrivbar: %s"
#: actions/pathsadminpanel.php:160
#, php-format
msgid "Locales directory not readable: %s"
-msgstr ""
+msgstr "Katalog med lokaliseringfiler (locales) är inte läsbar. %s"
#: actions/pathsadminpanel.php:212 actions/siteadminpanel.php:58
#: lib/adminpanelaction.php:299
-#, fuzzy
msgid "Site"
-msgstr "Bjud in"
+msgstr "Webbplats"
#: actions/pathsadminpanel.php:216
msgid "Path"
-msgstr ""
+msgstr "Sökväg"
#: actions/pathsadminpanel.php:216
-#, fuzzy
msgid "Site path"
-msgstr "Nytt inlägg"
+msgstr "Sökväg till webbplats"
#: actions/pathsadminpanel.php:220
msgid "Path to locales"
-msgstr ""
+msgstr "Sökväg till lokaliseringfiler (locales)"
#: actions/pathsadminpanel.php:220
msgid "Directory path to locales"
-msgstr ""
+msgstr "Katalogsökväg till lokaliseringfiler (locales)"
#: actions/pathsadminpanel.php:227
msgid "Theme"
-msgstr ""
+msgstr "Teman"
#: actions/pathsadminpanel.php:232
msgid "Theme server"
-msgstr ""
+msgstr "Server med teman"
#: actions/pathsadminpanel.php:236
msgid "Theme path"
-msgstr ""
+msgstr "Sökväg till teman"
#: actions/pathsadminpanel.php:240
msgid "Theme directory"
-msgstr ""
+msgstr "Katalog med teman"
#: actions/pathsadminpanel.php:247
-#, fuzzy
msgid "Avatars"
-msgstr "Användarbild"
+msgstr "Avatarer"
#: actions/pathsadminpanel.php:252
-#, fuzzy
msgid "Avatar server"
-msgstr "Twitter inställningar"
+msgstr "Server med avatarer"
#: actions/pathsadminpanel.php:256
-#, fuzzy
msgid "Avatar path"
-msgstr "Användarbilden uppdaterad."
+msgstr "Sökväg till avatarer"
#: actions/pathsadminpanel.php:260
-#, fuzzy
msgid "Avatar directory"
-msgstr "Användarbilden uppdaterad."
+msgstr "Katalog med avatarer"
#: actions/pathsadminpanel.php:269
msgid "Backgrounds"
-msgstr ""
+msgstr "Bakgrunder"
#: actions/pathsadminpanel.php:273
msgid "Background server"
-msgstr ""
+msgstr "Server med bakgrunder"
#: actions/pathsadminpanel.php:277
msgid "Background path"
-msgstr ""
+msgstr "Sökväg till bakgrunder"
#: actions/pathsadminpanel.php:281
msgid "Background directory"
-msgstr ""
+msgstr "Katalog med bakgrunder"
#: actions/pathsadminpanel.php:297
-#, fuzzy
msgid "Save paths"
-msgstr "Nytt inlägg"
+msgstr "Spara sökvägar"
#: actions/peoplesearch.php:52
#, php-format
@@ -2314,45 +2232,45 @@ msgid ""
"Separate the terms by spaces; they must be 3 characters or more."
msgstr ""
"Sök efter personer på %%site.name%% efter deras namn, plats eller intressen. "
-"Skilj söktermerna åt med mellanslag; de måste vara minst tre tecken långa. "
+"Skilj söktermerna åt med mellanslag; de måste vara tre tecken långa."
#: actions/peoplesearch.php:58
msgid "People search"
-msgstr "Sökning personer"
+msgstr "Personsökning"
#: actions/peopletag.php:70
-#, fuzzy, php-format
+#, php-format
msgid "Not a valid people tag: %s"
-msgstr "Ingen giltig emailadress"
+msgstr "Inte en giltig persontagg: %s"
#: actions/peopletag.php:144
#, php-format
msgid "Users self-tagged with %s - page %d"
-msgstr ""
+msgstr "Användare som taggat sig själv med %s - sida %d"
#: actions/postnotice.php:84
msgid "Invalid notice content"
-msgstr "Ogiltig innehåll i inlägget "
+msgstr "Ogiltigt notisinnehåll"
#: actions/postnotice.php:90
#, php-format
msgid "Notice license ‘%s’ is not compatible with site license ‘%s’."
-msgstr ""
+msgstr "Licensen för notiser ‘%s’ är inte förenlig webbplatslicensen ‘%s’."
#: actions/profilesettings.php:60
msgid "Profile settings"
-msgstr "Profil inställningar"
+msgstr "Profilinställningar"
#: actions/profilesettings.php:71
msgid ""
"You can update your personal profile info here so people know more about you."
msgstr ""
-"Du kan uppdatera din personliga profil här så personer får veta mer om dig."
+"Du kan uppdatera din personliga profilinformation här så personer får veta "
+"mer om dig."
#: actions/profilesettings.php:99
-#, fuzzy
msgid "Profile information"
-msgstr "Okänd profil"
+msgstr "Profilinformation"
#: actions/profilesettings.php:108 lib/groupeditform.php:154
msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
@@ -2362,7 +2280,7 @@ msgstr "1-64 små bokstäver eller nummer, inga punkter eller mellanslag"
#: actions/showgroup.php:247 actions/tagother.php:104
#: lib/groupeditform.php:157 lib/userprofile.php:149
msgid "Full name"
-msgstr "Ditt fulla namn."
+msgstr "Fullständigt namn"
#: actions/profilesettings.php:115 actions/register.php:452
#: lib/groupeditform.php:161
@@ -2371,17 +2289,16 @@ msgstr "Hemsida"
#: actions/profilesettings.php:117 actions/register.php:454
msgid "URL of your homepage, blog, or profile on another site"
-msgstr "URL till din hemsida, blog eller profil på en annan sida."
+msgstr "URL till din hemsida, blogg eller profil på en annan webbplats."
#: actions/profilesettings.php:122 actions/register.php:460
-#, fuzzy, php-format
+#, php-format
msgid "Describe yourself and your interests in %d chars"
-msgstr "Berätta om dig själv och dina intressen inom 140 tecken"
+msgstr "Beskriv dig själv och dina intressen med högst 140 tecken"
#: actions/profilesettings.php:125 actions/register.php:463
-#, fuzzy
msgid "Describe yourself and your interests"
-msgstr "Berätta om dig själv och dina intressen inom 140 tecken"
+msgstr "Beskriv dig själv och dina intressen"
#: actions/profilesettings.php:127 actions/register.php:465
msgid "Bio"
@@ -2408,6 +2325,8 @@ msgstr "Taggar"
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
+"Taggar för dig själv (bokstäver, nummer, -, ., och _), separerade med "
+"kommatecken eller mellanslag"
#: actions/profilesettings.php:144 actions/siteadminpanel.php:307
msgid "Language"
@@ -2415,7 +2334,7 @@ msgstr "Språk"
#: actions/profilesettings.php:145
msgid "Preferred language"
-msgstr "Språkval"
+msgstr "Föredraget språk"
#: actions/profilesettings.php:154
msgid "Timezone"
@@ -2423,32 +2342,31 @@ msgstr "Tidszon"
#: actions/profilesettings.php:155
msgid "What timezone are you normally in?"
-msgstr "Vilken tidszon befinner du dig normalt?"
+msgstr "I vilken tidszon befinner du dig normalt?"
#: actions/profilesettings.php:160
msgid ""
"Automatically subscribe to whoever subscribes to me (best for non-humans)"
msgstr ""
-"Automatisk prenummeration på den som prenumererar på mig. (Bäst för icke "
-"mänsklig användare) "
+"Prenumerera automatiskt på den prenumererar på mig (bäst för icke-människa) "
#: actions/profilesettings.php:221 actions/register.php:223
-#, fuzzy, php-format
+#, php-format
msgid "Bio is too long (max %d chars)."
-msgstr "Biografin är för lång (max 140 tecken)"
+msgstr "Biografin är för lång (max %d tecken)."
#: actions/profilesettings.php:228 actions/siteadminpanel.php:165
msgid "Timezone not selected."
-msgstr "Du har inte valt tidszon"
+msgstr "Tidszon inte valt."
#: actions/profilesettings.php:234
msgid "Language is too long (max 50 chars)."
-msgstr "Språket är för långt(max 50 tecken)."
+msgstr "Språknamn är för långt (max 50 tecken)."
#: actions/profilesettings.php:246 actions/tagother.php:178
-#, fuzzy, php-format
+#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Ogiltig hemsideadress '%s'"
+msgstr "Ogiltig tagg: \"%s\""
#: actions/profilesettings.php:295
msgid "Couldn't update user for autosubscribe."
@@ -2459,9 +2377,8 @@ msgid "Couldn't save profile."
msgstr "Kunde inte spara profil."
#: actions/profilesettings.php:336
-#, fuzzy
msgid "Couldn't save tags."
-msgstr "Kunde inte spara profil."
+msgstr "Kunde inte spara taggar."
#: actions/profilesettings.php:344 lib/adminpanelaction.php:126
msgid "Settings saved."
@@ -2470,36 +2387,32 @@ msgstr "Inställningar sparade."
#: actions/public.php:83
#, php-format
msgid "Beyond the page limit (%s)"
-msgstr ""
+msgstr "Bortom sidbegränsningen (%s)"
#: actions/public.php:92
-#, fuzzy
msgid "Could not retrieve public stream."
-msgstr "Kunde inte ta emot favoritinläggen."
+msgstr "Kunde inte hämta publik ström."
#: actions/public.php:129
-#, fuzzy, php-format
+#, php-format
msgid "Public timeline, page %d"
-msgstr "Publik tidslinje"
+msgstr "Publik tidslinje, sida %d"
#: actions/public.php:131 lib/publicgroupnav.php:79
msgid "Public timeline"
msgstr "Publik tidslinje"
#: actions/public.php:151
-#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
-msgstr "Publik ström"
+msgstr "Publikt flöde av ström (RSS 1.0)"
#: actions/public.php:155
-#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
-msgstr "Publik ström"
+msgstr "Publikt flöde av ström (RSS 2.0)"
#: actions/public.php:159
-#, fuzzy
msgid "Public Stream Feed (Atom)"
-msgstr "Publik ström"
+msgstr "Publikt flöde av ström (Atom)"
#: actions/public.php:179
#, php-format
@@ -2507,16 +2420,20 @@ msgid ""
"This is the public timeline for %%site.name%% but no one has posted anything "
"yet."
msgstr ""
+"Detta är den publika tidslinjen för %%site.name%% men ingen har postat något "
+"än."
#: actions/public.php:182
msgid "Be the first to post!"
-msgstr ""
+msgstr "Bli först att posta!"
#: actions/public.php:186
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
+"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
+"posta!"
#: actions/public.php:233
#, php-format
@@ -2526,6 +2443,10 @@ msgid ""
"tool. [Join now](%%action.register%%) to share notices about yourself with "
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
+"Detta är %%site.name%%, en [mikroblogg](http://en.wikipedia.org/wiki/Micro-"
+"blogging)-tjänst baserad på den fria programvaran [StatusNet](http://status."
+"net/). [Gå med nu](%%action.register%%) för att dela notiser om dig själv "
+"med vänner, familj och kollegor! ([Läs mer](%%doc.help%%))"
#: actions/public.php:238
#, php-format
@@ -2534,25 +2455,27 @@ msgid ""
"blogging) service based on the Free Software [StatusNet](http://status.net/) "
"tool."
msgstr ""
+"Detta är %%site.name%%, en [mikroblogg](http://en.wikipedia.org/wiki/Micro-"
+"blogging)-tjänst baserad på den fria programvaran [StatusNet](http://status."
+"net/)."
#: actions/publictagcloud.php:57
-#, fuzzy
msgid "Public tag cloud"
-msgstr "Publik ström"
+msgstr "Publikt taggmoln"
#: actions/publictagcloud.php:63
#, php-format
msgid "These are most popular recent tags on %s "
-msgstr ""
+msgstr "Dessa är de populäraste senaste taggarna på %s "
#: actions/publictagcloud.php:69
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
-msgstr ""
+msgstr "Ingen har postat en notis med en [hashtagg](%%doc.tags%%) än."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "Bli först att posta en!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2560,10 +2483,12 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to post "
"one!"
msgstr ""
+"Varför inte [registrera ett konto](%%action.register%%) och bli först att "
+"posta en!"
#: actions/publictagcloud.php:135
msgid "Tag cloud"
-msgstr ""
+msgstr "Taggmoln"
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
@@ -2571,53 +2496,56 @@ msgstr "Du är redan inloggad!"
#: actions/recoverpassword.php:62
msgid "No such recovery code."
-msgstr "Ingen sådan återställningskod. "
+msgstr "Ingen sådan återskapningskod."
#: actions/recoverpassword.php:66
msgid "Not a recovery code."
-msgstr "Det är ingen kod för återställning."
+msgstr "Inte en återskapningskod."
#: actions/recoverpassword.php:73
msgid "Recovery code for unknown user."
-msgstr "Kod för återställning av okänd användare."
+msgstr "Återskapningskod för okänd användare."
#: actions/recoverpassword.php:86
msgid "Error with confirmation code."
-msgstr "Fel uppstog med bekräftelsekoden."
+msgstr "Fel med bekräftelsekod."
#: actions/recoverpassword.php:97
msgid "This confirmation code is too old. Please start again."
-msgstr "Denna bekräftelsekod är för gammal. Du får starta om på nytt igen."
+msgstr "Denna bekräftelsekod är för gammal. Var vänlig börja om igen."
#: actions/recoverpassword.php:111
msgid "Could not update user with confirmed email address."
-msgstr "Kunde inte uppdatera användaren med bekräftad emailadress."
+msgstr "Kunde inte uppdatera användaren med bekräftad e-postadress."
#: actions/recoverpassword.php:152
msgid ""
"If you have forgotten or lost your password, you can get a new one sent to "
"the email address you have stored in your account."
msgstr ""
+"Om du har glömt eller förlorat ditt lösenord kan du få ett nytt skickat till "
+"den e-postadress du har sparat i ditt konto."
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
-msgstr ""
+msgstr "Du har blivit identifierad. Ange ett nytt lösenord nedan. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
-msgstr ""
+msgstr "Återskapande av lösenord"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
-msgstr ""
+msgstr "Smeknamn eller e-postadress"
#: actions/recoverpassword.php:193
msgid "Your nickname on this server, or your registered email address."
-msgstr "Ditt användarnamn på denna server eller registrerad epost adress."
+msgstr ""
+"Ditt användarnamn på denna server, eller din registrerade e-postadress."
#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
msgid "Recover"
-msgstr "Återställ"
+msgstr "Ã…terskapa"
#: actions/recoverpassword.php:208
msgid "Reset password"
@@ -2625,11 +2553,11 @@ msgstr "Återställ lösenord"
#: actions/recoverpassword.php:209
msgid "Recover password"
-msgstr "Återställ lösenord"
+msgstr "Återskapa lösenord"
#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
msgid "Password recovery requested"
-msgstr "Förfrågan om återställning av lösenord"
+msgstr "Återskapande av lösenord begärd"
#: actions/recoverpassword.php:213
msgid "Unknown action"
@@ -2637,7 +2565,7 @@ msgstr "Okänd funktion"
#: actions/recoverpassword.php:236
msgid "6 or more characters, and don't forget it!"
-msgstr "Minst 6 tecken och glöm inte bort det!"
+msgstr "Minst 6 tecken, och glöm inte bort det!"
#: actions/recoverpassword.php:243
msgid "Reset"
@@ -2645,35 +2573,35 @@ msgstr "Återställ"
#: actions/recoverpassword.php:252
msgid "Enter a nickname or email address."
-msgstr "Skriv in ett smeknamn eller en epostadress."
+msgstr "Skriv in ett smeknamn eller en e-postadress."
#: actions/recoverpassword.php:272
msgid "No user with that email address or username."
-msgstr "Ingen användare med den emailadressen eller användarnamn."
+msgstr "Ingen användare med den e-postadressen eller användarnamn."
#: actions/recoverpassword.php:287
msgid "No registered email address for that user."
-msgstr "Ingen registrerad epost adress för den användaren."
+msgstr "Ingen registrerad e-postadress för den användaren."
#: actions/recoverpassword.php:301
msgid "Error saving address confirmation."
-msgstr "Fel uppstog när adressen skulle bekräftas."
+msgstr "Fel vid sparande av adressbekräftelse."
#: actions/recoverpassword.php:325
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-"Instruktioner om hur du återställer ditt lösenord har sänts till din e-"
-"postadress "
+"Instruktioner för att återställa ditt lösenord har skickats till e-"
+"postadressen som är registrerat till ditt konto "
#: actions/recoverpassword.php:344
msgid "Unexpected password reset."
-msgstr "Oväntad rensning av lösenord."
+msgstr "Oväntad återställning av lösenord."
#: actions/recoverpassword.php:352
msgid "Password must be 6 chars or more."
-msgstr "Lösenordet måste vara 6 tecken eller fler."
+msgstr "Lösenordet måste vara minst 6 tecken."
#: actions/recoverpassword.php:356
msgid "Password and confirmation do not match."
@@ -2685,20 +2613,19 @@ msgstr "Fel uppstog i användarens inställning"
#: actions/recoverpassword.php:382
msgid "New password successfully saved. You are now logged in."
-msgstr "Nya lösenordet har blivit sparat. Du är nu även inloggad."
+msgstr "Nya lösenordet sparat. Du är nu inloggad."
#: actions/register.php:85 actions/register.php:189 actions/register.php:404
msgid "Sorry, only invited people can register."
-msgstr ""
+msgstr "Ledsen, bara inbjudna personer kan registrera sig."
#: actions/register.php:92
-#, fuzzy
msgid "Sorry, invalid invitation code."
-msgstr "Fel uppstog med bekräftelsekoden."
+msgstr "Ledsen, ogiltig inbjudningskod."
#: actions/register.php:112
msgid "Registration successful"
-msgstr "Registreringen är genomförd"
+msgstr "Registreringen genomförd"
#: actions/register.php:114 actions/register.php:502 lib/action.php:455
#: lib/logingroupnav.php:85
@@ -2707,29 +2634,31 @@ msgstr "Registrera"
#: actions/register.php:135
msgid "Registration not allowed."
-msgstr "Registrering är inte möjlig."
+msgstr "Registrering inte tillåten."
#: actions/register.php:198
msgid "You can't register if you don't agree to the license."
-msgstr "Du kan inte registrera dig om du inte godkänner licensvillkor."
+msgstr "Du kan inte registrera dig om du inte godkänner licensen."
#: actions/register.php:201
msgid "Not a valid email address."
-msgstr "Det är ingen giltig epost adress."
+msgstr "Inte en giltig e-postadress."
#: actions/register.php:212
msgid "Email address already exists."
-msgstr "Epostadressen finns redan."
+msgstr "E-postadressen finns redan."
#: actions/register.php:243 actions/register.php:264
msgid "Invalid username or password."
-msgstr "Felaktigt användarnamn eller lösenord."
+msgstr "Ogiltigt användarnamn eller lösenord."
#: actions/register.php:342
msgid ""
"With this form you can create a new account. You can then post notices and "
"link up to friends and colleagues. "
msgstr ""
+"Med detta formulär kan du skapa ett nytt konto. Du kan sedan posta notiser "
+"och ansluta till vänner och kollegor. "
#: actions/register.php:424
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -2739,7 +2668,7 @@ msgstr ""
#: actions/register.php:429
msgid "6 or more characters. Required."
-msgstr "6 eller fler tecken. MÃ¥ste fyllas i."
+msgstr "Minst 6 tecken. MÃ¥ste fyllas i."
#: actions/register.php:433
msgid "Same as password above. Required."
@@ -2748,32 +2677,32 @@ msgstr "Samma som lösenordet ovan. Måste fyllas i."
#: actions/register.php:437 actions/register.php:441
#: actions/siteadminpanel.php:283 lib/accountsettingsaction.php:120
msgid "Email"
-msgstr "Epost"
+msgstr "E-post"
#: actions/register.php:438 actions/register.php:442
msgid "Used only for updates, announcements, and password recovery"
msgstr ""
-"Används endast för uppdateringar, annonsering och återställning av lösenord"
+"Används endast för uppdateringar, tillkännagivanden och återskapande av "
+"lösenord"
#: actions/register.php:449
msgid "Longer name, preferably your \"real\" name"
-msgstr "Långt namn, förslagsvis ditt \"riktiga\" namn"
+msgstr "Längre namn, förslagsvis ditt \"verkliga\" namn"
#: actions/register.php:493
msgid "My text and files are available under "
-msgstr "Min text och filer finns tillgängliga under"
+msgstr "Min text och mina filer är tillgängliga under "
#: actions/register.php:495
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Erkännande 3.0"
#: actions/register.php:496
-#, fuzzy
msgid ""
" except this private data: password, email address, IM address, and phone "
"number."
msgstr ""
-"förutom det här, som är privat: lösenord, epostadress, IM-adress, "
+"med undantag av den här privata datan: lösenord, e-postadress, IM-adress, "
"telefonnummer."
#: actions/register.php:537
@@ -2794,28 +2723,14 @@ msgid ""
"\n"
"Thanks for signing up and we hope you enjoy using this service."
msgstr ""
-"Grattis, %s! Välkommen till %%%%site.name%%%%. Härifrån, kanske du vill...\n"
-"\n"
-"* Gå till [din profil](%s) och göra ditt första inlägg.\n"
-"* Lägg till en [Jabber/GTalk adress](%%%%action.imsettings%%%%) så du kan "
-"skicka inlägg med en IM klient.\n"
-"* [Sök efter personer](%%%%action.peoplesearch%%%%) som du kanske känner "
-"eller delar dina intressen. \n"
-"* Uppdatera din [profil inställning](%%%%action.profilesettings%%%%) för att "
-"berätta lite mer om dig själv för andra här. \n"
-"* Läs igenom [online dok](%%%%doc.help%%%%) efter funktioner som du kanske "
-"missat. \n"
-"\n"
-"Tack för att du registrerade dig och vi hoppas du kommer trivas med denna "
-"service."
#: actions/register.php:561
msgid ""
"(You should receive a message by email momentarily, with instructions on how "
"to confirm your email address.)"
msgstr ""
-"(Du kommer få ett meddelande med email inom kort med instruktioner hur du "
-"bekräftar din emailadress)"
+"(Du kommer få ett meddelande med e-post inom kort med instruktioner hur du "
+"bekräftar din e-postadress.)"
#: actions/remotesubscribe.php:98
#, php-format
@@ -2824,9 +2739,9 @@ msgid ""
"register%%) a new account. If you already have an account on a [compatible "
"microblogging site](%%doc.openmublog%%), enter your profile URL below."
msgstr ""
-"För att prenumerera så kan du [logga in](%%action.login%%) eller [registrera]"
-"(%%action.register%%) ett nytt konto. Om du redan har ett konto på en "
-"[kompatibel mikroblogg sida](%%doc.openmublog%%) fyll i din profils URL "
+"För att prenumerera kan du [logga in](%%action.login%%) eller [registrera](%%"
+"action.register%%) ett nytt konto. Om du redan har ett konto på en "
+"[kompatibel mikrobloggwebbplats](%%doc.openmublog%%), fyll i din profils URL "
"nedan."
#: actions/remotesubscribe.php:112
@@ -2834,9 +2749,8 @@ msgid "Remote subscribe"
msgstr "Fjärrprenumerera"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
-msgstr "Prenumerera på mina Twitter vänner här."
+msgstr "Prenumerera på en fjärranvändare"
#: actions/remotesubscribe.php:129
msgid "User nickname"
@@ -2848,11 +2762,11 @@ msgstr "Smeknamnet på användaren du vill följa"
#: actions/remotesubscribe.php:133
msgid "Profile URL"
-msgstr "Profil URL"
+msgstr "Profil-URL"
#: actions/remotesubscribe.php:134
msgid "URL of your profile on another compatible microblogging service"
-msgstr "URL till din profil på en annan kompatibel mikroblogg"
+msgstr "URL till din profil på en annan kompatibel mikrobloggtjänst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
#: lib/userprofile.php:365
@@ -2861,21 +2775,21 @@ msgstr "Prenumerera"
#: actions/remotesubscribe.php:159
msgid "Invalid profile URL (bad format)"
-msgstr "Nåt är fel med profil URL (Format fel)"
+msgstr "Ogiltig profil-URL (dåligt format)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
-msgstr "Det är ingen giltig profil URL (ingen YADIS angiven)."
+msgstr ""
+"Inte en giltig profil-URL (inget YADIS-dokument eller ogiltig XRDS "
+"definerad)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
-msgstr ""
+msgstr "Det där är en lokal profil! Logga in för att prenumerera."
#: actions/remotesubscribe.php:183
-#, fuzzy
msgid "Couldn’t get a request token."
-msgstr "Kunde inte få en förfrågan token."
+msgstr "Kunde inte få en förfrågnings-token."
#: actions/replies.php:125 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -2884,24 +2798,24 @@ msgid "Replies to %s"
msgstr "Svarat på %s"
#: actions/replies.php:127
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %s, page %d"
-msgstr "Svarat på %s"
+msgstr "Svar till %s, sida %d"
#: actions/replies.php:144
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 1.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde med svar för %s (RSS 1.0)"
#: actions/replies.php:151
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 2.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde med svar för %s (RSS 2.0)"
#: actions/replies.php:158
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (Atom)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde med svar för %s (Atom)"
#: actions/replies.php:198
#, php-format
@@ -2909,6 +2823,8 @@ msgid ""
"This is the timeline showing replies to %s but %s hasn't received a notice "
"to his attention yet."
msgstr ""
+"Detta är tidslinjen som visar svar till %s men %s har inte tagit emot en "
+"notis för dennes uppmärksamhet än."
#: actions/replies.php:203
#, php-format
@@ -2916,6 +2832,8 @@ msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
+"Du kan engagera andra användare i en konversation, prenumerera på fler "
+"personer eller [gå med i grupper](%%action.groups%%)."
#: actions/replies.php:205
#, php-format
@@ -2923,45 +2841,47 @@ msgid ""
"You can try to [nudge %s](../%s) or [post something to his or her attention]"
"(%%%%action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"Du kan prova att [knuffa %s](../%s) eller [posta någonting för hans eller "
+"hennes uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "Meddelande till %1$s på %2$s"
+msgstr "Svar till %1$s på %2$s"
#: actions/sandbox.php:65 actions/unsandbox.php:65
#, fuzzy
msgid "You cannot sandbox users on this site."
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Du kan inte flytta användare till sandlåda på denna webbplats."
#: actions/sandbox.php:72
#, fuzzy
msgid "User is already sandboxed."
-msgstr "Användaren har ingen profil."
+msgstr "Användare är redan flyttad till sandlåda."
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%s's favorite notices, page %d"
-msgstr "%s favoriter"
+msgstr "%ss favoritnotiser, sida %d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
-msgstr "Kunde inte ta emot favoritinläggen."
+msgstr "Kunde inte hämta favoritnotiser."
#: actions/showfavorites.php:170
#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöde för %ss favoriter (RSS 1.0)"
#: actions/showfavorites.php:177
#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöde för %ss favoriter (RSS 2.0)"
#: actions/showfavorites.php:184
#, php-format
msgid "Feed for favorites of %s (Atom)"
-msgstr "Flöden för $s vänner"
+msgstr "Flöde för %ss favoriter (Atom)"
#: actions/showfavorites.php:205
msgid ""
@@ -2986,85 +2906,81 @@ msgstr ""
#: actions/showfavorites.php:242
msgid "This is a way to share what you like."
-msgstr ""
+msgstr "Detta är ett sätt att dela vad du gillar."
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
msgid "%s group"
-msgstr ""
+msgstr "%s grupp"
#: actions/showgroup.php:84
#, php-format
msgid "%s group, page %d"
-msgstr ""
+msgstr "%s grupp, sida %d"
#: actions/showgroup.php:218
-#, fuzzy
msgid "Group profile"
-msgstr "Inget sådant inlägg."
+msgstr "Grupprofil"
#: actions/showgroup.php:263 actions/tagother.php:118
#: actions/userauthorization.php:167 lib/userprofile.php:177
msgid "URL"
-msgstr ""
+msgstr "URL"
#: actions/showgroup.php:274 actions/tagother.php:128
#: actions/userauthorization.php:179 lib/userprofile.php:194
-#, fuzzy
msgid "Note"
-msgstr "Inlägg"
+msgstr "Notis"
#: actions/showgroup.php:284 lib/groupeditform.php:184
msgid "Aliases"
-msgstr ""
+msgstr "Alias"
#: actions/showgroup.php:293
msgid "Group actions"
-msgstr ""
+msgstr "Gruppåtgärder"
#: actions/showgroup.php:328
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s grupp (RSS 1.0)"
#: actions/showgroup.php:334
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s grupp (RSS 2.0)"
#: actions/showgroup.php:340
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s group (Atom)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s grupp (Atom)"
#: actions/showgroup.php:345
#, php-format
msgid "FOAF for %s group"
-msgstr "Outbox för %s"
+msgstr "FOAF för %s grupp"
#: actions/showgroup.php:381 actions/showgroup.php:438 lib/groupnav.php:91
-#, fuzzy
msgid "Members"
-msgstr "Medlem sedan"
+msgstr "Medlemmar"
#: actions/showgroup.php:386 lib/profileaction.php:117
#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
#: lib/tagcloudsection.php:71
msgid "(None)"
-msgstr ""
+msgstr "(Ingen)"
#: actions/showgroup.php:392
msgid "All members"
-msgstr ""
+msgstr "Alla medlemmar"
#: actions/showgroup.php:429 lib/profileaction.php:174
msgid "Statistics"
msgstr "Statistik"
#: actions/showgroup.php:432
-#, fuzzy
msgid "Created"
-msgstr "Skapa"
+msgstr "Skapad"
#: actions/showgroup.php:448
#, php-format
@@ -3075,6 +2991,11 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://en."
+"wikipedia.org/wiki/Micro-blogging)-tjänst baserad den fria programvaran "
+"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
+"sina liv och intressen. [Gå med nu](%%%%action.register%%%%) för att bli en "
+"del av denna grupp och många fler! ([Läs mer](%%%%doc.help%%%%))"
#: actions/showgroup.php:454
#, php-format
@@ -3084,10 +3005,14 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
+"**%s** är en användargrupp på %%%%site.name%%%%, en [mikroblogg](http://en."
+"wikipedia.org/wiki/Micro-blogging)-tjänst baserad den fria programvaran "
+"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
+"sina liv och intressen. "
#: actions/showgroup.php:482
msgid "Admins"
-msgstr ""
+msgstr "Administratörer"
#: actions/showmessage.php:81
msgid "No such message."
@@ -3095,7 +3020,7 @@ msgstr "Inget sådant meddelande."
#: actions/showmessage.php:98
msgid "Only the sender and recipient may read this message."
-msgstr "Endast den som skickat och mottagaren kan läsa detta meddelande."
+msgstr "Endast avsändaren och mottagaren kan läsa detta meddelande."
#: actions/showmessage.php:108
#, php-format
@@ -3108,55 +3033,56 @@ msgid "Message from %1$s on %2$s"
msgstr "Meddelande från %1$s på %2$s"
#: actions/shownotice.php:90
-#, fuzzy
msgid "Notice deleted."
-msgstr "Inlägg"
+msgstr "Notis borttagen."
#: actions/showstream.php:73
-#, fuzzy, php-format
+#, php-format
msgid " tagged %s"
-msgstr "Inlägg taggade med %s"
+msgstr "taggade %s"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%s, page %d"
-msgstr "Inbox för %s - sida %d"
+msgstr "%s, sida %d"
#: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s tagged %s (RSS 1.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s taggade %s (RSS 1.0)"
#: actions/showstream.php:129
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 1.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s (RSS 1.0)"
#: actions/showstream.php:136
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (RSS 2.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s (RSS 2.0)"
#: actions/showstream.php:143
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %s (Atom)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för %s (Atom)"
#: actions/showstream.php:148
-#, fuzzy, php-format
+#, php-format
msgid "FOAF for %s"
-msgstr "Outbox för %s"
+msgstr "FOAF för %s"
#: actions/showstream.php:191
#, php-format
msgid "This is the timeline for %s but %s hasn't posted anything yet."
-msgstr ""
+msgstr "Detta är tidslinjen för %s men %s har inte postat något än."
#: actions/showstream.php:196
msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
msgstr ""
+"Sett något intressant nyligen? Du har inte postat några notiser än. Varför "
+"inte börja nu?"
#: actions/showstream.php:198
#, php-format
@@ -3164,6 +3090,8 @@ msgid ""
"You can try to nudge %s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%s)."
msgstr ""
+"Du kan prova att knuffa %s eller [posta något för hans eller hennes "
+"uppmärksamhet](%%%%action.newnotice%%%%?status_textarea=%s)."
#: actions/showstream.php:234
#, php-format
@@ -3173,6 +3101,10 @@ msgid ""
"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
+"wikipedia.org/wiki/Micro-blogging)-tjänst baserad på den fria programvaran "
+"[StatusNet](http://status.net/). [Gå med nu](%%%%action.register%%%%) för "
+"att följa **%s**s notiser och många fler! ([Läs mer](%%%%doc.help%%%%))"
#: actions/showstream.php:239
#, php-format
@@ -3181,171 +3113,164 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
+"**%s** har ett konto på %%%%site.name%%%%, en [mikroblogg](http://en."
+"wikipedia.org/wiki/Micro-blogging)-tjänst baserad på den fria programvaran "
+"[StatusNet](http://status.net/). "
#: actions/silence.php:65 actions/unsilence.php:65
-#, fuzzy
msgid "You cannot silence users on this site."
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Du kan inte tysta ned användare på denna webbplats."
#: actions/silence.php:72
-#, fuzzy
msgid "User is already silenced."
-msgstr "Användaren har ingen profil."
+msgstr "Användaren är redan nedtystad."
#: actions/siteadminpanel.php:69
msgid "Basic settings for this StatusNet site."
-msgstr ""
+msgstr "Grundinställningar för din StatusNet-webbplats"
#: actions/siteadminpanel.php:147
msgid "Site name must have non-zero length."
-msgstr ""
+msgstr "Webbplatsnamnet måste vara minst ett tecken långt."
#: actions/siteadminpanel.php:155
-#, fuzzy
msgid "You must have a valid contact email address"
-msgstr "Ingen giltig emailadress"
+msgstr "Du måste ha en giltig kontakte-postadress"
#: actions/siteadminpanel.php:173
#, php-format
msgid "Unknown language \"%s\""
-msgstr ""
+msgstr "Okänt språk \"%s\""
#: actions/siteadminpanel.php:180
msgid "Invalid snapshot report URL."
-msgstr ""
+msgstr "Ogiltig rapport-URL för ögonblicksbild"
#: actions/siteadminpanel.php:186
msgid "Invalid snapshot run value."
-msgstr ""
+msgstr "Ogiltigt körvärde för ögonblicksbild."
#: actions/siteadminpanel.php:192
msgid "Snapshot frequency must be a number."
-msgstr ""
+msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
#: actions/siteadminpanel.php:199
msgid "You must set an SSL server when enabling SSL."
-msgstr ""
+msgstr "Du måste ange en SSL-server när du aktiverar SSL."
#: actions/siteadminpanel.php:204
msgid "Invalid SSL server. The maximum length is 255 characters."
-msgstr ""
+msgstr "Ogiltigt SSL-servernamn. Den maximala längden är 255 tecken."
#: actions/siteadminpanel.php:210
msgid "Minimum text limit is 140 characters."
-msgstr ""
+msgstr "Minsta textbegränsning är 140 tecken."
#: actions/siteadminpanel.php:216
msgid "Dupe limit must 1 or more seconds."
-msgstr ""
+msgstr "Begränsning av duplikat måste vara en eller fler sekuner."
#: actions/siteadminpanel.php:266
msgid "General"
-msgstr ""
+msgstr "Allmänt"
#: actions/siteadminpanel.php:269
-#, fuzzy
msgid "Site name"
-msgstr "Nytt inlägg"
+msgstr "Webbplatsnamn"
#: actions/siteadminpanel.php:270
msgid "The name of your site, like \"Yourcompany Microblog\""
-msgstr ""
+msgstr "Namnet på din webbplats, t.ex. \"Företagsnamn mikroblogg\""
#: actions/siteadminpanel.php:274
msgid "Brought by"
-msgstr ""
+msgstr "Tillhandahållen av"
#: actions/siteadminpanel.php:275
msgid "Text used for credits link in footer of each page"
-msgstr ""
+msgstr "Text som används för tillskrivningslänkar i sidfoten på varje sida."
#: actions/siteadminpanel.php:279
msgid "Brought by URL"
-msgstr ""
+msgstr "Tillhandahållen av URL"
#: actions/siteadminpanel.php:280
msgid "URL used for credits link in footer of each page"
-msgstr ""
+msgstr "URL som används för tillskrivningslänkar i sidfoten på varje sida"
#: actions/siteadminpanel.php:284
-#, fuzzy
msgid "Contact email address for your site"
-msgstr "Ny emailadress för att skicka till %s"
+msgstr "Kontakte-postadress för din webbplats"
#: actions/siteadminpanel.php:290
-#, fuzzy
msgid "Local"
-msgstr "Plats"
+msgstr "Lokal"
#: actions/siteadminpanel.php:301
msgid "Default timezone"
-msgstr ""
+msgstr "Standardtidszon"
#: actions/siteadminpanel.php:302
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Standardtidzon för denna webbplats; vanligtvis UTC."
#: actions/siteadminpanel.php:308
-#, fuzzy
msgid "Default site language"
-msgstr "Språkval"
+msgstr "Webbplatsens standardspråk"
#: actions/siteadminpanel.php:316
msgid "URLs"
-msgstr ""
+msgstr "URL:er"
#: actions/siteadminpanel.php:319
-#, fuzzy
msgid "Server"
-msgstr "Återställ"
+msgstr "Server"
#: actions/siteadminpanel.php:319
msgid "Site's server hostname."
-msgstr ""
+msgstr "Värdnamn för webbplatsens server."
#: actions/siteadminpanel.php:323
msgid "Fancy URLs"
-msgstr ""
+msgstr "Utsmyckade URL:er"
#: actions/siteadminpanel.php:325
msgid "Use fancy (more readable and memorable) URLs?"
msgstr ""
+"Skall utsmyckade URL:er användas (mer läsbara och lättare att komma ihåg)?"
#: actions/siteadminpanel.php:331
-#, fuzzy
msgid "Access"
-msgstr "Acceptera"
+msgstr "Ã…tkomst"
#: actions/siteadminpanel.php:334
-#, fuzzy
msgid "Private"
-msgstr "Sekretesspolicy"
+msgstr "Privat"
#: actions/siteadminpanel.php:336
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+"Skall anonyma användare (inte inloggade) förhindras från att se webbplatsen?"
#: actions/siteadminpanel.php:340
-#, fuzzy
msgid "Invite only"
-msgstr "Bjud in"
+msgstr "Endast inbjudan"
#: actions/siteadminpanel.php:342
msgid "Make registration invitation only."
-msgstr ""
+msgstr "Gör så att registrering endast sker genom inbjudan."
#: actions/siteadminpanel.php:346
-#, fuzzy
msgid "Closed"
-msgstr "Ingen sådan användare"
+msgstr "Stängd"
#: actions/siteadminpanel.php:348
msgid "Disable new registrations."
-msgstr ""
+msgstr "Inaktivera nya registreringar."
#: actions/siteadminpanel.php:354
msgid "Snapshots"
-msgstr ""
+msgstr "Ögonblicksbild"
#: actions/siteadminpanel.php:357
msgid "Randomly during Web hit"
@@ -3353,113 +3278,109 @@ msgstr ""
#: actions/siteadminpanel.php:358
msgid "In a scheduled job"
-msgstr ""
+msgstr "I ett schemalagt jobb"
#: actions/siteadminpanel.php:359 actions/siteadminpanel.php:383
-#, fuzzy
msgid "Never"
-msgstr "Återställ"
+msgstr "Aldrig"
#: actions/siteadminpanel.php:360
msgid "Data snapshots"
-msgstr ""
+msgstr "Ögonblicksbild av data"
#: actions/siteadminpanel.php:361
msgid "When to send statistical data to status.net servers"
-msgstr ""
+msgstr "När statistikdata skall skickas till status.net-servrar"
#: actions/siteadminpanel.php:366
msgid "Frequency"
-msgstr ""
+msgstr "Frekvens"
#: actions/siteadminpanel.php:367
msgid "Snapshots will be sent once every N web hits"
-msgstr ""
+msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
#: actions/siteadminpanel.php:372
msgid "Report URL"
-msgstr ""
+msgstr "Rapport-URL"
#: actions/siteadminpanel.php:373
msgid "Snapshots will be sent to this URL"
-msgstr ""
+msgstr "Ögonblicksbild kommer skickat till denna URL"
#: actions/siteadminpanel.php:380
-#, fuzzy
msgid "SSL"
-msgstr "SMS"
+msgstr "SSL"
#: actions/siteadminpanel.php:384
-#, fuzzy
msgid "Sometimes"
-msgstr "Inlägg"
+msgstr "Ibland"
#: actions/siteadminpanel.php:385
msgid "Always"
-msgstr ""
+msgstr "Alltid"
#: actions/siteadminpanel.php:387
msgid "Use SSL"
-msgstr ""
+msgstr "Använd SSL"
#: actions/siteadminpanel.php:388
msgid "When to use SSL"
-msgstr ""
+msgstr "När SSL skall användas"
#: actions/siteadminpanel.php:393
msgid "SSL Server"
-msgstr ""
+msgstr "SSL-server"
#: actions/siteadminpanel.php:394
msgid "Server to direct SSL requests to"
-msgstr ""
+msgstr "Server att dirigera SSL-förfrågningar till"
#: actions/siteadminpanel.php:400
msgid "Limits"
-msgstr ""
+msgstr "Begränsningar"
#: actions/siteadminpanel.php:403
msgid "Text limit"
-msgstr ""
+msgstr "Textbegränsning"
#: actions/siteadminpanel.php:403
msgid "Maximum number of characters for notices."
-msgstr ""
+msgstr "Maximala antalet tecken för notiser."
#: actions/siteadminpanel.php:407
msgid "Dupe limit"
-msgstr ""
+msgstr "Duplikatbegränsning"
#: actions/siteadminpanel.php:407
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+"Hur länge användare måste vänta (i sekunder) för att posta samma sak igen."
#: actions/siteadminpanel.php:421 actions/useradminpanel.php:313
-#, fuzzy
msgid "Save site settings"
-msgstr "Twitter inställningar"
+msgstr "Spara webbplatsinställningar"
#: actions/smssettings.php:58
msgid "SMS Settings"
-msgstr "SMS Inställningar"
+msgstr "SMS-inställningar"
#: actions/smssettings.php:69
#, php-format
msgid "You can receive SMS messages through email from %%site.name%%."
-msgstr "Du kan ta emot SMS meddelande via email från %%site.name%%."
+msgstr "Du kan ta emot SMS-meddelande genom e-post från %%site.name%%."
#: actions/smssettings.php:91
-#, fuzzy
msgid "SMS is not available."
-msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat"
+msgstr "SMS är inte tillgängligt."
#: actions/smssettings.php:112
msgid "Current confirmed SMS-enabled phone number."
-msgstr "Nuvarande bekäftat SMS telefonnummer"
+msgstr "Nuvarande bekäftat telefonnummer för SMS."
#: actions/smssettings.php:123
msgid "Awaiting confirmation on this phone number."
-msgstr "Väntar bekräftelse på detta telefonnummer. "
+msgstr "Väntar bekräftelse för detta telefonnummer."
#: actions/smssettings.php:130
msgid "Confirmation code"
@@ -3471,7 +3392,7 @@ msgstr "Fyll i koden du mottog i din telefon."
#: actions/smssettings.php:138
msgid "SMS Phone number"
-msgstr "SMS Telefonnummer"
+msgstr "Telefonnummer för SMS"
#: actions/smssettings.php:140
msgid "Phone number, no punctuation or spaces, with area code"
@@ -3482,7 +3403,7 @@ msgid ""
"Send me notices through SMS; I understand I may incur exorbitant charges "
"from my carrier."
msgstr ""
-"Skicka inlägg till mig via SMS; Jag är införstådd att min operatör kan "
+"Skicka notiser till mig via SMS. Jag är införstådd med att min operatör kan "
"debitera mig."
#: actions/smssettings.php:306
@@ -3495,34 +3416,31 @@ msgstr "Ingen operatör vald."
#: actions/smssettings.php:318
msgid "That is already your phone number."
-msgstr "Det är redan ditt telefonnummer."
+msgstr "Detta är redan ditt telefonnummer."
#: actions/smssettings.php:321
msgid "That phone number already belongs to another user."
-msgstr "Det numret tillhör en annan användare."
+msgstr "Detta telefonnumr tillhör redan en annan användare."
#: actions/smssettings.php:347
-#, fuzzy
msgid ""
"A confirmation code was sent to the phone number you added. Check your phone "
"for the code and instructions on how to use it."
msgstr ""
-"En bekräftelsekod har skickats ut till telefonnumret du fyllde i. "
-"Kontrollera din inbox (och spamlådan!) efter kod och instruktioner hur du "
-"använder den."
+"En bekräftelsekod skickades till det telefonnummer du lagt till. Kontrollera "
+"din telefon för koden och instruktioner om hur du använder den."
#: actions/smssettings.php:374
msgid "That is the wrong confirmation number."
-msgstr "Det är fel nummer i bekräftelsen"
+msgstr "Detta är fel bekräftelsenummer."
#: actions/smssettings.php:405
msgid "That is not your phone number."
-msgstr "Det är inte ditt telefonnummer."
+msgstr "Detta är inte ditt telefonnummer."
#: actions/smssettings.php:465
-#, fuzzy
msgid "Mobile carrier"
-msgstr "Välj en operatör"
+msgstr "Mobiloperatör"
#: actions/smssettings.php:469
msgid "Select a carrier"
@@ -3534,63 +3452,61 @@ msgid ""
"Mobile carrier for your phone. If you know a carrier that accepts SMS over "
"email but isn't listed here, send email to let us know at %s."
msgstr ""
-"Mobiloperatör för din telefon. Vet du nån operatör som kan taemot SMS över "
-"email som inte finns med i listan, skicka ett email till oss och tala det "
-"hit %s"
+"Mobiloperatör för din telefon. Känner du till en operatör som kan ta emot "
+"SMS via e-post men som inte finns med i listan, skicka ett e-post till oss "
+"på %s och berätta."
#: actions/smssettings.php:498
msgid "No code entered"
-msgstr "Ingen kod är ifylld"
+msgstr "Ingen kod ifylld"
#: actions/subedit.php:70
-#, fuzzy
msgid "You are not subscribed to that profile."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Du är inte prenumerat hos den profilen."
#: actions/subedit.php:83
-#, fuzzy
msgid "Could not save subscription."
-msgstr "Kunde inte skapa prenumeration."
+msgstr "Kunde inte spara prenumeration."
#: actions/subscribe.php:55
-#, fuzzy
msgid "Not a local user."
-msgstr "Ingen sådan användare"
+msgstr "Inte en lokal användare."
#: actions/subscribe.php:69
-#, fuzzy
msgid "Subscribed"
-msgstr "Prenumerera"
+msgstr "Prenumerant"
#: actions/subscribers.php:50
-#, fuzzy, php-format
+#, php-format
msgid "%s subscribers"
-msgstr "Prenumerant"
+msgstr "%s prenumeranter"
#: actions/subscribers.php:52
#, php-format
msgid "%s subscribers, page %d"
-msgstr ""
+msgstr "%s prenumeranter, sida %d"
#: actions/subscribers.php:63
msgid "These are the people who listen to your notices."
-msgstr "Dessa personer är dom som lyssnar på dina inlägg."
+msgstr "Det är dessa personer som lyssnar på dina notiser."
#: actions/subscribers.php:67
#, php-format
msgid "These are the people who listen to %s's notices."
-msgstr "Dessa personer är dom som lyssnar på %s inlägg."
+msgstr "Det är dessa personer som lyssnar på %ss notiser."
#: actions/subscribers.php:108
msgid ""
"You have no subscribers. Try subscribing to people you know and they might "
"return the favor"
msgstr ""
+"Du har inga prenumeranter. Prova att prenumerera på personer du känner och "
+"de kommer kanske återgälda tjänsten"
#: actions/subscribers.php:110
#, php-format
msgid "%s has no subscribers. Want to be the first?"
-msgstr ""
+msgstr "%s har inte några prenumeranter. Vill du bli först?"
#: actions/subscribers.php:114
#, php-format
@@ -3598,25 +3514,27 @@ msgid ""
"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
"%) and be the first?"
msgstr ""
+"%s har inte några prenumeranter. Varför inte [registrera ett konto](%%%%"
+"action.register%%%%) och bli först?"
#: actions/subscriptions.php:52
-#, fuzzy, php-format
+#, php-format
msgid "%s subscriptions"
-msgstr "Alla prenumerationer"
+msgstr "%s prenumerationer"
#: actions/subscriptions.php:54
-#, fuzzy, php-format
+#, php-format
msgid "%s subscriptions, page %d"
-msgstr "Alla prenumerationer"
+msgstr "%s prenumerationer, sida %d"
#: actions/subscriptions.php:65
msgid "These are the people whose notices you listen to."
-msgstr "Detta är personer och inlägg som du lyssnar på."
+msgstr "Dessa är de personer vars notiser du lyssnar på."
#: actions/subscriptions.php:69
#, php-format
msgid "These are the people whose notices %s listens to."
-msgstr "Detta är personer och inlägg som %s lyssnar på."
+msgstr "Dessa är de personer vars notiser %s lyssnar på."
#: actions/subscriptions.php:121
#, php-format
@@ -3629,153 +3547,148 @@ msgid ""
msgstr ""
#: actions/subscriptions.php:123 actions/subscriptions.php:127
-#, fuzzy, php-format
+#, php-format
msgid "%s is not listening to anyone."
-msgstr "%1$s lyssnar nu på dina meddelanden i %2$s."
+msgstr "%s lyssnar inte på någon."
#: actions/subscriptions.php:194
-#, fuzzy
msgid "Jabber"
-msgstr "Inget Jabber ID."
+msgstr "Jabber"
#: actions/subscriptions.php:199 lib/connectsettingsaction.php:115
msgid "SMS"
msgstr "SMS"
#: actions/tagother.php:33
-#, fuzzy
msgid "Not logged in"
-msgstr "Inte inloggad."
+msgstr "Inte inloggad"
#: actions/tagother.php:39
-#, fuzzy
msgid "No id argument."
-msgstr "Inget sådant dokument."
+msgstr "Inget ID-argument."
#: actions/tagother.php:65
-#, fuzzy, php-format
+#, php-format
msgid "Tag %s"
-msgstr "Taggar"
+msgstr "Tagg %s"
#: actions/tagother.php:77 lib/userprofile.php:75
-#, fuzzy
msgid "User profile"
-msgstr "Användaren har ingen profil."
+msgstr "Användarprofil"
#: actions/tagother.php:81 lib/userprofile.php:102
msgid "Photo"
-msgstr ""
+msgstr "Foto"
#: actions/tagother.php:141
-#, fuzzy
msgid "Tag user"
-msgstr "Taggar"
+msgstr "Tagga användare"
#: actions/tagother.php:151
msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
msgstr ""
+"Taggar för denna användare (bokstäver, nummer, -, ., och _), separerade med "
+"kommatecken eller mellanslag"
#: actions/tagother.php:193
msgid ""
"You can only tag people you are subscribed to or who are subscribed to you."
msgstr ""
+"Du kan bara tagga personer du prenumererar på eller som prenumererar på dig."
#: actions/tagother.php:200
-#, fuzzy
msgid "Could not save tags."
-msgstr "Kunde inte spara informationen om användarbild"
+msgstr "Kunde inte spara taggar."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
msgstr ""
+"Använd detta formulär för att lägga till taggar till dina prenumeranter "
+"eller prenumerationer."
#: actions/tag.php:68
-#, fuzzy, php-format
+#, php-format
msgid "Notices tagged with %s, page %d"
-msgstr "Inlägg taggade med %s"
+msgstr "Notiser taggade med %s, sida %d"
#: actions/tag.php:86
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for tag %s (RSS 1.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för tagg %s (RSS 1.0)"
#: actions/tag.php:92
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for tag %s (RSS 2.0)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för tagg %s (RSS 2.0)"
#: actions/tag.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for tag %s (Atom)"
-msgstr "Inlägg flöde för %s"
+msgstr "Flöde av notiser för tagg %s (Atom)"
#: actions/tagrss.php:35
-#, fuzzy
msgid "No such tag."
-msgstr "Inget sådant meddelande."
+msgstr "Ingen sådan tagg."
#: actions/twitapitrends.php:87
msgid "API method under construction."
msgstr "API-metoden är under uppbyggnad."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Du prenumererar redan på dessa användare:"
+msgstr "Du har inte blockerat denna användared."
#: actions/unsandbox.php:72
#, fuzzy
msgid "User is not sandboxed."
-msgstr "Användaren har ingen profil."
+msgstr "Användare är inte flyttad till sandlåda."
#: actions/unsilence.php:72
-#, fuzzy
msgid "User is not silenced."
-msgstr "Användaren har ingen profil."
+msgstr "Användare är inte nedtystad."
#: actions/unsubscribe.php:77
-#, fuzzy
msgid "No profile id in request."
-msgstr "Ingen profil URL lämnades ut av servern."
+msgstr "Ingen profil-ID i begäran."
#: actions/unsubscribe.php:84
-#, fuzzy
msgid "No profile with that id."
-msgstr "Ingen status hittad med det ID"
+msgstr "Ingen profil med det ID:t."
#: actions/unsubscribe.php:98
-#, fuzzy
msgid "Unsubscribed"
-msgstr "Lämnar pren."
+msgstr "Prenumeration avslutad"
#: actions/updateprofile.php:62 actions/userauthorization.php:330
#, php-format
msgid "Listenee stream license ‘%s’ is not compatible with site license ‘%s’."
msgstr ""
+"Licensen för lyssnarströmmen '%s' är inte förenlig med webbplatslicensen '%"
+"s'."
#: actions/useradminpanel.php:58 lib/adminpanelaction.php:305
#: lib/personalgroupnav.php:115
msgid "User"
-msgstr ""
+msgstr "Användare"
#: actions/useradminpanel.php:69
msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Användarinställningar för denna StatusNet-webbplats"
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Ogiltig begränsning av biografi. Måste vara numerisk."
#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Ogiltig välkomsttext. Maximal längd är 255 tecken."
#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Ogiltig standardprenumeration: '%1$s' är inte användare."
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -3784,89 +3697,83 @@ msgstr "Profil"
#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Begränsning av biografi"
#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Maximal teckenlängd av profilbiografi."
#: actions/useradminpanel.php:231
-#, fuzzy
msgid "New users"
-msgstr "Bjud in nya användare"
+msgstr "Nya användare"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Välkomnande av ny användare"
#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Välkomsttext för nya användare (max 255 tecken)."
#: actions/useradminpanel.php:241
-#, fuzzy
msgid "Default subscription"
-msgstr "Alla prenumerationer"
+msgstr "Standardprenumerationer"
#: actions/useradminpanel.php:242
-#, fuzzy
msgid "Automatically subscribe new users to this user."
msgstr ""
-"Automatisk prenummeration på den som prenumererar på mig. (Bäst för icke "
-"mänsklig användare) "
+"Lägg automatiskt till en prenumeration på denna användare för alla nya "
+"användare."
#: actions/useradminpanel.php:251
-#, fuzzy
msgid "Invitations"
-msgstr "Inbjudan(ar) skickad"
+msgstr "Inbjudningar"
#: actions/useradminpanel.php:256
-#, fuzzy
msgid "Invitations enabled"
-msgstr "Inbjudan(ar) skickad"
+msgstr "Inbjudningar aktiverade"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "Hurvida användare skall tillåtas bjuda in nya användare."
#: actions/useradminpanel.php:265
msgid "Sessions"
-msgstr ""
+msgstr "Sessioner"
#: actions/useradminpanel.php:270
msgid "Handle sessions"
-msgstr ""
+msgstr "Hantera sessioner"
#: actions/useradminpanel.php:272
msgid "Whether to handle sessions ourselves."
-msgstr ""
+msgstr "Hurvida sessioner skall hanteras av oss själva."
#: actions/useradminpanel.php:276
msgid "Session debugging"
-msgstr ""
+msgstr "Sessionsfelsökning"
#: actions/useradminpanel.php:278
msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Sätt på felsökningsutdata för sessioner."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
-msgstr "Tillåt prenumeration."
+msgstr "Godkänn prenumeration"
#: actions/userauthorization.php:110
-#, fuzzy
msgid ""
"Please check these details to make sure that you want to subscribe to this "
"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
"click “Rejectâ€."
msgstr ""
-"Kontrollera dessa detajer noga så att du verkligen vet att du vill "
-"prenumerera på denna användares inlägg. Om du inte frågade efter att "
-"prenumerera på någons inlägg, klicka på \"Cancel\""
+"Vänligen kontrollera dessa uppgifter för att försäkra dig om att du vill "
+"prenumerera på den här användarens notiser. Om du inte bett att prenumerera "
+"på någons meddelanden, klicka på \"Avvisa\"."
#: actions/userauthorization.php:188
msgid "License"
-msgstr ""
+msgstr "Licens"
#: actions/userauthorization.php:209
msgid "Accept"
@@ -3874,101 +3781,98 @@ msgstr "Acceptera"
#: actions/userauthorization.php:210 lib/subscribeform.php:115
#: lib/subscribeform.php:139
-#, fuzzy
msgid "Subscribe to this user"
-msgstr "Prenumerera på mina Twitter vänner här."
+msgstr "Prenumerera på denna användare"
#: actions/userauthorization.php:211
msgid "Reject"
msgstr "Avvisa"
#: actions/userauthorization.php:212
-#, fuzzy
msgid "Reject this subscription"
-msgstr "Alla prenumerationer"
+msgstr "Avvisa denna prenumeration"
#: actions/userauthorization.php:225
msgid "No authorization request!"
-msgstr "Ingen rättighet förfrågan!"
+msgstr "Ingen auktoriseringsförfrågan!"
#: actions/userauthorization.php:247
msgid "Subscription authorized"
-msgstr "Prenumeration accepterad"
+msgstr "Prenumeration godkänd"
#: actions/userauthorization.php:249
-#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
"Prenumerationen har blivit bekräftad, men ingen URL har gått igenom. Kolla "
-"med sidans instruktioner hur du bekräftar en prenumeration. Din "
-"prenumerering token är:"
+"med webbplatsens instruktioner hur du bekräftar en prenumeration. Din "
+"prenumerations-token är:"
#: actions/userauthorization.php:259
msgid "Subscription rejected"
msgstr "Prenumeration avvisad"
#: actions/userauthorization.php:261
-#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
-"Prenumerationen har blivit avvisad, men inga URL har gått igenom. Kolla med "
-"sidans instruktioner hur du avvisar en prenumeration."
+"Prenumerationen har blivit avvisad, men ingen URL har gått igenom. Kolla med "
+"webbplatsens instruktioner för detaljer om hur du fullständingt avvisar "
+"prenumerationen."
#: actions/userauthorization.php:296
#, php-format
msgid "Listener URI ‘%s’ not found here"
-msgstr ""
+msgstr "Lyssnar-URI '%s' hittades inte här"
#: actions/userauthorization.php:301
#, php-format
msgid "Listenee URI ‘%s’ is too long."
-msgstr ""
+msgstr "Lyssnar-URI '%s' är för lång."
#: actions/userauthorization.php:307
#, php-format
msgid "Listenee URI ‘%s’ is a local user."
-msgstr ""
+msgstr "Lyssnar-URI '%s' är en lokal användare."
#: actions/userauthorization.php:322
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "Profil-URL ‘%s’ är för en lokal användare."
#: actions/userauthorization.php:338
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
+msgstr "Avatar-URL ‘%s’ är inte giltig."
#: actions/userauthorization.php:343
-#, fuzzy, php-format
+#, php-format
msgid "Can’t read avatar URL ‘%s’."
-msgstr "Kan inte läsa användarbild URL '%s'"
+msgstr "Kan inte läsa avatar-URL '%s'."
#: actions/userauthorization.php:348
-#, fuzzy, php-format
+#, php-format
msgid "Wrong image type for avatar URL ‘%s’."
-msgstr "Fel filtyp för bild '%s'"
+msgstr "Fel bildtyp för avatar-URL '%s'."
#: actions/userbyid.php:70
msgid "No id."
-msgstr "Inget id."
+msgstr "Ingen ID."
#: actions/userdesignsettings.php:76 lib/designsettings.php:65
-#, fuzzy
msgid "Profile design"
-msgstr "Profil inställningar"
+msgstr "Profilutseende"
#: actions/userdesignsettings.php:87 lib/designsettings.php:76
msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Anpassa hur din profil ser ut genom att välja bakgrundbild och färgpalett."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
@@ -3977,21 +3881,22 @@ msgstr ""
#: actions/usergroups.php:64
#, php-format
msgid "%s groups, page %d"
-msgstr ""
+msgstr "%s grupper, sida %d"
#: actions/usergroups.php:130
msgid "Search for more groups"
-msgstr ""
+msgstr "Sök efter fler grupper"
#: actions/usergroups.php:153
-#, fuzzy, php-format
+#, php-format
msgid "%s is not a member of any group."
-msgstr "Du skickade inte oss den profilen"
+msgstr "%s är inte en medlem i någon grupp."
#: actions/usergroups.php:158
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+"Prova att [söka efter grupper](%%action.groupsearch%%) och gå med i dem."
#: classes/File.php:137
#, php-format
@@ -3999,91 +3904,92 @@ msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
+"Inga filer får vara större än %d byte och filen du skickade var %d byte. "
+"Prova att ladda upp en mindre version."
#: classes/File.php:147
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "En så här stor fil skulle överskrida din användarkvot på %d byte."
#: classes/File.php:154
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
-msgstr ""
+msgstr "En sådan här stor fil skulle överskrida din månatliga kvot på %d byte."
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
-msgstr ""
+msgstr "Du är utestängd från att skicka direktmeddelanden."
#: classes/Message.php:61
msgid "Could not insert message."
-msgstr ""
+msgstr "Kunde inte infoga meddelande."
#: classes/Message.php:71
msgid "Could not update message with new URI."
-msgstr ""
+msgstr "Kunde inte uppdatera meddelande med ny URI."
#: classes/Notice.php:164
#, php-format
msgid "DB error inserting hashtag: %s"
-msgstr "DB error vid infog av hashtag: %s"
+msgstr "Databasfel vid infogning av hashtag: %s"
#: classes/Notice.php:179
-#, fuzzy
msgid "Problem saving notice. Too long."
-msgstr "Det var ett problem när inlägget sparades."
+msgstr "Problem vid sparande av notis. För långt."
#: classes/Notice.php:183
-#, fuzzy
msgid "Problem saving notice. Unknown user."
-msgstr "Det var ett problem när inlägget sparades."
+msgstr "Problem vid sparande av notis. Okänd användare."
#: classes/Notice.php:188
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
+"För många notiser för snabbt; ta en vilopaus och posta igen om ett par "
+"minuter."
#: classes/Notice.php:194
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
+"För många duplicerade meddelanden för snabbt; ta en vilopaus och posta igen "
+"om ett par minuter."
#: classes/Notice.php:200
msgid "You are banned from posting notices on this site."
-msgstr ""
+msgstr "Du är utestängd från att posta notiser på denna webbplats."
#: classes/Notice.php:265 classes/Notice.php:290
msgid "Problem saving notice."
-msgstr "Det var ett problem när inlägget sparades."
+msgstr "Problem med att spara notis."
#: classes/Notice.php:1124
#, php-format
msgid "DB error inserting reply: %s"
-msgstr "Databasfel för svar: %s"
+msgstr "Databasfel vid infogning av svar: %s"
#: classes/User_group.php:380
-#, fuzzy
msgid "Could not create group."
-msgstr "Kunde inte skapa favorit."
+msgstr "Kunde inte skapa grupp."
#: classes/User_group.php:409
-#, fuzzy
msgid "Could not set group membership."
-msgstr "Kunde inte skapa prenumeration."
+msgstr "Kunde inte ställa in gruppmedlemskap."
#: classes/User.php:347
-#, fuzzy, php-format
+#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr "Meddelande till %1$s på %2$s"
+msgstr "Välkommen till %1$s, @%2$s!"
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
msgstr "Ändra dina profilinställningar"
#: lib/accountsettingsaction.php:112
-#, fuzzy
msgid "Upload an avatar"
-msgstr "Uppdatering av profilbild misslyckades."
+msgstr "Ladda upp en avatar"
#: lib/accountsettingsaction.php:116
msgid "Change your password"
@@ -4091,33 +3997,32 @@ msgstr "Ändra ditt lösenord"
#: lib/accountsettingsaction.php:120
msgid "Change email handling"
-msgstr "Ändra email hantering"
+msgstr "Ändra e-posthantering"
#: lib/accountsettingsaction.php:124
-#, fuzzy
msgid "Design your profile"
-msgstr "Användaren har ingen profil."
+msgstr "Designa din profil"
#: lib/accountsettingsaction.php:128
msgid "Other"
-msgstr ""
+msgstr "Övrigt"
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr ""
+msgstr "Övriga alternativ"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%s - %s"
-msgstr "%s(%s)"
+msgstr "%s - %s"
#: lib/action.php:159
msgid "Untitled page"
-msgstr ""
+msgstr "Namnlös sida"
#: lib/action.php:425
msgid "Primary site navigation"
-msgstr ""
+msgstr "Primär webbplatsnavigation"
#: lib/action.php:431
msgid "Home"
@@ -4125,42 +4030,36 @@ msgstr "Hem"
#: lib/action.php:431
msgid "Personal profile and friends timeline"
-msgstr ""
+msgstr "Personlig profil och vänners tidslinje"
#: lib/action.php:433
-#, fuzzy
msgid "Account"
-msgstr "Om"
+msgstr "Konto"
#: lib/action.php:433
-#, fuzzy
msgid "Change your email, avatar, password, profile"
-msgstr "Ändra ditt lösenord"
+msgstr "Ändra din e-post, avatar, lösenord, profil"
#: lib/action.php:436
msgid "Connect"
msgstr "Anslut"
#: lib/action.php:436
-#, fuzzy
msgid "Connect to services"
-msgstr "Kunde inte skicka vidare till servern: %s"
+msgstr "Anslut till tjänster"
#: lib/action.php:440
-#, fuzzy
msgid "Change site configuration"
-msgstr "Prenumerationer"
+msgstr "Ändra webbplatskonfiguration"
#: lib/action.php:444 lib/subgroupnav.php:105
msgid "Invite"
msgstr "Bjud in"
#: lib/action.php:445 lib/subgroupnav.php:106
-#, fuzzy, php-format
+#, php-format
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Använd detta formulär för att bjuda in dina vänner och kollegor till denna "
-"sida."
+msgstr "Bjud in vänner och kollegor att gå med dig på %s"
#: lib/action.php:450
msgid "Logout"
@@ -4168,25 +4067,23 @@ msgstr "Logga ut"
#: lib/action.php:450
msgid "Logout from the site"
-msgstr ""
+msgstr "Logga ut från webbplatsen"
#: lib/action.php:455
-#, fuzzy
msgid "Create an account"
-msgstr "Skapa ett nytt konto"
+msgstr "Skapa ett konto"
#: lib/action.php:458
msgid "Login to the site"
-msgstr ""
+msgstr "Logga in på webbplatsen"
#: lib/action.php:461 lib/action.php:724
msgid "Help"
msgstr "Hjälp"
#: lib/action.php:461
-#, fuzzy
msgid "Help me!"
-msgstr "Hjälp"
+msgstr "Hjälp mig!"
#: lib/action.php:464 lib/searchaction.php:127
msgid "Search"
@@ -4194,26 +4091,23 @@ msgstr "Sök"
#: lib/action.php:464
msgid "Search for people or text"
-msgstr ""
+msgstr "Sök efter personer eller text"
#: lib/action.php:485
-#, fuzzy
msgid "Site notice"
-msgstr "Nytt inlägg"
+msgstr "Webbplatsnotis"
#: lib/action.php:551
msgid "Local views"
-msgstr ""
+msgstr "Lokala vyer"
#: lib/action.php:617
-#, fuzzy
msgid "Page notice"
-msgstr "Nytt inlägg"
+msgstr "Sidnotis"
#: lib/action.php:719
-#, fuzzy
msgid "Secondary site navigation"
-msgstr "Prenumerationer"
+msgstr "Sekundär webbplatsnavigation"
#: lib/action.php:726
msgid "About"
@@ -4225,11 +4119,11 @@ msgstr "Frågor & svar"
#: lib/action.php:732
msgid "TOS"
-msgstr ""
+msgstr "Användarvillkor"
#: lib/action.php:735
msgid "Privacy"
-msgstr "Sekretesspolicy"
+msgstr "Sekretess"
#: lib/action.php:737
msgid "Source"
@@ -4237,15 +4131,15 @@ msgstr "Källa"
#: lib/action.php:739
msgid "Contact"
-msgstr "Kontakta"
+msgstr "Kontakt"
#: lib/action.php:741
msgid "Badge"
-msgstr ""
+msgstr "Emblem"
#: lib/action.php:769
msgid "StatusNet software license"
-msgstr ""
+msgstr "Programvarulicens för StatusNet"
#: lib/action.php:772
#, php-format
@@ -4253,13 +4147,13 @@ msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-"**%%site.name%%** är en mikroblogg service för dig ifrån [%%site.broughtby%%]"
-"(%%site.broughtbyurl%%)"
+"**%%site.name%%** är en mikrobloggtjänst tillhandahållen av [%%site.broughtby"
+"%%](%%site.broughtbyurl%%)"
#: lib/action.php:774
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
-msgstr "**%%site.name%%** är en mikroblogg service."
+msgstr "**%%site.name%%** är en mikrobloggtjänst."
#: lib/action.php:776
#, php-format
@@ -4268,125 +4162,115 @@ msgid ""
"s, available under the [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-"Det drivs med [StatusNet](http://status.net/) mikroblogging software, "
-"version %s, tillgängligt under [GNU Affero General Public License](http://"
-"www.fsf.org/licensing/licenses/agpl-3.0.html)."
+"Den drivs med mikroblogg-programvaran [StatusNet](http://status.net/), "
+"version %s, tillgänglig under [GNU Affero General Public License](http://www."
+"fsf.org/licensing/licenses/agpl-3.0.html)."
#: lib/action.php:790
-#, fuzzy
msgid "Site content license"
-msgstr "Sök innehåll i inlägg"
+msgstr "Licens för webbplatsinnehåll"
#: lib/action.php:799
msgid "All "
-msgstr ""
+msgstr "Alla "
#: lib/action.php:804
msgid "license."
-msgstr ""
+msgstr "licens."
#: lib/action.php:1068
msgid "Pagination"
-msgstr ""
+msgstr "Numrering av sidor"
#: lib/action.php:1077
-#, fuzzy
msgid "After"
-msgstr "« Nyare"
+msgstr "Senare"
#: lib/action.php:1085
-#, fuzzy
msgid "Before"
-msgstr "Tidigare »"
+msgstr "Tidigare"
#: lib/action.php:1133
-#, fuzzy
msgid "There was a problem with your session token."
-msgstr "Det var något problem med din session. Försök igen, tack."
+msgstr "Det var ett problem med din sessions-token."
#: lib/adminpanelaction.php:96
-#, fuzzy
msgid "You cannot make changes to this site."
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Du kan inte göra förändringar av denna webbplats."
#: lib/adminpanelaction.php:195
msgid "showForm() not implemented."
-msgstr ""
+msgstr "showForm() är inte implementerat."
#: lib/adminpanelaction.php:224
msgid "saveSettings() not implemented."
-msgstr ""
+msgstr "saveSetting() är inte implementerat."
#: lib/adminpanelaction.php:247
-#, fuzzy
msgid "Unable to delete design setting."
-msgstr "Kunde inte spara dina Twitter inställningar!"
+msgstr "Kunde inte ta bort utseendeinställning."
#: lib/adminpanelaction.php:300
-#, fuzzy
msgid "Basic site configuration"
-msgstr "Bekräfta epostadress"
+msgstr "Grundläggande webbplatskonfiguration"
#: lib/adminpanelaction.php:303
-#, fuzzy
msgid "Design configuration"
-msgstr "SMS Bekräftelse"
+msgstr "Konfiguration av utseende"
#: lib/adminpanelaction.php:306 lib/adminpanelaction.php:309
-#, fuzzy
msgid "Paths configuration"
-msgstr "SMS Bekräftelse"
+msgstr "Konfiguration av sökvägar"
#: lib/attachmentlist.php:87
msgid "Attachments"
-msgstr ""
+msgstr "Bilagor"
#: lib/attachmentlist.php:265
msgid "Author"
-msgstr ""
+msgstr "Författare"
#: lib/attachmentlist.php:278
-#, fuzzy
msgid "Provider"
-msgstr "Profil"
+msgstr "Tillhandahållare"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Notiser där denna bilaga förekommer"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr ""
+msgstr "Taggar för denna billaga"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
-msgstr ""
+msgstr "Resultat av kommando"
#: lib/channel.php:210
msgid "Command complete"
-msgstr ""
+msgstr "Kommando komplett"
#: lib/channel.php:221
msgid "Command failed"
-msgstr ""
+msgstr "Kommando misslyckades"
#: lib/command.php:44
msgid "Sorry, this command is not yet implemented."
-msgstr ""
+msgstr "Ledsen, detta kommando är inte implementerat än."
#: lib/command.php:88
-#, fuzzy, php-format
+#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "Kunde inte uppdatera användaren med bekräftad emailadress."
+msgstr "Kunde inte hitta en användare med smeknamnet %s"
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
+msgstr "Det verkar inte vara särskilt meningsfullt att knuffa dig själv!"
#: lib/command.php:99
#, php-format
msgid "Nudge sent to %s"
-msgstr ""
+msgstr "Knuff skickad till %s"
#: lib/command.php:126
#, php-format
@@ -4395,28 +4279,31 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Prenumerationer: %1$s\n"
+"Prenumeranter: %2$s\n"
+"Notiser: %3$s"
#: lib/command.php:152 lib/command.php:400
msgid "Notice with that id does not exist"
-msgstr ""
+msgstr "Notis med den ID:n finns inte"
#: lib/command.php:168 lib/command.php:416 lib/command.php:471
msgid "User has no last notice"
-msgstr ""
+msgstr "Användare har ingen sista notis"
#: lib/command.php:190
msgid "Notice marked as fave."
-msgstr ""
+msgstr "Notis markerad som favorit."
#: lib/command.php:315
#, php-format
msgid "%1$s (%2$s)"
-msgstr "%1$s (%2$s)"
+msgstr ""
#: lib/command.php:318
#, php-format
msgid "Fullname: %s"
-msgstr "Fullt namn: %s"
+msgstr "Fullständigt namn: %s"
#: lib/command.php:321
#, php-format
@@ -4436,99 +4323,109 @@ msgstr "Om: %s"
#: lib/command.php:358 scripts/xmppdaemon.php:321
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Meddelande för långt - maximum är %d tecken, du skickade %d"
#: lib/command.php:377
msgid "Error sending direct message."
-msgstr ""
+msgstr "Fel vid sändning av direktmeddelande."
#: lib/command.php:431
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Notis för långt - maximum är %d tecken, du skickade %d"
#: lib/command.php:439
-#, fuzzy, php-format
+#, php-format
msgid "Reply to %s sent"
-msgstr "Svara på detta inlägg"
+msgstr "Svar på %s skickat"
#: lib/command.php:441
-#, fuzzy
msgid "Error saving notice."
-msgstr "Det var ett problem när inlägget sparades."
+msgstr "Fel vid sparande av notis."
#: lib/command.php:495
msgid "Specify the name of the user to subscribe to"
-msgstr ""
+msgstr "Ange namnet på användaren att prenumerara på"
#: lib/command.php:502
#, php-format
msgid "Subscribed to %s"
-msgstr ""
+msgstr "Prenumerar på %s"
#: lib/command.php:523
msgid "Specify the name of the user to unsubscribe from"
-msgstr ""
+msgstr "Ange namnet på användaren att avsluta prenumeration på"
#: lib/command.php:530
#, php-format
msgid "Unsubscribed from %s"
-msgstr ""
+msgstr "Prenumeration hos %s avslutad"
#: lib/command.php:548 lib/command.php:571
msgid "Command not yet implemented."
-msgstr ""
+msgstr "Kommando inte implementerat än."
#: lib/command.php:551
msgid "Notification off."
-msgstr ""
+msgstr "Notifikation av."
#: lib/command.php:553
msgid "Can't turn off notification."
-msgstr ""
+msgstr "Kan inte sätta på notifikation."
#: lib/command.php:574
msgid "Notification on."
-msgstr ""
+msgstr "Notifikation på."
#: lib/command.php:576
msgid "Can't turn on notification."
+msgstr "Kan inte stänga av notifikation."
+
+#: lib/command.php:588
+msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:592
-#, fuzzy
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Kunde inte skapa alias."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Du prenumererar inte på någon."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
-msgstr[0] "Du prenumererar redan på dessa användare:"
-msgstr[1] "Du prenumererar redan på dessa användare:"
+msgstr[0] "Du prenumererar på denna person:"
+msgstr[1] "Du prenumererar på dessa personer:"
-#: lib/command.php:614
-#, fuzzy
+#: lib/command.php:645
msgid "No one is subscribed to you."
-msgstr "Kunde inte prenumerera på annat åt dig."
+msgstr "Ingen prenumerar på dig."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
-msgstr[0] "Kunde inte prenumerera på annat åt dig."
-msgstr[1] "Kunde inte prenumerera på annat åt dig."
+msgstr[0] "Denna person prenumererar på dig:"
+msgstr[1] "Dessa personer prenumererar på dig:"
-#: lib/command.php:636
-#, fuzzy
+#: lib/command.php:667
msgid "You are not a member of any groups."
-msgstr "Du skickade inte oss den profilen"
+msgstr "Du är inte medlem i några grupper."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
-msgstr[0] "Du skickade inte oss den profilen"
-msgstr[1] "Du skickade inte oss den profilen"
+msgstr[0] "Du är en medlem i denna grupp:"
+msgstr[1] "Du är en medlem i dessa grupper:"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4547,6 +4444,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4567,21 +4465,20 @@ msgid ""
msgstr ""
#: lib/common.php:199
-#, fuzzy
msgid "No configuration file found. "
-msgstr "Ingen bekräftelsekod."
+msgstr "Ingen konfigurationsfil hittades. "
#: lib/common.php:200
msgid "I looked for configuration files in the following places: "
-msgstr ""
+msgstr "Jag letade efter konfigurationsfiler på följande platser: "
#: lib/common.php:201
msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "Du kanske vill köra installeraren för att åtgärda detta."
#: lib/common.php:202
msgid "Go to the installer."
-msgstr ""
+msgstr "GÃ¥ till installeraren."
#: lib/connectsettingsaction.php:110
msgid "IM"
@@ -4589,7 +4486,7 @@ msgstr "IM"
#: lib/connectsettingsaction.php:111
msgid "Updates by instant messenger (IM)"
-msgstr "Uppdateringar via instant messenger (IM)"
+msgstr "Uppdateringar via snabbmeddelande (IM)"
#: lib/connectsettingsaction.php:116
msgid "Updates by SMS"
@@ -4597,174 +4494,159 @@ msgstr "Uppdateringar via SMS"
#: lib/dberroraction.php:60
msgid "Database error"
-msgstr ""
+msgstr "Databasfel"
#: lib/designsettings.php:105
-#, fuzzy
msgid "Upload file"
-msgstr "Ladda upp"
+msgstr "Ladda upp fil"
#: lib/designsettings.php:109
-#, fuzzy
msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
-msgstr "Du kan uppdatera din personliga profil här"
-
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
msgstr ""
+"Du kan ladda upp din personliga bakgrundbild. Den maximala filstorleken är "
+"2MB."
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "Standardvärden för utseende återställda."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
msgid "Disfavor this notice"
-msgstr "%s favoriter"
+msgstr "Avmarkera denna notis som favorit"
#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
msgid "Favor this notice"
-msgstr "%s favoriter"
+msgstr "Markera denna notis som favorit"
#: lib/favorform.php:140
msgid "Favor"
-msgstr "Favorisera"
+msgstr "Markera som favorit"
#: lib/feedlist.php:64
msgid "Export data"
-msgstr ""
+msgstr "Exportdata"
#: lib/feed.php:85
msgid "RSS 1.0"
-msgstr ""
+msgstr "RSS 1.0"
#: lib/feed.php:87
msgid "RSS 2.0"
-msgstr ""
+msgstr "RSS 2.0"
#: lib/feed.php:89
msgid "Atom"
-msgstr ""
+msgstr "Atom"
#: lib/feed.php:91
msgid "FOAF"
-msgstr ""
+msgstr "FOAF"
#: lib/galleryaction.php:121
-#, fuzzy
msgid "Filter tags"
-msgstr "Feed för taggar %s"
+msgstr "Filtrera taggar"
#: lib/galleryaction.php:131
msgid "All"
-msgstr ""
+msgstr "Alla"
#: lib/galleryaction.php:139
-#, fuzzy
msgid "Select tag to filter"
-msgstr "Välj en operatör"
+msgstr "Välj tagg att filtrera"
#: lib/galleryaction.php:140
-#, fuzzy
msgid "Tag"
-msgstr "Taggar"
+msgstr "Tagg"
#: lib/galleryaction.php:141
msgid "Choose a tag to narrow list"
-msgstr ""
+msgstr "Välj en tagg för att begränsa lista"
#: lib/galleryaction.php:143
msgid "Go"
-msgstr ""
+msgstr "GÃ¥"
#: lib/groupeditform.php:163
-#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL till din hemsida, blog eller profil på en annan sida."
+msgstr "URL till gruppen eller ämnets hemsida eller blogg"
#: lib/groupeditform.php:168
-#, fuzzy
msgid "Describe the group or topic"
-msgstr "Berätta om dig själv och dina intressen inom 140 tecken"
+msgstr "Beskriv gruppen eller ämnet"
#: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr "Berätta om dig själv och dina intressen inom 140 tecken"
+msgstr "Beskriv gruppen eller ämnet med högst %d tecken"
#: lib/groupeditform.php:172
-#, fuzzy
msgid "Description"
-msgstr "Prenumerationer"
+msgstr "Beskrivning"
#: lib/groupeditform.php:179
-#, fuzzy
msgid ""
"Location for the group, if any, like \"City, State (or Region), Country\""
-msgstr "Var du håller till, såsom \"Stad, Län, Land\""
+msgstr "Plats för gruppen, om den finns, såsom \"Stad, Län, Land\""
#: lib/groupeditform.php:187
#, php-format
msgid "Extra nicknames for the group, comma- or space- separated, max %d"
-msgstr ""
+msgstr "Extra smeknamn för gruppen, komma- eller mellanslagsseparerade, max &d"
#: lib/groupnav.php:85
msgid "Group"
-msgstr ""
+msgstr "Grupp"
#: lib/groupnav.php:101
-#, fuzzy
msgid "Blocked"
-msgstr "Ingen sådan användare"
+msgstr "Blockerad"
#: lib/groupnav.php:102
-#, fuzzy, php-format
+#, php-format
msgid "%s blocked users"
-msgstr "Ingen sådan användare"
+msgstr "%s blockerade användare"
#: lib/groupnav.php:108
#, php-format
msgid "Edit %s group properties"
-msgstr ""
+msgstr "Redigera %s gruppegenskaper"
#: lib/groupnav.php:113
-#, fuzzy
msgid "Logo"
-msgstr "Logga ut"
+msgstr "Logotyp"
#: lib/groupnav.php:114
#, php-format
msgid "Add or edit %s logo"
-msgstr ""
+msgstr "Lägg till eller redigera %s logotyp"
#: lib/groupnav.php:120
#, php-format
msgid "Add or edit %s design"
-msgstr ""
+msgstr "Lägg till eller redigera %s utseende"
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
-msgstr ""
+msgstr "Grupper med flest medlemmar"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
-msgstr ""
+msgstr "Grupper med flest inlägg"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr ""
+msgstr "Taggar i %s grupps notiser"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
msgstr "Denna sida är inte tillgänglig i den mediatyp du accepterat"
#: lib/imagefile.php:75
-#, fuzzy, php-format
+#, php-format
msgid "That file is too big. The maximum file size is %s."
-msgstr "Du kan uppdatera din personliga profil här"
+msgstr "Denna fil är för stor. Den maximala filstorleken är %s."
#: lib/imagefile.php:80
msgid "Partial upload."
@@ -4772,33 +4654,31 @@ msgstr "Bitvis uppladdad."
#: lib/imagefile.php:88 lib/mediafile.php:170
msgid "System error uploading file."
-msgstr "Systemfel när filen laddades upp."
+msgstr "Systemfel vid uppladdning av fil."
#: lib/imagefile.php:96
msgid "Not an image or corrupt file."
-msgstr "Det verkar inte vara en bildfil, annars korrupt."
+msgstr "Inte en bildfil eller så är filen korrupt."
#: lib/imagefile.php:105
msgid "Unsupported image file format."
msgstr "Bildfilens format stödjs inte."
#: lib/imagefile.php:118
-#, fuzzy
msgid "Lost our file."
-msgstr "Inget sådant inlägg."
+msgstr "Förlorade vår fil."
#: lib/imagefile.php:150 lib/imagefile.php:197
-#, fuzzy
msgid "Unknown file type"
-msgstr "okänd fil typ"
+msgstr "Okänd filtyp"
#: lib/imagefile.php:217
msgid "MB"
-msgstr ""
+msgstr "MB"
#: lib/imagefile.php:219
msgid "kB"
-msgstr ""
+msgstr "kB"
#: lib/jabber.php:191
#, php-format
@@ -4806,43 +4686,41 @@ msgid "[%s]"
msgstr ""
#: lib/joinform.php:114
-#, fuzzy
msgid "Join"
-msgstr "Logga in"
+msgstr "GÃ¥ med"
#: lib/leaveform.php:114
-#, fuzzy
msgid "Leave"
-msgstr "Spara"
+msgstr "Lämna"
#: lib/logingroupnav.php:80
-#, fuzzy
msgid "Login with a username and password"
-msgstr "Logga in med ditt användarnamn och lösenord."
+msgstr "Logga in med ett användarnamn och lösenord"
#: lib/logingroupnav.php:86
-#, fuzzy
msgid "Sign up for a new account"
-msgstr "Skapa ett nytt konto"
+msgstr "Registrera dig för ett nytt konto"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
-msgstr ""
+msgstr "Bara användaren kan läsa sina egna brevlådor."
#: lib/mailbox.php:139
msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
+"Du har inga privata meddelanden. Du kan skicka privata meddelanden för att "
+"engagera andra användare i konversationen. Folk kan skicka meddelanden till "
+"dig som bara du ser."
#: lib/mailbox.php:227 lib/noticelist.php:452
-#, fuzzy
msgid "from"
msgstr "från"
#: lib/mail.php:172
msgid "Email address confirmation"
-msgstr "Bekräfta epostadress"
+msgstr "E-postadressbekräftelse"
#: lib/mail.php:174
#, php-format
@@ -4864,10 +4742,10 @@ msgstr ""
#: lib/mail.php:236
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
-msgstr "%1$s lyssnar nu på dina meddelanden i %2$s."
+msgstr "%1$s lyssnar nu på dina notiser på %2$s."
#: lib/mail.php:241
-#, fuzzy, php-format
+#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
"\n"
@@ -4880,18 +4758,14 @@ msgid ""
"----\n"
"Change your email address or notification options at %8$s\n"
msgstr ""
-"%1$s lyssnar nu på dina meddelanden i %1$s.\n"
-"\n"
-"\tHälsningar,\n"
-"%4$s.\n"
#: lib/mail.php:254
-#, fuzzy, php-format
+#, php-format
msgid "Location: %s\n"
msgstr "Plats: %s\n"
#: lib/mail.php:256
-#, fuzzy, php-format
+#, php-format
msgid "Homepage: %s\n"
msgstr "Hemsida: %s\n"
@@ -4901,11 +4775,13 @@ msgid ""
"Bio: %s\n"
"\n"
msgstr ""
+"Biografi: %s\n"
+"\n"
#: lib/mail.php:286
#, php-format
msgid "New email address for posting to %s"
-msgstr "Ny emailadress för att skicka till %s"
+msgstr "Ny e-postadress för att skicka till %s"
#: lib/mail.php:289
#, php-format
@@ -4919,13 +4795,13 @@ msgid ""
"Faithfully yours,\n"
"%4$s"
msgstr ""
-"Du har en ny adress %1$s.\n"
+"Du har en ny adress på %1$s.\n"
"\n"
-"Skicka email till %2$s för att göra ett nytt inlägg.\n"
+"Skicka e-post till %2$s för att posta nya meddelanden.\n"
"\n"
-"Mer information får du på %3$s.\n"
+"Mer e-postinstruktioner på %3$s.\n"
"\n"
-"Mvh,\n"
+"Med vänliga hälsningar,\n"
"%4$s"
#: lib/mail.php:413
@@ -4935,12 +4811,12 @@ msgstr "%s status"
#: lib/mail.php:439
msgid "SMS confirmation"
-msgstr "SMS Bekräftelse"
+msgstr "SMS-bekräftelse"
#: lib/mail.php:463
-#, fuzzy, php-format
+#, php-format
msgid "You've been nudged by %s"
-msgstr "Du är identifierad. Skriv in"
+msgstr "Du har blivit knuffad av %s"
#: lib/mail.php:467
#, php-format
@@ -4961,7 +4837,7 @@ msgstr ""
#: lib/mail.php:510
#, php-format
msgid "New private message from %s"
-msgstr ""
+msgstr "Nytt privat meddelande från %s"
#: lib/mail.php:514
#, php-format
@@ -4983,9 +4859,9 @@ msgid ""
msgstr ""
#: lib/mail.php:559
-#, fuzzy, php-format
+#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr "%s la till ditt inlägg som favorit"
+msgstr "%s (@%s) lade till din notis som en favorit"
#: lib/mail.php:561
#, php-format
@@ -5011,7 +4887,7 @@ msgstr ""
#: lib/mail.php:620
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "%s (@%s) skickade en notis för din uppmärksamhet"
#: lib/mail.php:622
#, php-format
@@ -5031,86 +4907,87 @@ msgstr ""
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
msgstr ""
+"Det var ett databasfel vid sparandet av din profil. Var vänlig försök igen."
#: lib/mediafile.php:142
msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
msgstr ""
+"Den uppladdade filen överstiger upload_max_filesize-direktivet i php.ini."
#: lib/mediafile.php:147
msgid ""
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
"the HTML form."
msgstr ""
+"Den uppladdade filen överstiger MAX_FILE_SIZE-direktivet som var angivet i "
+"HTML-formuläret."
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "Den uppladdade filen var bara delvis uppladdad."
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "Saknar en tillfällig mapp."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
-msgstr ""
+msgstr "Misslyckades att skriva fil till disk."
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
-msgstr ""
+msgstr "Filuppladdningen stoppad pga filändelse"
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota!"
-msgstr ""
+msgstr "Fil överstiger användaren kvot!"
#: lib/mediafile.php:196 lib/mediafile.php:233
msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "Fil kunde inte flyttas till destinationskatalog."
#: lib/mediafile.php:201 lib/mediafile.php:237
msgid "Could not determine file's mime-type!"
-msgstr "Kunde inte ta emot favoritinläggen."
+msgstr "Kunde inte fastställa filens MIME-typ!"
#: lib/mediafile.php:270
#, php-format
msgid " Try using another %s format."
-msgstr ""
+msgstr "Försök använda ett annat %s-format."
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported filetype on this server."
-msgstr ""
+msgstr "%s är en filtyp som saknar stöd på denna server."
#: lib/messageform.php:120
-#, fuzzy
msgid "Send a direct notice"
-msgstr "Tabort inlägg"
+msgstr "Skicka ett direktinlägg"
#: lib/messageform.php:146
msgid "To"
-msgstr ""
+msgstr "Till"
-#: lib/messageform.php:162 lib/noticeform.php:186
-#, fuzzy
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
-msgstr "Minst 6 tecken"
+msgstr "Tillgängliga tecken"
#: lib/noticeform.php:158
-#, fuzzy
msgid "Send a notice"
-msgstr "Skicka ett meddelande"
+msgstr "Skicka ett inlägg"
#: lib/noticeform.php:171
#, php-format
msgid "What's up, %s?"
msgstr "Vad är på gång, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Bifoga"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Bifoga en fil"
#: lib/noticelist.php:403
#, php-format
@@ -5118,78 +4995,72 @@ msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
msgstr ""
#: lib/noticelist.php:404
-#, fuzzy
msgid "N"
-msgstr "Nej"
+msgstr "N"
#: lib/noticelist.php:404
msgid "S"
-msgstr ""
+msgstr "S"
#: lib/noticelist.php:405
msgid "E"
-msgstr ""
+msgstr "Ö"
#: lib/noticelist.php:405
msgid "W"
-msgstr ""
+msgstr "V"
#: lib/noticelist.php:411
msgid "at"
-msgstr ""
+msgstr "på"
#: lib/noticelist.php:506
-#, fuzzy
msgid "in context"
-msgstr "Inget innehåll!"
+msgstr "i sammanhang"
#: lib/noticelist.php:526
-#, fuzzy
msgid "Reply to this notice"
msgstr "Svara på detta inlägg"
#: lib/noticelist.php:527
-#, fuzzy
msgid "Reply"
-msgstr "svar"
+msgstr "Svara"
#: lib/nudgeform.php:116
msgid "Nudge this user"
-msgstr ""
+msgstr "Knuffa denna användare"
#: lib/nudgeform.php:128
msgid "Nudge"
-msgstr ""
+msgstr "Knuffa"
#: lib/nudgeform.php:128
-#, fuzzy
msgid "Send a nudge to this user"
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Skicka en knuff till den användaren."
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
-msgstr "Fel uppstog när nya profilen skulle läggas till"
+msgstr "Fel vid infogning av ny profil"
#: lib/oauthstore.php:291
msgid "Error inserting avatar"
-msgstr "Fel uppstog när användarbild skulle läggas till"
+msgstr "Fel vid infogning av avatar"
#: lib/oauthstore.php:311
msgid "Error inserting remote profile"
-msgstr "Fel uppstog när fjärrprofilen skulle läggas till"
+msgstr "Fel vid infogning av fjärrprofilen"
#: lib/oauthstore.php:345
-#, fuzzy
msgid "Duplicate notice"
-msgstr "Tabort inlägg"
+msgstr "Duplicera notis"
#: lib/oauthstore.php:467 lib/subs.php:48
msgid "You have been banned from subscribing."
-msgstr ""
+msgstr "Du har blivit utestängd från att prenumerera."
#: lib/oauthstore.php:492
msgid "Couldn't insert new subscription."
-msgstr "Kunde inte lägga till ny prenumeration."
+msgstr "Kunde inte infoga ny prenumeration."
#: lib/personalgroupnav.php:99
msgid "Personal"
@@ -5201,28 +5072,28 @@ msgstr "Svar"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr ""
+msgstr "Favoriter"
#: lib/personalgroupnav.php:124
msgid "Inbox"
-msgstr ""
+msgstr "Inkorg"
#: lib/personalgroupnav.php:125
msgid "Your incoming messages"
-msgstr ""
+msgstr "Dina inkommande meddelanden"
#: lib/personalgroupnav.php:129
msgid "Outbox"
-msgstr ""
+msgstr "Utkorg"
#: lib/personalgroupnav.php:130
msgid "Your sent messages"
-msgstr ""
+msgstr "Dina skickade meddelanden"
#: lib/personaltagcloudsection.php:56
#, php-format
msgid "Tags in %s's notices"
-msgstr ""
+msgstr "Taggar i %ss notiser"
#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
msgid "Subscriptions"
@@ -5234,16 +5105,15 @@ msgstr "Alla prenumerationer"
#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
msgid "Subscribers"
-msgstr "Prenumerant"
+msgstr "Prenumeranter"
#: lib/profileaction.php:157
-#, fuzzy
msgid "All subscribers"
-msgstr "Prenumerant"
+msgstr "Alla prenumeranter"
#: lib/profileaction.php:178
msgid "User ID"
-msgstr ""
+msgstr "Användar-ID"
#: lib/profileaction.php:183
msgid "Member since"
@@ -5251,16 +5121,15 @@ msgstr "Medlem sedan"
#: lib/profileaction.php:245
msgid "All groups"
-msgstr ""
+msgstr "Alla grupper"
#: lib/profileformaction.php:123
-#, fuzzy
msgid "No return-to arguments"
-msgstr "Inget sådant dokument."
+msgstr "Inga \"return-to\"-argument"
#: lib/profileformaction.php:137
msgid "unimplemented method"
-msgstr ""
+msgstr "inte implementerad metod"
#: lib/publicgroupnav.php:78
msgid "Public"
@@ -5268,44 +5137,41 @@ msgstr "Publik"
#: lib/publicgroupnav.php:82
msgid "User groups"
-msgstr ""
+msgstr "Användargrupper"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
-#, fuzzy
msgid "Recent tags"
-msgstr "Tidigare taggar"
+msgstr "Senaste taggar"
#: lib/publicgroupnav.php:88
msgid "Featured"
msgstr ""
#: lib/publicgroupnav.php:92
-#, fuzzy
msgid "Popular"
-msgstr "Personer"
+msgstr "Populärt"
#: lib/sandboxform.php:67
+#, fuzzy
msgid "Sandbox"
-msgstr ""
+msgstr "Flytta till sandlåda"
#: lib/sandboxform.php:78
#, fuzzy
msgid "Sandbox this user"
-msgstr "Ingen sådan användare"
+msgstr "Flytta denna användare till sandlåda"
#: lib/searchaction.php:120
-#, fuzzy
msgid "Search site"
-msgstr "Sök"
+msgstr "Sök webbplats"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Nyckelord"
#: lib/searchaction.php:162
-#, fuzzy
msgid "Search help"
-msgstr "Sök"
+msgstr "Sök hjälp"
#: lib/searchgroupnav.php:80
msgid "People"
@@ -5313,49 +5179,46 @@ msgstr "Personer"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr "Sök personer på denna sida"
+msgstr "Hitta personer på denna webbplats"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
-msgstr "Sök innehåll i inlägg"
+msgstr "Hitta innehåll i notiser"
#: lib/searchgroupnav.php:85
-#, fuzzy
msgid "Find groups on this site"
-msgstr "Sök personer på denna sida"
+msgstr "Hitta grupper på denna webbplats"
#: lib/section.php:89
msgid "Untitled section"
-msgstr ""
+msgstr "Namnlös sektion"
#: lib/section.php:106
msgid "More..."
-msgstr ""
+msgstr "Mer..."
#: lib/silenceform.php:67
-#, fuzzy
msgid "Silence"
-msgstr "Nytt inlägg"
+msgstr "Tysta ned"
#: lib/silenceform.php:78
-#, fuzzy
msgid "Silence this user"
-msgstr "Ingen sådan användare"
+msgstr "Tysta ned denna användare"
#: lib/subgroupnav.php:83
-#, fuzzy, php-format
+#, php-format
msgid "People %s subscribes to"
-msgstr "Fjärrprenumerera"
+msgstr "Personer %s prenumererar på"
#: lib/subgroupnav.php:91
-#, fuzzy, php-format
+#, php-format
msgid "People subscribed to %s"
-msgstr "Fjärrprenumerera"
+msgstr "Personer som prenumererar på %s"
#: lib/subgroupnav.php:99
#, php-format
msgid "Groups %s is a member of"
-msgstr ""
+msgstr "Grupper %s är en medlem i"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -5369,16 +5232,15 @@ msgstr ""
#: lib/subscriptionlist.php:126
msgid "(none)"
-msgstr ""
+msgstr "(ingen)"
#: lib/subs.php:52
msgid "Already subscribed!"
-msgstr ""
+msgstr "Redan prenumerant!"
#: lib/subs.php:56
-#, fuzzy
msgid "User has blocked you."
-msgstr "Användaren har ingen profil."
+msgstr "Användaren har blockerat dig."
#: lib/subs.php:60
msgid "Could not subscribe."
@@ -5386,80 +5248,77 @@ msgstr "Kunde inte prenumerera."
#: lib/subs.php:79
msgid "Could not subscribe other to you."
-msgstr "Kunde inte prenumerera på annat åt dig."
+msgstr "Kunde inte göra andra till prenumeranter hos dig."
#: lib/subs.php:128
-#, fuzzy
msgid "Not subscribed!"
-msgstr "Ingen prenumerant!"
+msgstr "Inte prenumerant!"
+
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Kunde inte ta bort själv-prenumeration."
-#: lib/subs.php:140
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
-msgstr "Kunde inte radera prenumerationen. "
+msgstr "Kunde inte ta bort prenumeration."
#: lib/tagcloudsection.php:56
-#, fuzzy
msgid "None"
-msgstr "Nej"
+msgstr "Ingen"
#: lib/topposterssection.php:74
msgid "Top posters"
-msgstr ""
+msgstr "Toppostare"
#: lib/unsandboxform.php:69
+#, fuzzy
msgid "Unsandbox"
-msgstr ""
+msgstr "Flytta från sandlåda"
#: lib/unsandboxform.php:80
#, fuzzy
msgid "Unsandbox this user"
-msgstr "Ingen sådan användare"
+msgstr "Flytta denna användare från sandlåda"
#: lib/unsilenceform.php:67
msgid "Unsilence"
-msgstr ""
+msgstr "Häv nedtystning"
#: lib/unsilenceform.php:78
-#, fuzzy
msgid "Unsilence this user"
-msgstr "Ingen sådan användare"
+msgstr "Häv nedtystning av denna användare"
#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
msgid "Unsubscribe from this user"
-msgstr ""
+msgstr "Avsluta prenumerationen på denna användare"
#: lib/unsubscribeform.php:137
msgid "Unsubscribe"
-msgstr "Lämnar pren."
+msgstr "Avsluta pren."
#: lib/userprofile.php:116
-#, fuzzy
msgid "Edit Avatar"
-msgstr "Användarbild"
+msgstr "Redigera avatar"
#: lib/userprofile.php:236
-#, fuzzy
msgid "User actions"
-msgstr "Okänd funktion"
+msgstr "Användaråtgärd"
#: lib/userprofile.php:248
-#, fuzzy
msgid "Edit profile settings"
-msgstr "Profil inställningar"
+msgstr "Redigera profilinställningar"
#: lib/userprofile.php:249
msgid "Edit"
-msgstr ""
+msgstr "Redigera"
#: lib/userprofile.php:272
-#, fuzzy
msgid "Send a direct message to this user"
-msgstr "Du kan inte skicka meddelande till den användaren."
+msgstr "Skicka ett direktmeddelande till denna användare"
#: lib/userprofile.php:273
-#, fuzzy
msgid "Message"
-msgstr "Nytt meddelande"
+msgstr "Meddelande"
#: lib/userprofile.php:311
msgid "Moderate"
@@ -5510,27 +5369,27 @@ msgid "about a year ago"
msgstr "för ett år sedan"
#: lib/webcolor.php:82
-#, fuzzy, php-format
+#, php-format
msgid "%s is not a valid color!"
-msgstr "Hemsidan har ingen giltig URL"
+msgstr "%s är inte en giltig färg!"
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken."
#: scripts/maildaemon.php:48
msgid "Could not parse message."
-msgstr ""
+msgstr "Kunde inte tolka meddelande."
#: scripts/maildaemon.php:53
msgid "Not a registered user."
-msgstr "Inte registrerad användare."
+msgstr "Inte en registrerad användare."
#: scripts/maildaemon.php:57
msgid "Sorry, that is not your incoming email address."
-msgstr "Ledsen, men det är inte din inkommande emailadress."
+msgstr "Ledsen, det är inte din inkommande e-postadress."
#: scripts/maildaemon.php:61
msgid "Sorry, no incoming email allowed."
-msgstr "Ledsen, men inga inkommande email är tillåtna."
+msgstr "Ledsen, ingen inkommande e-post tillåts."
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index fd3695343..4e3b165ac 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:50+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:26+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
@@ -182,7 +182,12 @@ msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
msgid "Could not save profile."
msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "వాడà±à°•à°°à°¿ నిరోధం విఫలమైంది."
@@ -566,7 +571,7 @@ msgstr "à°•à°¤à±à°¤à°¿à°°à°¿à°‚à°šà±"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -818,101 +823,101 @@ msgstr "రూపà±à°°à±‡à°–à°²à±"
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "అలంకారం à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ లేదà±: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "à°šà°¿à°¹à±à°¨à°¾à°¨à±à°¨à°¿ మారà±à°šà±"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "సైటౠచిహà±à°¨à°‚"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "అలంకారానà±à°¨à°¿ మారà±à°šà±"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "సైటౠఅలంకారం"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "సైటà±à°•à°¿ అలంకారం."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "నేపథà±à°¯ à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మారà±à°šà±"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "నేపథà±à°¯à°‚"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "మీ à°¸à±à°µà°‚à°¤ నేపథà±à°¯à°ªà± à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మీరౠఎకà±à°•à°¿à°‚చవచà±à°šà±. à°—à°°à°¿à°·à±à°  ఫైలౠపరిమాణం 2మెబై."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "à°°à°‚à°—à±à°²à°¨à± మారà±à°šà±"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "విషయం"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "పకà±à°•à°ªà°Ÿà±à°Ÿà±€"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "పాఠà±à°¯à°‚"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "లంకెలà±"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -922,7 +927,7 @@ msgstr ""
msgid "Save"
msgstr "à°­à°¦à±à°°à°ªà°°à°šà±"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "రూపà±à°°à±‡à°–లని à°­à°¦à±à°°à°ªà°°à°šà±"
@@ -1346,19 +1351,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "à°…à°­à°¿à°°à±à°šà±à°²à± à°­à°¦à±à°°à°®à°¯à±à°¯à°¾à°¯à°¿."
@@ -1659,7 +1664,7 @@ msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం"
msgid "Optionally add a personal message to the invitation."
msgstr "à°à°šà±à°›à°¿à°•à°‚à°—à°¾ ఆహà±à°µà°¾à°¨à°¾à°¨à°¿à°•à°¿ à°µà±à°¯à°•à±à°¤à°¿à°—à°¤ సందేశం చేరà±à°šà°‚à°¡à°¿."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "పంపించà±"
@@ -1739,11 +1744,11 @@ msgstr "ఓపెనà±à°à°¡à±€ ఫారమà±à°¨à± సృషà±à°Ÿà°¿à°‚à°šà
msgid "%s left group %s"
msgstr "%2$s à°—à±à°‚పౠనà±à°‚à°¡à°¿ %1$s వైదొలిగారà±"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "సందేశపౠవిషయం సరైనది కాదà±"
@@ -1949,8 +1954,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాతà±à°°à°®à±‡ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4279,40 +4284,54 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
msgstr[1] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4331,6 +4350,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4394,11 +4414,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "మీ à°¸à±à°µà°‚à°¤ నేపథà±à°¯à°ªà± à°šà°¿à°¤à±à°°à°¾à°¨à±à°¨à°¿ మీరౠఎకà±à°•à°¿à°‚చవచà±à°šà±. à°—à°°à°¿à°·à±à°  ఫైలౠపరిమాణం 2మెబై."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4850,7 +4866,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨ à°…à°•à±à°·à°°à°¾à°²à±"
@@ -4864,11 +4880,11 @@ msgstr "కొతà±à°¤ సందేశం"
msgid "What's up, %s?"
msgstr "%s, సంగతà±à°²à±‡à°®à°¿à°Ÿà°¿?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "జోడించà±"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "à°’à°• ఫైలà±à°¨à°¿ జోడించà±"
@@ -5145,7 +5161,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "చందాదారà±à°²à±"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "చందాని తొలగించలేకపోయాం."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "చందాని తొలగించలేకపోయాం."
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index bbb9c2df9..3d9661e7d 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:53+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:29+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
@@ -183,7 +183,12 @@ msgstr "Kullanıcının profili yok."
msgid "Could not save profile."
msgstr "Profil kaydedilemedi."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Kullanıcı güncellenemedi."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -577,7 +582,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -836,50 +841,50 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Geçersiz büyüklük."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Parolayı değiştir"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "Yeni durum mesajı"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "DeÄŸiÅŸtir"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Yeni durum mesajı"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -887,59 +892,59 @@ msgid ""
msgstr ""
"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Parolayı değiştir"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "BaÄŸlan"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Ara"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "GiriÅŸ"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -949,7 +954,7 @@ msgstr ""
msgid "Save"
msgstr "Kaydet"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1387,19 +1392,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Kullanıcı güncellenemedi."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Tercihler kaydedildi."
@@ -1716,7 +1721,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Gönder"
@@ -1798,11 +1803,11 @@ msgstr "OpenID formu yaratılamadı: %s"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Zaten giriş yapılmış."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Geçersiz durum mesajı"
@@ -2015,8 +2020,8 @@ msgstr "BaÄŸlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4382,37 +4387,51 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Avatar bilgisi kaydedilemedi"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Bize o profili yollamadınız"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Uzaktan abonelik"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Uzaktan abonelik"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Bize o profili yollamadınız"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4431,6 +4450,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4495,11 +4515,7 @@ msgid ""
msgstr ""
"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4964,7 +4980,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 veya daha fazla karakter"
@@ -4979,11 +4995,11 @@ msgstr "Yeni durum mesajı"
msgid "What's up, %s?"
msgstr "N'aber %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5263,7 +5279,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Abonelik silinemedi."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Abonelik silinemedi."
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index b3fb43465..0d8674bfd 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:20:56+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:33+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
@@ -189,7 +189,11 @@ msgstr "КориÑтувач не має профілю."
msgid "Could not save profile."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Ви не можете блокувати Ñамого Ñебе!"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "Спроба заблокувати кориÑтувача невдала."
@@ -573,7 +577,7 @@ msgstr "Ð’Ñ‚Ñти"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -825,45 +829,45 @@ msgstr "Дизайн"
msgid "Design settings for this StatusNet site."
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту StatusNet."
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
msgid "Invalid logo URL."
msgstr "Помилкова URL-адреÑа логотипу."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, php-format
msgid "Theme not available: %s"
msgstr "Тема не доÑтупна: %s"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
msgid "Change logo"
msgstr "Змінити логотип"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
msgid "Site logo"
msgstr "Логотип Ñайту"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
msgid "Change theme"
msgstr "Змінити тему"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
msgid "Site theme"
msgstr "Тема Ñайту"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr "Тема Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñайту."
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr "Змінити фонове зображеннÑ"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr "Фон"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -872,55 +876,55 @@ msgstr ""
"Ви можете завантажити фонове Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ñайту. МакÑимальний розмір файлу "
"%1$s."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr "Увімк."
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr "Вимк."
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr "Увімкнути або вимкнути фонове зображеннÑ."
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr "ЗамоÑтити фон"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
msgstr "Змінити кольори"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
msgid "Content"
msgstr "ЗміÑÑ‚"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr "Бічна панель"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "ТекÑÑ‚"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
msgid "Links"
msgstr "ПоÑиланнÑ"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr "За замовч."
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr "Оновити Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð° замовчуваннÑм"
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr "ПовернутиÑÑŒ до початкових налаштувань"
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -930,7 +934,7 @@ msgstr "ПовернутиÑÑŒ до початкових налаштувань"
msgid "Save"
msgstr "Зберегти"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr "Зберегти дизайн"
@@ -1366,18 +1370,18 @@ msgstr ""
"Ðалаштуйте виглÑд Ñторінки групи, викориÑтовуючи фонове Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ñ– кольори "
"на Ñвій Ñмак."
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
msgid "Couldn't update your design."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ дизайн."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr "Ðе маю можливоÑÑ‚Ñ– зберегти Ваші Ð½Ð°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½Ñƒ!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr "Преференції дизайну збережно."
@@ -1705,7 +1709,7 @@ msgstr "ОÑобиÑÑ‚Ñ– повідомленнÑ"
msgid "Optionally add a personal message to the invitation."
msgstr "Можна додати перÑональне Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾ Ð·Ð°Ð¿Ñ€Ð¾ÑˆÐµÐ½Ð½Ñ (опціонально)."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Так!"
@@ -1812,11 +1816,11 @@ msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача %s з гру
msgid "%s left group %s"
msgstr "%s залишив групу %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Тепер Ви увійшли."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr "ÐедійÑний або неправильний токен."
@@ -2033,8 +2037,8 @@ msgstr "тип зміÑту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Такий формат даних не підтримуєтьÑÑ."
@@ -2823,11 +2827,9 @@ msgid "Invalid profile URL (bad format)"
msgstr "ÐедійÑна URL-адреÑа профілю (неправильний формат)"
#: actions/remotesubscribe.php:168
-#, fuzzy
msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
msgstr ""
-"Це недійÑна URL-адреÑа профілю (немає документа YADIS; немає або помилкове "
-"Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ XRDS)."
+"Ðеправильна URL-адреÑа профілю (немає документа YADIS, або помилковий XRDS)."
#: actions/remotesubscribe.php:176
msgid "That’s a local profile! Login to subscribe."
@@ -4439,40 +4441,54 @@ msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¾."
msgid "Can't turn on notification."
msgstr "Ðе можна увімкнути ÑповіщеннÑ."
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Ðеможна призначити додаткові імена."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
msgid "You are not subscribed to anyone."
msgstr "Ви не маєте жодних підпиÑок."
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ви підпиÑані до цієї оÑоби:"
msgstr[1] "Ви підпиÑані до цих людей:"
msgstr[2] "Ви підпиÑані до цих людей:"
-#: lib/command.php:614
+#: lib/command.php:645
msgid "No one is subscribed to you."
msgstr "До Ð’Ð°Ñ Ð½Ñ–Ñ…Ñ‚Ð¾ не підпиÑаний."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Ð¦Ñ Ð¾Ñоба Ñ” підпиÑаною до ВаÑ:"
msgstr[1] "Ці люди підпиÑані до ВаÑ:"
msgstr[2] "Ці люди підпиÑані до ВаÑ:"
-#: lib/command.php:636
+#: lib/command.php:667
msgid "You are not a member of any groups."
msgstr "Ви не Ñ” учаÑником жодної групи."
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ви Ñ” учаÑником групи:"
msgstr[1] "Ви Ñ” учаÑником таких груп:"
msgstr[2] "Ви Ñ” учаÑником таких груп:"
-#: lib/command.php:652
+#: lib/command.php:683
#, fuzzy
msgid ""
"Commands:\n"
@@ -4492,6 +4508,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4511,40 +4528,40 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
"Команди:\n"
-"on - увімкнути ÑповіщеннÑ\n"
-"off - вимкнути ÑповіщеннÑ\n"
-"help - ÑпиÑок команд\n"
-"follow <nickname> - підпиÑатиÑÑŒ до кориÑтувача\n"
-"groups - групи, до Ñких Ви входите\n"
-"subscriptions - кориÑтувачі, до Ñких Ви підпиÑані\n"
-"subscribers - кориÑтувачі, Ñкі підпиÑані до ВаÑ\n"
-"leave <nickname> - відпиÑатиÑÑŒ від кориÑтувача\n"
-"d <nickname> <text> - надіÑлати оÑобиÑте повідомленнÑ\n"
-"get <nickname> - отримати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
-"whois <nickname> - інфо про кориÑтувача\n"
-"fav <nickname> - додати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача до обраних\n"
-"fav #<notice_id> - додати Ð´Ð¾Ð¿Ð¸Ñ #номер до обраних\n"
-"reply #<notice_id> - відповіÑти на Ð´Ð¾Ð¿Ð¸Ñ #номер\n"
-"reply <nickname> - відповіÑти на оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
-"join <group> - приєднатиÑÑ Ð´Ð¾ групи\n"
-"login - отримати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ у веб-інтерфейÑ\n"
-"drop <group> - залишити групу\n"
-"stats - отримати ÑтатиÑтику\n"
-"stop - те Ñаме що Ñ– 'off'\n"
-"quit - те Ñаме що Ñ– 'off'\n"
-"sub <nickname> - те Ñаме що Ñ– 'follow'\n"
-"unsub <nickname> - те Ñаме що Ñ– 'leave'\n"
-"last <nickname> - те Ñаме що Ñ– 'get'\n"
-"on <nickname> - наразі не виконуєтьÑÑ\n"
-"off <nickname> - наразі не виконуєтьÑÑ\n"
-"nudge <nickname> - «розштовхати»\n"
-"invite <phone number> - наразі не виконуєтьÑÑ\n"
-"track <word> - наразі не виконуєтьÑÑ\n"
-"untrack <word> - наразі не виконуєтьÑÑ\n"
-"track off - наразі не виконуєтьÑÑ\n"
-"untrack all - наразі не виконуєтьÑÑ\n"
-"tracks - наразі не виконуєтьÑÑ\n"
-"tracking - наразі не виконуєтьÑÑ\n"
+"on — увімкнути ÑповіщеннÑ\n"
+"off — вимкнути ÑповіщеннÑ\n"
+"help — ÑпиÑок команд\n"
+"follow <nickname> — підпиÑатиÑÑŒ до кориÑтувача\n"
+"groups — групи, до Ñких Ви входите\n"
+"subscriptions — кориÑтувачі, до Ñких Ви підпиÑані\n"
+"subscribers — кориÑтувачі, Ñкі підпиÑані до ВаÑ\n"
+"leave <nickname> — відпиÑатиÑÑŒ від кориÑтувача\n"
+"d <nickname> <text> — надіÑлати оÑобиÑте повідомленнÑ\n"
+"get <nickname> — отримати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
+"whois <nickname> — інфо про кориÑтувача\n"
+"fav <nickname> — додати оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача до обраних\n"
+"fav #<notice_id> — додати Ð´Ð¾Ð¿Ð¸Ñ Ð´Ð¾ обраних\n"
+"reply #<notice_id> — відповіÑти на допиÑ\n"
+"reply <nickname> — відповіÑти на оÑтанній Ð´Ð¾Ð¿Ð¸Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
+"join <group> — приєднатиÑÑ Ð´Ð¾ групи\n"
+"login — отримати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñƒ у веб-інтерфейÑ\n"
+"drop <group> — залишити групу\n"
+"stats — отримати ÑтатиÑтику\n"
+"stop — те Ñаме що Ñ– 'off'\n"
+"quit — те Ñаме що Ñ– 'off'\n"
+"sub <nickname> — те Ñаме що Ñ– 'follow'\n"
+"unsub <nickname> — те Ñаме що Ñ– 'leave'\n"
+"last <nickname> — те Ñаме що Ñ– 'get'\n"
+"on <nickname> — наразі не виконуєтьÑÑ\n"
+"off <nickname> — наразі не виконуєтьÑÑ\n"
+"nudge <nickname> — «розштовхати»\n"
+"invite <phone number> — наразі не виконуєтьÑÑ\n"
+"track <word> — наразі не виконуєтьÑÑ\n"
+"untrack <word> — наразі не виконуєтьÑÑ\n"
+"track off — наразі не виконуєтьÑÑ\n"
+"untrack all — наразі не виконуєтьÑÑ\n"
+"tracks — наразі не виконуєтьÑÑ\n"
+"tracking — наразі не виконуєтьÑÑ\n"
#: lib/common.php:199
msgid "No configuration file found. "
@@ -4589,11 +4606,7 @@ msgstr ""
"Ви можете завантажити влаÑне фонове зображеннÑ. МакÑимальний розмір файлу "
"Ñтановить 2Мб."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr "Помилка кольорів за замовчуваннÑм: "
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr "Дизайн за замовчуваннÑм відновлено."
@@ -5128,7 +5141,7 @@ msgstr "ÐадіÑлати прÑмий допиÑ"
msgid "To"
msgstr "До"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
msgid "Available characters"
msgstr "ЛишилоÑÑŒ знаків"
@@ -5141,11 +5154,11 @@ msgstr "ÐадіÑлати допиÑ"
msgid "What's up, %s?"
msgstr "Що нового, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr "ВклаÑти"
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr "ВклаÑти файл"
@@ -5412,7 +5425,11 @@ msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´Ð¿Ð¸Ñати інших до ВаÑ."
msgid "Not subscribed!"
msgstr "Ðе підпиÑано!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+msgid "Couldn't delete self-subscription."
+msgstr "Ðе можу видалити ÑамопідпиÑку."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку."
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index b77e2e8fc..8e29eac3c 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:21:00+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:36+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
@@ -184,7 +184,12 @@ msgstr "NgÆ°á»i dùng không có thông tin."
msgid "Could not save profile."
msgstr "Không thể lưu hồ sơ cá nhân."
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "Không thể cập nhật thành viên."
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -584,7 +589,7 @@ msgstr "Nhóm"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -846,52 +851,52 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "Kích thước không hợp lệ."
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "Trang này không phải là phÆ°Æ¡ng tiện truyá»n thông mà bạn chấp nhận."
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "Thay đổi mật khẩu của bạn"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "ThÆ° má»i"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "Thay đổi"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "Thông báo mới"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
#, fuzzy
msgid "Change background image"
msgstr "Background Theme:"
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
#, fuzzy
msgid "Background"
msgstr "Background Theme:"
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
@@ -900,60 +905,60 @@ msgstr ""
"Bạn có thể cập nhật hồ sÆ¡ cá nhân tại đây để má»i ngÆ°á»i có thể biết thông tin "
"vỠbạn."
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
#, fuzzy
msgid "Tile background image"
msgstr "Background Theme:"
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "Thay đổi mật khẩu của bạn"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "Kết nối"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "Tìm kiếm"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "Chuỗi bất kỳ"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "Äăng nhập"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -963,7 +968,7 @@ msgstr ""
msgid "Save"
msgstr "LÆ°u"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
#, fuzzy
msgid "Save design"
msgstr "LÆ°u"
@@ -1431,20 +1436,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "Không thể cập nhật thành viên."
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "Không thể lưu thông tin Twitter của bạn!"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "Các tính năng đã được lưu."
@@ -1772,7 +1777,7 @@ msgstr "Tin nhắn cá nhân"
msgid "Optionally add a personal message to the invitation."
msgstr "Không bắt buá»™c phải thêm thông Ä‘iệp vào thÆ° má»i."
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "Gá»­i"
@@ -1883,11 +1888,11 @@ msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè cá»
msgid "%s left group %s"
msgstr "%s và nhóm"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "Äã đăng nhập."
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "Nội dung tin nhắn không hợp lệ"
@@ -2106,8 +2111,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "Không hỗ trợ định dạng dữ liệu này."
@@ -4550,37 +4555,51 @@ msgstr "Không có mã số xác nhận."
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "Không thể tạo favorite."
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Bạn đã theo những ngÆ°á»i này:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Không thể tạo favorite."
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Không thể tạo favorite."
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4599,6 +4618,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4664,11 +4684,7 @@ msgstr ""
"Bạn có thể cập nhật hồ sÆ¡ cá nhân tại đây để má»i ngÆ°á»i có thể biết thông tin "
"vỠbạn."
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5189,7 +5205,7 @@ msgstr "Xóa tin nhắn"
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "Nhiá»u hÆ¡n 6 ký tá»±"
@@ -5204,11 +5220,11 @@ msgstr "Thông báo mới"
msgid "What's up, %s?"
msgstr "Bạn đang làm gì thế, %s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5499,7 +5515,12 @@ msgstr "Không thể tạo favorite."
msgid "Not subscribed!"
msgstr "Chưa đăng nhận!"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "Không thể xóa đăng nhận."
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "Không thể xóa đăng nhận."
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index 2d0853339..4e306a76b 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:21:03+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:39+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
@@ -186,7 +186,12 @@ msgstr "用户没有个人信æ¯ã€‚"
msgid "Could not save profile."
msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "无法更新用户。"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr "阻止用户失败。"
@@ -578,7 +583,7 @@ msgstr "剪è£"
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -842,110 +847,110 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "大å°ä¸æ­£ç¡®ã€‚"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "这个页é¢ä¸æ供您想è¦çš„媒体类型"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "修改密ç "
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "邀请"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "修改"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "新通告"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
#, fuzzy
msgid "Theme for the site."
msgstr "登出本站"
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, fuzzy, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr "ä½ å¯ä»¥ç»™ä½ çš„组上载一个logo图。"
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "修改密ç "
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "连接"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
#, fuzzy
msgid "Sidebar"
msgstr "æœç´¢"
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr "文本"
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "登录"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -955,7 +960,7 @@ msgstr ""
msgid "Save"
msgstr "ä¿å­˜"
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1404,20 +1409,20 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "无法更新用户。"
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
#, fuzzy
msgid "Unable to save your design settings!"
msgstr "无法ä¿å­˜ Twitter 设置ï¼"
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
#, fuzzy
msgid "Design preferences saved."
msgstr "åŒæ­¥é€‰é¡¹å·²ä¿å­˜ã€‚"
@@ -1731,7 +1736,7 @@ msgstr "个人消æ¯"
msgid "Optionally add a personal message to the invitation."
msgstr "在邀请中加几å¥è¯(å¯é€‰)。"
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr "å‘é€"
@@ -1835,11 +1840,11 @@ msgstr "无法订阅用户:未找到。"
msgid "%s left group %s"
msgstr "%s 离开群 %s"
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "已登录。"
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
#, fuzzy
msgid "Invalid or expired token."
msgstr "通告内容ä¸æ­£ç¡®"
@@ -2048,8 +2053,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚"
@@ -4455,37 +4460,51 @@ msgstr "通告开å¯ã€‚"
msgid "Can't turn on notification."
msgstr "无法开å¯é€šå‘Šã€‚"
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "无法创建收è—。"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "您已订阅这些用户:"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "无法订阅他人更新。"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "无法订阅他人更新。"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "您未告知此个人信æ¯"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4504,6 +4523,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4568,11 +4588,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr "您å¯ä»¥åœ¨è¿™é‡Œä¸Šä¼ ä¸ªäººå¤´åƒã€‚"
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -5048,7 +5064,7 @@ msgstr "删除通告"
msgid "To"
msgstr "到"
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6 个或更多字符"
@@ -5063,11 +5079,11 @@ msgstr "å‘é€æ¶ˆæ¯"
msgid "What's up, %s?"
msgstr "怎么样,%s?"
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5355,7 +5371,12 @@ msgstr "无法订阅他人更新。"
msgid "Not subscribed!"
msgstr "未订阅ï¼"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "无法删除订阅。"
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "无法删除订阅。"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 17a54af33..ad7d1fbae 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,12 +7,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-12-02 23:18+0000\n"
-"PO-Revision-Date: 2009-12-02 23:21:06+0000\n"
+"POT-Creation-Date: 2009-12-07 21:25+0000\n"
+"PO-Revision-Date: 2009-12-07 21:27:42+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.16alpha(r59683); Translate extension (2009-11-29)\n"
+"X-Generator: MediaWiki 1.16alpha(r59800); Translate extension (2009-12-06)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
@@ -183,7 +183,12 @@ msgstr ""
msgid "Could not save profile."
msgstr "無法儲存個人資料"
-#: actions/apiblockcreate.php:108
+#: actions/apiblockcreate.php:105
+#, fuzzy
+msgid "You cannot block yourself!"
+msgstr "無法更新使用者"
+
+#: actions/apiblockcreate.php:119
msgid "Block user failed."
msgstr ""
@@ -571,7 +576,7 @@ msgstr ""
#: actions/emailsettings.php:238 actions/favor.php:75
#: actions/groupblock.php:66 actions/grouplogo.php:309
#: actions/groupunblock.php:66 actions/imsettings.php:206
-#: actions/invite.php:56 actions/login.php:129 actions/makeadmin.php:66
+#: actions/invite.php:56 actions/login.php:134 actions/makeadmin.php:66
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/othersettings.php:145 actions/passwordsettings.php:138
#: actions/profilesettings.php:187 actions/recoverpassword.php:337
@@ -830,108 +835,108 @@ msgstr ""
msgid "Design settings for this StatusNet site."
msgstr ""
-#: actions/designadminpanel.php:270
+#: actions/designadminpanel.php:275
#, fuzzy
msgid "Invalid logo URL."
msgstr "尺寸錯誤"
-#: actions/designadminpanel.php:274
+#: actions/designadminpanel.php:279
#, fuzzy, php-format
msgid "Theme not available: %s"
msgstr "個人首é ä½å€éŒ¯èª¤"
-#: actions/designadminpanel.php:370
+#: actions/designadminpanel.php:375
#, fuzzy
msgid "Change logo"
msgstr "更改密碼"
-#: actions/designadminpanel.php:375
+#: actions/designadminpanel.php:380
#, fuzzy
msgid "Site logo"
msgstr "新訊æ¯"
-#: actions/designadminpanel.php:382
+#: actions/designadminpanel.php:387
#, fuzzy
msgid "Change theme"
msgstr "更改"
-#: actions/designadminpanel.php:399
+#: actions/designadminpanel.php:404
#, fuzzy
msgid "Site theme"
msgstr "新訊æ¯"
-#: actions/designadminpanel.php:400
+#: actions/designadminpanel.php:405
msgid "Theme for the site."
msgstr ""
-#: actions/designadminpanel.php:412 lib/designsettings.php:101
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
msgid "Change background image"
msgstr ""
-#: actions/designadminpanel.php:417 actions/designadminpanel.php:492
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
#: lib/designsettings.php:178
msgid "Background"
msgstr ""
-#: actions/designadminpanel.php:422
+#: actions/designadminpanel.php:427
#, php-format
msgid ""
"You can upload a background image for the site. The maximum file size is %1"
"$s."
msgstr ""
-#: actions/designadminpanel.php:452 lib/designsettings.php:139
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
msgid "On"
msgstr ""
-#: actions/designadminpanel.php:468 lib/designsettings.php:155
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
msgid "Off"
msgstr ""
-#: actions/designadminpanel.php:469 lib/designsettings.php:156
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
msgstr ""
-#: actions/designadminpanel.php:474 lib/designsettings.php:161
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
msgstr ""
-#: actions/designadminpanel.php:483 lib/designsettings.php:170
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
#, fuzzy
msgid "Change colours"
msgstr "更改密碼"
-#: actions/designadminpanel.php:505 lib/designsettings.php:191
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
#, fuzzy
msgid "Content"
msgstr "連çµ"
-#: actions/designadminpanel.php:518 lib/designsettings.php:204
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
msgid "Sidebar"
msgstr ""
-#: actions/designadminpanel.php:531 lib/designsettings.php:217
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
msgid "Text"
msgstr ""
-#: actions/designadminpanel.php:544 lib/designsettings.php:230
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
#, fuzzy
msgid "Links"
msgstr "登入"
-#: actions/designadminpanel.php:572 lib/designsettings.php:247
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
msgstr ""
-#: actions/designadminpanel.php:573 lib/designsettings.php:248
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
msgstr ""
-#: actions/designadminpanel.php:579 lib/designsettings.php:254
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
msgid "Reset back to default"
msgstr ""
-#: actions/designadminpanel.php:581 actions/emailsettings.php:195
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:296 actions/profilesettings.php:167
#: actions/siteadminpanel.php:421 actions/smssettings.php:181
@@ -941,7 +946,7 @@ msgstr ""
msgid "Save"
msgstr ""
-#: actions/designadminpanel.php:582 lib/designsettings.php:257
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
msgid "Save design"
msgstr ""
@@ -1375,19 +1380,19 @@ msgid ""
"palette of your choice."
msgstr ""
-#: actions/groupdesignsettings.php:262 actions/userdesignsettings.php:186
-#: lib/designsettings.php:434 lib/designsettings.php:464
+#: actions/groupdesignsettings.php:263 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
#, fuzzy
msgid "Couldn't update your design."
msgstr "無法更新使用者"
-#: actions/groupdesignsettings.php:286 actions/groupdesignsettings.php:296
+#: actions/groupdesignsettings.php:287 actions/groupdesignsettings.php:297
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings!"
msgstr ""
-#: actions/groupdesignsettings.php:307 actions/userdesignsettings.php:231
+#: actions/groupdesignsettings.php:308 actions/userdesignsettings.php:231
msgid "Design preferences saved."
msgstr ""
@@ -1691,7 +1696,7 @@ msgstr ""
msgid "Optionally add a personal message to the invitation."
msgstr ""
-#: actions/invite.php:197 lib/messageform.php:181 lib/noticeform.php:225
+#: actions/invite.php:197 lib/messageform.php:180 lib/noticeform.php:224
msgid "Send"
msgstr ""
@@ -1771,11 +1776,11 @@ msgstr "無法從 %s 建立OpenID"
msgid "%s left group %s"
msgstr ""
-#: actions/login.php:79 actions/register.php:137
+#: actions/login.php:82 actions/register.php:137
msgid "Already logged in."
msgstr "已登入"
-#: actions/login.php:108 actions/login.php:118
+#: actions/login.php:113 actions/login.php:123
msgid "Invalid or expired token."
msgstr ""
@@ -1977,8 +1982,8 @@ msgstr "連çµ"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:999
-#: lib/api.php:1027 lib/api.php:1137
+#: actions/oembed.php:181 actions/oembed.php:200 lib/api.php:996
+#: lib/api.php:1024 lib/api.php:1134
msgid "Not a supported data format."
msgstr ""
@@ -4299,37 +4304,51 @@ msgstr ""
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:592
+#: lib/command.php:588
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:602
+#, fuzzy, php-format
+msgid "Could not create login token for %s"
+msgstr "無法存å–個人圖åƒè³‡æ–™"
+
+#: lib/command.php:607
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:623
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "此帳號已註冊"
-#: lib/command.php:594
+#: lib/command.php:625
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "此帳號已註冊"
-#: lib/command.php:614
+#: lib/command.php:645
#, fuzzy
msgid "No one is subscribed to you."
msgstr "無此訂閱"
-#: lib/command.php:616
+#: lib/command.php:647
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "無此訂閱"
-#: lib/command.php:636
+#: lib/command.php:667
#, fuzzy
msgid "You are not a member of any groups."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:638
+#: lib/command.php:669
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:652
+#: lib/command.php:683
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -4348,6 +4367,7 @@ msgid ""
"reply #<notice_id> - reply to notice with a given id\n"
"reply <nickname> - reply to the last notice from user\n"
"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
"drop <group> - leave group\n"
"stats - get your stats\n"
"stop - same as 'off'\n"
@@ -4410,11 +4430,7 @@ msgid ""
"You can upload your personal background image. The maximum file size is 2MB."
msgstr ""
-#: lib/designsettings.php:372
-msgid "Bad default color settings: "
-msgstr ""
-
-#: lib/designsettings.php:468
+#: lib/designsettings.php:418
msgid "Design defaults restored."
msgstr ""
@@ -4875,7 +4891,7 @@ msgstr ""
msgid "To"
msgstr ""
-#: lib/messageform.php:162 lib/noticeform.php:186
+#: lib/messageform.php:161 lib/noticeform.php:185
#, fuzzy
msgid "Available characters"
msgstr "6個以上字元"
@@ -4890,11 +4906,11 @@ msgstr "新訊æ¯"
msgid "What's up, %s?"
msgstr ""
-#: lib/noticeform.php:193
+#: lib/noticeform.php:192
msgid "Attach"
msgstr ""
-#: lib/noticeform.php:197
+#: lib/noticeform.php:196
msgid "Attach a file"
msgstr ""
@@ -5169,7 +5185,12 @@ msgstr ""
msgid "Not subscribed!"
msgstr "此帳號已註冊"
-#: lib/subs.php:140
+#: lib/subs.php:133
+#, fuzzy
+msgid "Couldn't delete self-subscription."
+msgstr "無法刪除帳號"
+
+#: lib/subs.php:146
msgid "Couldn't delete subscription."
msgstr "無法刪除帳號"
diff --git a/plugins/Facebook/FBConnectAuth.php b/plugins/Facebook/FBConnectAuth.php
index b909a4977..51bfc3865 100644
--- a/plugins/Facebook/FBConnectAuth.php
+++ b/plugins/Facebook/FBConnectAuth.php
@@ -48,8 +48,8 @@ class FBConnectauthAction extends Action
common_log(LOG_WARNING, 'Facebook Connect Plugin - ' .
"Failed auth attempt, proxy = $proxy, ip = $ip.");
- $this->clientError(_('You must be logged into Facebook to ' .
- 'use Facebook Connect.'));
+ $this->clientError(_m('You must be logged into Facebook to ' .
+ 'use Facebook Connect.'));
}
return true;
@@ -74,7 +74,7 @@ class FBConnectauthAction extends Action
// We don't want these cookies
getFacebook()->clear_cookie_state();
- $this->clientError(_('There is already a local user linked with this Facebook.'));
+ $this->clientError(_m('There is already a local user linked with this Facebook.'));
} else {
@@ -87,12 +87,12 @@ class FBConnectauthAction extends Action
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. Try again, please.'));
+ $this->showForm(_m('There was a problem with your session token. Try again, please.'));
return;
}
if ($this->arg('create')) {
if (!$this->boolean('license')) {
- $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+ $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
$this->trimmed('newname'));
return;
}
@@ -102,7 +102,7 @@ class FBConnectauthAction extends Action
} else {
common_debug('Facebook Connect Plugin - ' .
print_r($this->args, true));
- $this->showForm(_('Something weird happened.'),
+ $this->showForm(_m('Something weird happened.'),
$this->trimmed('newname'));
}
} else {
@@ -116,13 +116,13 @@ class FBConnectauthAction extends Action
$this->element('div', array('class' => 'error'), $this->error);
} else {
$this->element('div', 'instructions',
- sprintf(_('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+ sprintf(_m('This is the first time you\'ve logged into %s so we must connect your Facebook to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
}
}
function title()
{
- return _('Facebook Account Setup');
+ return _m('Facebook Account Setup');
}
function showForm($error=null, $username=null)
@@ -150,7 +150,7 @@ class FBConnectauthAction extends Action
'class' => 'form_settings',
'action' => common_local_url('FBConnectAuth')));
$this->elementStart('fieldset', array('id' => 'settings_facebook_connect_options'));
- $this->element('legend', null, _('Connection options'));
+ $this->element('legend', null, _m('Connection options'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->element('input', array('type' => 'checkbox',
@@ -159,10 +159,10 @@ class FBConnectauthAction extends Action
'name' => 'license',
'value' => 'true'));
$this->elementStart('label', array('class' => 'checkbox', 'for' => 'license'));
- $this->text(_('My text and files are available under '));
+ $this->text(_m('My text and files are available under '));
$this->element('a', array('href' => common_config('license', 'url')),
common_config('license', 'title'));
- $this->text(_(' except this private data: password, email address, IM address, phone number.'));
+ $this->text(_m(' except this private data: password, email address, IM address, phone number.'));
$this->elementEnd('label');
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -170,33 +170,33 @@ class FBConnectauthAction extends Action
$this->elementStart('fieldset');
$this->hidden('token', common_session_token());
$this->element('legend', null,
- _('Create new account'));
+ _m('Create new account'));
$this->element('p', null,
- _('Create a new user with this nickname.'));
+ _m('Create a new user with this nickname.'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- $this->input('newname', _('New nickname'),
+ $this->input('newname', _m('New nickname'),
($this->username) ? $this->username : '',
- _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+ _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('create', _('Create'));
+ $this->submit('create', _m('Create'));
$this->elementEnd('fieldset');
$this->elementStart('fieldset');
$this->element('legend', null,
- _('Connect existing account'));
+ _m('Connect existing account'));
$this->element('p', null,
- _('If you already have an account, login with your username and password to connect it to your Facebook.'));
+ _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');
- $this->input('nickname', _('Existing nickname'));
+ $this->input('nickname', _m('Existing nickname'));
$this->elementEnd('li');
$this->elementStart('li');
- $this->password('password', _('Password'));
+ $this->password('password', _m('Password'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('connect', _('Connect'));
+ $this->submit('connect', _m('Connect'));
$this->elementEnd('fieldset');
$this->elementEnd('fieldset');
@@ -212,7 +212,7 @@ class FBConnectauthAction extends Action
function createNewUser()
{
if (common_config('site', 'closed')) {
- $this->clientError(_('Registration not allowed.'));
+ $this->clientError(_m('Registration not allowed.'));
return;
}
@@ -221,14 +221,14 @@ class FBConnectauthAction extends Action
if (common_config('site', 'inviteonly')) {
$code = $_SESSION['invitecode'];
if (empty($code)) {
- $this->clientError(_('Registration not allowed.'));
+ $this->clientError(_m('Registration not allowed.'));
return;
}
$invite = Invitation::staticGet($code);
if (empty($invite)) {
- $this->clientError(_('Not a valid invitation code.'));
+ $this->clientError(_m('Not a valid invitation code.'));
return;
}
}
@@ -238,17 +238,17 @@ class FBConnectauthAction extends Action
if (!Validate::string($nickname, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
- $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+ $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
return;
}
if (!User::allowed_nickname($nickname)) {
- $this->showForm(_('Nickname not allowed.'));
+ $this->showForm(_m('Nickname not allowed.'));
return;
}
if (User::staticGet('nickname', $nickname)) {
- $this->showForm(_('Nickname already in use. Try another one.'));
+ $this->showForm(_m('Nickname already in use. Try another one.'));
return;
}
@@ -266,7 +266,7 @@ class FBConnectauthAction extends Action
$result = $this->flinkUser($user->id, $this->fbuid);
if (!$result) {
- $this->serverError(_('Error connecting user to Facebook.'));
+ $this->serverError(_m('Error connecting user to Facebook.'));
return;
}
@@ -286,7 +286,7 @@ class FBConnectauthAction extends Action
$password = $this->trimmed('password');
if (!common_check_user($nickname, $password)) {
- $this->showForm(_('Invalid username or password.'));
+ $this->showForm(_m('Invalid username or password.'));
return;
}
@@ -300,7 +300,7 @@ class FBConnectauthAction extends Action
$result = $this->flinkUser($user->id, $this->fbuid);
if (!$result) {
- $this->serverError(_('Error connecting user to Facebook.'));
+ $this->serverError(_m('Error connecting user to Facebook.'));
return;
}
@@ -320,7 +320,7 @@ class FBConnectauthAction extends Action
$result = $this->flinkUser($user->id, $this->fbuid);
if (empty($result)) {
- $this->serverError(_('Error connecting user to Facebook.'));
+ $this->serverError(_m('Error connecting user to Facebook.'));
return;
}
diff --git a/plugins/Facebook/FBConnectLogin.php b/plugins/Facebook/FBConnectLogin.php
index d2bb8054c..20c409f3e 100644
--- a/plugins/Facebook/FBConnectLogin.php
+++ b/plugins/Facebook/FBConnectLogin.php
@@ -30,7 +30,7 @@ class FBConnectLoginAction extends Action
parent::handle($args);
if (common_is_real_login()) {
- $this->clientError(_('Already logged in.'));
+ $this->clientError(_m('Already logged in.'));
}
$this->showPage();
@@ -38,7 +38,7 @@ class FBConnectLoginAction extends Action
function getInstructions()
{
- return _('Login with your Facebook Account');
+ return _m('Login with your Facebook Account');
}
function showPageNotice()
@@ -52,7 +52,7 @@ class FBConnectLoginAction extends Action
function title()
{
- return _('Facebook Login');
+ return _m('Facebook Login');
}
function showContent() {
diff --git a/plugins/Facebook/FBConnectSettings.php b/plugins/Facebook/FBConnectSettings.php
index 911c56787..590dffd8a 100644
--- a/plugins/Facebook/FBConnectSettings.php
+++ b/plugins/Facebook/FBConnectSettings.php
@@ -53,7 +53,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
function title()
{
- return _('Facebook Connect Settings');
+ return _m('Facebook Connect Settings');
}
/**
@@ -64,7 +64,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
function getInstructions()
{
- return _('Manage how your account connects to Facebook');
+ return _m('Manage how your account connects to Facebook');
}
/**
@@ -89,7 +89,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
if (!$flink) {
$this->element('p', 'instructions',
- _('There is no Facebook user connected to this account.'));
+ _m('There is no Facebook user connected to this account.'));
$this->element('fb:login-button', array('onlogin' => 'goto_login()',
'length' => 'long'));
@@ -97,7 +97,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
} else {
$this->element('p', 'form_note',
- _('Connected Facebook user'));
+ _m('Connected Facebook user'));
$this->elementStart('p', array('class' => 'facebook-user-display'));
$this->elementStart('fb:profile-pic',
@@ -116,18 +116,18 @@ class FBConnectSettingsAction extends ConnectSettingsAction
$this->elementStart('fieldset');
- $this->element('legend', null, _('Disconnect my account from Facebook'));
+ $this->element('legend', null, _m('Disconnect my account from Facebook'));
if (!$user->password) {
$this->elementStart('p', array('class' => 'form_guide'));
- $this->text(_('Disconnecting your Faceboook ' .
- 'would make it impossible to log in! Please '));
+ $this->text(_m('Disconnecting your Faceboook ' .
+ 'would make it impossible to log in! Please '));
$this->element('a',
array('href' => common_local_url('passwordsettings')),
- _('set a password'));
+ _m('set a password'));
- $this->text(_(' first.'));
+ $this->text(_m(' first.'));
$this->elementEnd('p');
} else {
@@ -139,7 +139,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
$this->element('p', 'instructions',
sprintf($note, $site, $site));
- $this->submit('disconnect', _('Disconnect'));
+ $this->submit('disconnect', _m('Disconnect'));
}
$this->elementEnd('fieldset');
@@ -161,8 +161,8 @@ class FBConnectSettingsAction extends ConnectSettingsAction
// CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
+ $this->showForm(_m('There was a problem with your session token. '.
+ 'Try again, please.'));
return;
}
@@ -175,7 +175,7 @@ class FBConnectSettingsAction extends ConnectSettingsAction
if ($result === false) {
common_log_db_error($user, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t delete link to Facebook.'));
+ $this->serverError(_m('Couldn\'t delete link to Facebook.'));
return;
}
@@ -191,10 +191,10 @@ class FBConnectSettingsAction extends ConnectSettingsAction
$e->getMessage());
}
- $this->showForm(_('You have disconnected from Facebook.'), true);
+ $this->showForm(_m('You have disconnected from Facebook.'), true);
} else {
- $this->showForm(_('Not sure what you\'re trying to do.'));
+ $this->showForm(_m('Not sure what you\'re trying to do.'));
return;
}
diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php
index 047477d9c..39b2ef287 100644
--- a/plugins/Facebook/FacebookPlugin.php
+++ b/plugins/Facebook/FacebookPlugin.php
@@ -185,7 +185,6 @@ class FacebookPlugin extends Plugin
// XXX: Facebook says we don't need this FB_RequireFeatures(),
// but we actually do, for IE and Safari. Gar.
- $js = '<script type="text/javascript">';
$js .= ' $(document).ready(function () {';
$js .= ' FB_RequireFeatures(';
$js .= ' ["XFBML"], function() {';
@@ -219,7 +218,6 @@ class FacebookPlugin extends Plugin
$js .= ' }';
$js .= ' );';
$js .= ' });';
- $js .= '</script>';
$js = sprintf($js, $apikey, $login_url, $logout_url);
@@ -227,7 +225,7 @@ class FacebookPlugin extends Plugin
$js = str_replace(' ', '', $js);
- $action->raw(" $js"); // leading two spaces to make it line up
+ $action->inlineScript($js);
}
}
@@ -408,9 +406,9 @@ class FacebookPlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('FBConnectLogin'),
- _('Facebook'),
- _('Login or register using Facebook'),
- 'FBConnectLogin' === $action_name);
+ _m('Facebook'),
+ _m('Login or register using Facebook'),
+ 'FBConnectLogin' === $action_name);
return true;
}
@@ -428,8 +426,8 @@ class FacebookPlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('FBConnectSettings'),
- _('Facebook'),
- _('Facebook Connect Settings'),
+ _m('Facebook'),
+ _m('Facebook Connect Settings'),
$action_name === 'FBConnectSettings');
return true;
diff --git a/plugins/Facebook/facebookaction.php b/plugins/Facebook/facebookaction.php
index c852bbf5e..705bb2780 100644
--- a/plugins/Facebook/facebookaction.php
+++ b/plugins/Facebook/facebookaction.php
@@ -44,7 +44,7 @@ class FacebookAction extends Action
var $app_uri = null;
var $app_name = null;
- function __construct($output='php://output', $indent=true, $facebook=null, $flink=null)
+ function __construct($output='php://output', $indent=null, $facebook=null, $flink=null)
{
parent::__construct($output, $indent);
@@ -168,7 +168,7 @@ class FacebookAction extends Action
$this->elementStart('li', array('class' =>
($this->action == 'facebookhome') ? 'current' : 'facebook_home'));
$this->element('a',
- array('href' => 'index.php', 'title' => _('Home')), _('Home'));
+ array('href' => 'index.php', 'title' => _m('Home')), _m('Home'));
$this->elementEnd('li');
if (common_config('invite', 'enabled')) {
@@ -176,7 +176,7 @@ class FacebookAction extends Action
array('class' =>
($this->action == 'facebookinvite') ? 'current' : 'facebook_invite'));
$this->element('a',
- array('href' => 'invite.php', 'title' => _('Invite')), _('Invite'));
+ array('href' => 'invite.php', 'title' => _m('Invite')), _m('Invite'));
$this->elementEnd('li');
}
@@ -185,7 +185,7 @@ class FacebookAction extends Action
($this->action == 'facebooksettings') ? 'current' : 'facebook_settings'));
$this->element('a',
array('href' => 'settings.php',
- 'title' => _('Settings')), _('Settings'));
+ 'title' => _m('Settings')), _m('Settings'));
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -225,15 +225,15 @@ class FacebookAction extends Action
$this->elementStart('dl', array('class' => 'system_notice'));
$this->element('dt', null, 'Page Notice');
- $loginmsg_part1 = _('To use the %s Facebook Application you need to login ' .
+ $loginmsg_part1 = _m('To use the %s Facebook Application you need to login ' .
'with your username and password. Don\'t have a username yet? ');
- $loginmsg_part2 = _(' a new account.');
+ $loginmsg_part2 = _m(' a new account.');
$this->elementStart('dd');
$this->elementStart('p');
$this->text(sprintf($loginmsg_part1, common_config('site', 'name')));
$this->element('a',
- array('href' => common_local_url('register')), _('Register'));
+ array('href' => common_local_url('register')), _m('Register'));
$this->text($loginmsg_part2);
$this->elementEnd('p');
$this->elementEnd('dd');
@@ -246,7 +246,7 @@ class FacebookAction extends Action
{
$this->elementStart('div', array('id' => 'content'));
- $this->element('h1', null, _('Login'));
+ $this->element('h1', null, _m('Login'));
if ($msg) {
$this->element('fb:error', array('message' => $msg));
@@ -265,20 +265,20 @@ class FacebookAction extends Action
$this->elementStart('ul', array('class' => 'form_datas'));
$this->elementStart('li');
- $this->input('nickname', _('Nickname'));
+ $this->input('nickname', _m('Nickname'));
$this->elementEnd('li');
$this->elementStart('li');
- $this->password('password', _('Password'));
+ $this->password('password', _m('Password'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('submit', _('Login'));
+ $this->submit('submit', _m('Login'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
$this->elementStart('p');
$this->element('a', array('href' => common_local_url('recoverpassword')),
- _('Lost or forgotten password?'));
+ _m('Lost or forgotten password?'));
$this->elementEnd('p');
$this->elementEnd('div');
@@ -383,7 +383,7 @@ class FacebookAction extends Action
// Does a little before-after block for next/prev page
if ($have_before || $have_after) {
$this->elementStart('dl', 'pagination');
- $this->element('dt', null, _('Pagination'));
+ $this->element('dt', null, _m('Pagination'));
$this->elementStart('dd', null);
$this->elementStart('ul', array('class' => 'nav'));
}
@@ -392,7 +392,7 @@ class FacebookAction extends Action
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->elementStart('li', array('class' => 'nav_prev'));
$this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'prev'),
- _('After'));
+ _m('After'));
$this->elementEnd('li');
}
if ($have_after) {
@@ -400,7 +400,7 @@ class FacebookAction extends Action
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->elementStart('li', array('class' => 'nav_next'));
$this->element('a', array('href' => "$this->app_uri/$action?page=$newargs[page]", 'rel' => 'next'),
- _('Before'));
+ _m('Before'));
$this->elementEnd('li');
}
if ($have_before || $have_after) {
@@ -418,13 +418,13 @@ class FacebookAction extends Action
$content = $this->trimmed('status_textarea');
if (!$content) {
- $this->showPage(_('No notice content!'));
+ $this->showPage(_m('No notice content!'));
return;
} else {
$content_shortened = common_shorten_links($content);
if (Notice::contentTooLong($content_shortened)) {
- $this->showPage(sprintf(_('That\'s too long. Max notice size is %d chars.'),
+ $this->showPage(sprintf(_m('That\'s too long. Max notice size is %d chars.'),
Notice::maxContent()));
return;
}
@@ -520,7 +520,7 @@ class FacebookNoticeList extends NoticeList
function show()
{
$this->out->elementStart('div', array('id' =>'notices_primary'));
- $this->out->element('h2', null, _('Notices'));
+ $this->out->element('h2', null, _m('Notices'));
$this->out->elementStart('ul', array('class' => 'notices'));
$cnt = 0;
diff --git a/plugins/Facebook/facebookhome.php b/plugins/Facebook/facebookhome.php
index ea141c2c2..60782f63c 100644
--- a/plugins/Facebook/facebookhome.php
+++ b/plugins/Facebook/facebookhome.php
@@ -108,7 +108,7 @@ class FacebookhomeAction extends FacebookAction
$user = User::staticGet('nickname', $nickname);
if (!$user) {
- $this->showLoginForm(_("Server error - couldn't get user!"));
+ $this->showLoginForm(_m("Server error - couldn't get user!"));
}
$flink = DB_DataObject::factory('foreign_link');
@@ -128,7 +128,7 @@ class FacebookhomeAction extends FacebookAction
return;
} else {
- $msg = _('Incorrect username or password.');
+ $msg = _m('Incorrect username or password.');
}
}
@@ -155,9 +155,9 @@ class FacebookhomeAction extends FacebookAction
function title()
{
if ($this->page > 1) {
- return sprintf(_("%s and friends, page %d"), $this->user->nickname, $this->page);
+ return sprintf(_m("%s and friends, page %d"), $this->user->nickname, $this->page);
} else {
- return sprintf(_("%s and friends"), $this->user->nickname);
+ return sprintf(_m("%s and friends"), $this->user->nickname);
}
}
@@ -186,7 +186,7 @@ class FacebookhomeAction extends FacebookAction
$this->elementStart('div', array('class' => 'facebook_guide'));
- $instructions = sprintf(_('If you would like the %s app to automatically update ' .
+ $instructions = sprintf(_m('If you would like the %s app to automatically update ' .
'your Facebook status with your latest notice, you need ' .
'to give it permission.'), $this->app_name);
@@ -210,13 +210,13 @@ class FacebookhomeAction extends FacebookAction
$this->elementStart('span', array('class' => 'facebook-button'));
$this->element('a', array('href' => $auth_url),
- sprintf(_('Okay, do it!'), $this->app_name));
+ sprintf(_m('Okay, do it!'), $this->app_name));
$this->elementEnd('span');
$this->elementEnd('li');
$this->elementStart('li', array('id' => 'fb-permissions-item'));
- $this->submit('skip', _('Skip'));
+ $this->submit('skip', _m('Skip'));
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -245,7 +245,7 @@ class FacebookhomeAction extends FacebookAction
if ($have_before || $have_after) {
$this->elementStart('dl', 'pagination');
- $this->element('dt', null, _('Pagination'));
+ $this->element('dt', null, _m('Pagination'));
$this->elementStart('dd', null);
$this->elementStart('ul', array('class' => 'nav'));
}
@@ -254,7 +254,7 @@ class FacebookhomeAction extends FacebookAction
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->elementStart('li', array('class' => 'nav_prev'));
$this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'prev'),
- _('After'));
+ _m('After'));
$this->elementEnd('li');
}
if ($have_after) {
@@ -262,7 +262,7 @@ class FacebookhomeAction extends FacebookAction
$newargs = $args ? array_merge($args, $pargs) : $pargs;
$this->elementStart('li', array('class' => 'nav_next'));
$this->element('a', array('href' => "$action?page=$newargs[page]", 'rel' => 'next'),
- _('Before'));
+ _m('Before'));
$this->elementEnd('li');
}
if ($have_before || $have_after) {
diff --git a/plugins/Facebook/facebookinvite.php b/plugins/Facebook/facebookinvite.php
index 3380b4c85..e02c7bf3e 100644
--- a/plugins/Facebook/facebookinvite.php
+++ b/plugins/Facebook/facebookinvite.php
@@ -69,9 +69,9 @@ class FacebookinviteAction extends FacebookAction
function showSuccessContent()
{
- $this->element('h2', null, sprintf(_('Thanks for inviting your friends to use %s'),
+ $this->element('h2', null, sprintf(_m('Thanks for inviting your friends to use %s'),
common_config('site', 'name')));
- $this->element('p', null, _('Invitations have been sent to the following users:'));
+ $this->element('p', null, _m('Invitations have been sent to the following users:'));
$friend_ids = $_POST['ids']; // XXX: Hmm... is this the best way to access the list?
@@ -91,7 +91,7 @@ class FacebookinviteAction extends FacebookAction
function showFormContent()
{
- $content = sprintf(_('You have been invited to %s'), common_config('site', 'name')) .
+ $content = sprintf(_m('You have been invited to %s'), common_config('site', 'name')) .
htmlentities('<fb:req-choice url="' . $this->app_uri . '" label="Add"/>');
$this->elementStart('fb:request-form', array('action' => 'invite.php',
@@ -100,7 +100,7 @@ class FacebookinviteAction extends FacebookAction
'type' => common_config('site', 'name'),
'content' => $content));
$this->hidden('invite', 'true');
- $actiontext = sprintf(_('Invite your friends to use %s'), common_config('site', 'name'));
+ $actiontext = sprintf(_m('Invite your friends to use %s'), common_config('site', 'name'));
$multi_params = array('showborder' => 'false');
$multi_params['actiontext'] = $actiontext;
@@ -122,7 +122,7 @@ class FacebookinviteAction extends FacebookAction
if ($exclude_ids) {
- $this->element('h2', null, sprintf(_('Friends already using %s:'),
+ $this->element('h2', null, sprintf(_m('Friends already using %s:'),
common_config('site', 'name')));
$this->elementStart('ul', array('id' => 'facebook-friends'));
@@ -140,7 +140,7 @@ class FacebookinviteAction extends FacebookAction
function title()
{
- return sprintf(_('Send invitations'));
+ return sprintf(_m('Send invitations'));
}
}
diff --git a/plugins/Facebook/facebooklogin.php b/plugins/Facebook/facebooklogin.php
index f77aecca3..7a173ddae 100644
--- a/plugins/Facebook/facebooklogin.php
+++ b/plugins/Facebook/facebooklogin.php
@@ -88,7 +88,7 @@ class FacebookinviteAction extends FacebookAction
function title()
{
- return sprintf(_('Login'));
+ return sprintf(_m('Login'));
}
function redirectHome()
diff --git a/plugins/Facebook/facebookremove.php b/plugins/Facebook/facebookremove.php
index 8531a8e6e..09cb33342 100644
--- a/plugins/Facebook/facebookremove.php
+++ b/plugins/Facebook/facebookremove.php
@@ -55,7 +55,7 @@ class FacebookremoveAction extends FacebookAction
if (!$result) {
common_log_db_error($flink, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t remove Facebook user.'));
+ $this->serverError(_m('Couldn\'t remove Facebook user.'));
return;
}
diff --git a/plugins/Facebook/facebooksettings.php b/plugins/Facebook/facebooksettings.php
index d1269f101..766d0e199 100644
--- a/plugins/Facebook/facebooksettings.php
+++ b/plugins/Facebook/facebooksettings.php
@@ -71,9 +71,9 @@ class FacebooksettingsAction extends FacebookAction
$trimmed);
if ($result === false) {
- $this->showForm(_('There was a problem saving your sync preferences!'));
+ $this->showForm(_m('There was a problem saving your sync preferences!'));
} else {
- $this->showForm(_('Sync preferences saved.'), true);
+ $this->showForm(_m('Sync preferences saved.'), true);
}
}
@@ -96,14 +96,14 @@ class FacebooksettingsAction extends FacebookAction
$this->elementStart('li');
- $this->checkbox('noticesync', _('Automatically update my Facebook status with my notices.'),
+ $this->checkbox('noticesync', _m('Automatically update my Facebook status with my notices.'),
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND) : true);
$this->elementEnd('li');
$this->elementStart('li');
- $this->checkbox('replysync', _('Send "@" replies to Facebook.'),
+ $this->checkbox('replysync', _m('Send "@" replies to Facebook.'),
($this->flink) ? ($this->flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) : true);
$this->elementEnd('li');
@@ -112,15 +112,15 @@ class FacebooksettingsAction extends FacebookAction
$prefix = trim($this->facebook->api_client->data_getUserPreference(FACEBOOK_NOTICE_PREFIX));
- $this->input('prefix', _('Prefix'),
+ $this->input('prefix', _m('Prefix'),
($prefix) ? $prefix : null,
- _('A string to prefix notices with.'));
+ _m('A string to prefix notices with.'));
$this->elementEnd('li');
$this->elementStart('li');
- $this->submit('save', _('Save'));
+ $this->submit('save', _m('Save'));
$this->elementEnd('li');
@@ -130,7 +130,7 @@ class FacebooksettingsAction extends FacebookAction
} else {
- $instructions = sprintf(_('If you would like %s to automatically update ' .
+ $instructions = sprintf(_m('If you would like %s to automatically update ' .
'your Facebook status with your latest notice, you need ' .
'to give it permission.'), $this->app_name);
@@ -143,7 +143,7 @@ class FacebooksettingsAction extends FacebookAction
$this->elementStart('fb:prompt-permission', array('perms' => 'publish_stream',
'next_fbjs' => 'document.setLocation(\'' . "$this->app_uri/settings.php" . '\')'));
$this->element('span', array('class' => 'facebook-button'),
- sprintf(_('Allow %s to update my Facebook status'), common_config('site', 'name')));
+ sprintf(_m('Allow %s to update my Facebook status'), common_config('site', 'name')));
$this->elementEnd('fb:prompt-permission');
$this->elementEnd('li');
$this->elementEnd('ul');
@@ -153,7 +153,7 @@ class FacebooksettingsAction extends FacebookAction
function title()
{
- return _('Sync preferences');
+ return _m('Sync preferences');
}
}
diff --git a/plugins/Facebook/facebookutil.php b/plugins/Facebook/facebookutil.php
index 6f50c173a..2ec6db6b8 100644
--- a/plugins/Facebook/facebookutil.php
+++ b/plugins/Facebook/facebookutil.php
@@ -168,7 +168,7 @@ function facebookBroadcastNotice($notice)
function updateProfileBox($facebook, $flink, $notice) {
$fbaction = new FacebookAction($output = 'php://output',
- $indent = true, $facebook, $flink);
+ $indent = null, $facebook, $flink);
$fbaction->updateProfileBox($notice);
}
@@ -277,10 +277,10 @@ function mail_facebook_app_removed($user)
$site_name = common_config('site', 'name');
$subject = sprintf(
- _('Your %1$s Facebook application access has been disabled.',
+ _m('Your %1$s Facebook application access has been disabled.',
$site_name));
- $body = sprintf(_("Hi, %1\$s. We're sorry to inform you that we are " .
+ $body = sprintf(_m("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 ' .
diff --git a/plugins/Facebook/locale/Facebook.po b/plugins/Facebook/locale/Facebook.po
new file mode 100644
index 000000000..5b313c8c5
--- /dev/null
+++ b/plugins/Facebook/locale/Facebook.po
@@ -0,0 +1,394 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: facebookaction.php:171
+msgid "Home"
+msgstr ""
+
+#: facebookaction.php:179
+msgid "Invite"
+msgstr ""
+
+#: facebookaction.php:188
+msgid "Settings"
+msgstr ""
+
+#: facebookaction.php:228
+#, 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:230
+msgid " a new account."
+msgstr ""
+
+#: facebookaction.php:236
+msgid "Register"
+msgstr ""
+
+#: facebookaction.php:249 facebookaction.php:275 facebooklogin.php:91
+msgid "Login"
+msgstr ""
+
+#: facebookaction.php:268
+msgid "Nickname"
+msgstr ""
+
+#: facebookaction.php:271 FBConnectAuth.php:196
+msgid "Password"
+msgstr ""
+
+#: facebookaction.php:281
+msgid "Lost or forgotten password?"
+msgstr ""
+
+#: facebookaction.php:386 facebookhome.php:248
+msgid "Pagination"
+msgstr ""
+
+#: facebookaction.php:395 facebookhome.php:257
+msgid "After"
+msgstr ""
+
+#: facebookaction.php:403 facebookhome.php:265
+msgid "Before"
+msgstr ""
+
+#: facebookaction.php:421
+msgid "No notice content!"
+msgstr ""
+
+#: facebookaction.php:427
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr ""
+
+#: facebookaction.php:523
+msgid "Notices"
+msgstr ""
+
+#: facebookutil.php:280
+#, php-format
+msgid "Your %1$s Facebook application access has been disabled."
+msgstr ""
+
+#: facebookutil.php:283
+#, php-format
+msgid ""
+"Hi, %1$s. We're sorry to inform you that we are unable to update your "
+"Facebook status from %2$s, and have disabled the Facebook application for "
+"your account. This may be because you have removed the Facebook "
+"application's authorization, or have deleted your Facebook account. You can "
+"re-enable the Facebook application and automatic status updating by re-"
+"installing the %2$s Facebook application.\n"
+"\n"
+"Regards,\n"
+"\n"
+"%2$s"
+msgstr ""
+
+#: FBConnectLogin.php:33
+msgid "Already logged in."
+msgstr ""
+
+#: FBConnectLogin.php:41
+msgid "Login with your Facebook Account"
+msgstr ""
+
+#: FBConnectLogin.php:55
+msgid "Facebook Login"
+msgstr ""
+
+#: facebookhome.php:111
+msgid "Server error - couldn't get user!"
+msgstr ""
+
+#: facebookhome.php:131
+msgid "Incorrect username or password."
+msgstr ""
+
+#: facebookhome.php:158
+#, php-format
+msgid "%s and friends, page %d"
+msgstr ""
+
+#: facebookhome.php:160
+#, php-format
+msgid "%s and friends"
+msgstr ""
+
+#: facebookhome.php:189
+#, php-format
+msgid ""
+"If you would like the %s app to automatically update your Facebook status "
+"with your latest notice, you need to give it permission."
+msgstr ""
+
+#: facebookhome.php:213
+msgid "Okay, do it!"
+msgstr ""
+
+#: facebookhome.php:219
+msgid "Skip"
+msgstr ""
+
+#: facebooksettings.php:74
+msgid "There was a problem saving your sync preferences!"
+msgstr ""
+
+#: facebooksettings.php:76
+msgid "Sync preferences saved."
+msgstr ""
+
+#: facebooksettings.php:99
+msgid "Automatically update my Facebook status with my notices."
+msgstr ""
+
+#: facebooksettings.php:106
+msgid "Send \"@\" replies to Facebook."
+msgstr ""
+
+#: facebooksettings.php:115
+msgid "Prefix"
+msgstr ""
+
+#: facebooksettings.php:117
+msgid "A string to prefix notices with."
+msgstr ""
+
+#: facebooksettings.php:123
+msgid "Save"
+msgstr ""
+
+#: facebooksettings.php:133
+#, php-format
+msgid ""
+"If you would like %s to automatically update your Facebook status with your "
+"latest notice, you need to give it permission."
+msgstr ""
+
+#: facebooksettings.php:146
+#, php-format
+msgid "Allow %s to update my Facebook status"
+msgstr ""
+
+#: facebooksettings.php:156
+msgid "Sync preferences"
+msgstr ""
+
+#: facebookinvite.php:72
+#, php-format
+msgid "Thanks for inviting your friends to use %s"
+msgstr ""
+
+#: facebookinvite.php:74
+msgid "Invitations have been sent to the following users:"
+msgstr ""
+
+#: facebookinvite.php:94
+#, php-format
+msgid "You have been invited to %s"
+msgstr ""
+
+#: facebookinvite.php:103
+#, php-format
+msgid "Invite your friends to use %s"
+msgstr ""
+
+#: facebookinvite.php:125
+#, php-format
+msgid "Friends already using %s:"
+msgstr ""
+
+#: facebookinvite.php:143
+msgid "Send invitations"
+msgstr ""
+
+#: facebookremove.php:58
+msgid "Couldn't remove Facebook user."
+msgstr ""
+
+#: FBConnectSettings.php:56 FacebookPlugin.php:430
+msgid "Facebook Connect Settings"
+msgstr ""
+
+#: FBConnectSettings.php:67
+msgid "Manage how your account connects to Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:92
+msgid "There is no Facebook user connected to this account."
+msgstr ""
+
+#: FBConnectSettings.php:100
+msgid "Connected Facebook user"
+msgstr ""
+
+#: FBConnectSettings.php:119
+msgid "Disconnect my account from Facebook"
+msgstr ""
+
+#: FBConnectSettings.php:124
+msgid ""
+"Disconnecting your Faceboook would make it impossible to log in! Please "
+msgstr ""
+
+#: FBConnectSettings.php:128
+msgid "set a password"
+msgstr ""
+
+#: FBConnectSettings.php:130
+msgid " first."
+msgstr ""
+
+#: FBConnectSettings.php:142
+msgid "Disconnect"
+msgstr ""
+
+#: FBConnectSettings.php:164 FBConnectAuth.php:90
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: FBConnectSettings.php:178
+msgid "Couldn't delete link to Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:194
+msgid "You have disconnected from Facebook."
+msgstr ""
+
+#: FBConnectSettings.php:197
+msgid "Not sure what you're trying to do."
+msgstr ""
+
+#: FBConnectAuth.php:51
+msgid "You must be logged into Facebook to use Facebook Connect."
+msgstr ""
+
+#: FBConnectAuth.php:77
+msgid "There is already a local user linked with this Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:95
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: FBConnectAuth.php:105
+msgid "Something weird happened."
+msgstr ""
+
+#: FBConnectAuth.php:119
+#, 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 ""
+
+#: FBConnectAuth.php:125
+msgid "Facebook Account Setup"
+msgstr ""
+
+#: FBConnectAuth.php:153
+msgid "Connection options"
+msgstr ""
+
+#: FBConnectAuth.php:162
+msgid "My text and files are available under "
+msgstr ""
+
+#: FBConnectAuth.php:165
+msgid ""
+" except this private data: password, email address, IM address, phone number."
+msgstr ""
+
+#: FBConnectAuth.php:173
+msgid "Create new account"
+msgstr ""
+
+#: FBConnectAuth.php:175
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: FBConnectAuth.php:178
+msgid "New nickname"
+msgstr ""
+
+#: FBConnectAuth.php:180
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: FBConnectAuth.php:183
+msgid "Create"
+msgstr ""
+
+#: FBConnectAuth.php:188
+msgid "Connect existing account"
+msgstr ""
+
+#: FBConnectAuth.php:190
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:193
+msgid "Existing nickname"
+msgstr ""
+
+#: FBConnectAuth.php:199
+msgid "Connect"
+msgstr ""
+
+#: FBConnectAuth.php:215 FBConnectAuth.php:224
+msgid "Registration not allowed."
+msgstr ""
+
+#: FBConnectAuth.php:231
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: FBConnectAuth.php:241
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: FBConnectAuth.php:246
+msgid "Nickname not allowed."
+msgstr ""
+
+#: FBConnectAuth.php:251
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: FBConnectAuth.php:269 FBConnectAuth.php:303 FBConnectAuth.php:323
+msgid "Error connecting user to Facebook."
+msgstr ""
+
+#: FBConnectAuth.php:289
+msgid "Invalid username or password."
+msgstr ""
+
+#: FacebookPlugin.php:409 FacebookPlugin.php:429
+msgid "Facebook"
+msgstr ""
+
+#: FacebookPlugin.php:410
+msgid "Login or register using Facebook"
+msgstr ""
diff --git a/plugins/FeedSub/FeedSubPlugin.php b/plugins/FeedSub/FeedSubPlugin.php
index 36d4e7802..857a9794d 100644
--- a/plugins/FeedSub/FeedSubPlugin.php
+++ b/plugins/FeedSub/FeedSubPlugin.php
@@ -51,7 +51,6 @@ class FeedSubPlugin extends Plugin
* @param Net_URL_Mapper $m path-to-action mapper
* @return boolean hook return
*/
-
function onRouterInitialized($m)
{
$m->connect('feedsub/callback/:feed',
@@ -74,8 +73,8 @@ class FeedSubPlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('feedsubsettings'),
- dgettext('FeebSubPlugin', 'Feeds'),
- dgettext('FeedSubPlugin', 'Feed subscription options'),
+ _m('Feeds'),
+ _m('Feed subscription options'),
$action_name === 'feedsubsettings');
return true;
diff --git a/plugins/FeedSub/actions/feedsubsettings.php b/plugins/FeedSub/actions/feedsubsettings.php
index 242224fac..0fba20a39 100644
--- a/plugins/FeedSub/actions/feedsubsettings.php
+++ b/plugins/FeedSub/actions/feedsubsettings.php
@@ -38,7 +38,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
function title()
{
- return dgettext('FeedSubPlugin', 'Feed subscriptions');
+ return _m('Feed subscriptions');
}
/**
@@ -49,9 +49,8 @@ class FeedSubSettingsAction extends ConnectSettingsAction
function getInstructions()
{
- return dgettext('FeedSubPlugin',
- 'You can subscribe to feeds from other sites; ' .
- 'updates will appear in your personal timeline.');
+ return _m('You can subscribe to feeds from other sites; ' .
+ 'updates will appear in your personal timeline.');
}
/**
@@ -94,9 +93,9 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$this->elementEnd('ul');
if ($this->preview) {
- $this->submit('subscribe', dgettext('FeedSubPlugin', 'Subscribe'));
+ $this->submit('subscribe', _m('Subscribe'));
} else {
- $this->submit('validate', dgettext('FeedSubPlugin', 'Continue'));
+ $this->submit('validate', _m('Continue'));
}
$this->elementEnd('fieldset');
@@ -149,8 +148,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$feedurl = trim($this->arg('feedurl'));
if ($feedurl == '') {
- $this->showForm(dgettext('FeedSubPlugin',
- 'Empty feed URL!'));
+ $this->showForm(_m('Empty feed URL!'));
return;
}
$this->feedurl = $feedurl;
@@ -160,26 +158,26 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$discover = new FeedDiscovery();
$uri = $discover->discoverFromURL($feedurl);
} catch (FeedSubBadURLException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Invalid URL or could not reach server.'));
+ $this->showForm(_m('Invalid URL or could not reach server.'));
return false;
} catch (FeedSubBadResponseException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned error.'));
+ $this->showForm(_m('Cannot read feed; server returned error.'));
return false;
} catch (FeedSubEmptyException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Cannot read feed; server returned an empty page.'));
+ $this->showForm(_m('Cannot read feed; server returned an empty page.'));
return false;
} catch (FeedSubBadHTMLException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Bad HTML, could not find feed link.'));
+ $this->showForm(_m('Bad HTML, could not find feed link.'));
return false;
} catch (FeedSubNoFeedException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Could not find a feed linked from this URL.'));
+ $this->showForm(_m('Could not find a feed linked from this URL.'));
return false;
} catch (FeedSubUnrecognizedTypeException $e) {
- $this->showForm(dgettext('FeedSubPlugin', 'Not a recognized feed type.'));
+ $this->showForm(_m('Not a recognized feed type.'));
return false;
} catch (FeedSubException $e) {
// Any new ones we forgot about
- $this->showForm(dgettext('FeedSubPlugin', 'Bad feed URL.'));
+ $this->showForm(_m('Bad feed URL.'));
return false;
}
@@ -187,7 +185,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$this->feedinfo = $this->munger->feedInfo();
if ($this->feedinfo->huburi == '') {
- $this->showForm(dgettext('FeedSubPlugin', 'Feed is not PuSH-enabled; cannot subscribe.'));
+ $this->showForm(_m('Feed is not PuSH-enabled; cannot subscribe.'));
return false;
}
@@ -207,7 +205,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$ok = $this->feedinfo->subscribe();
common_log(LOG_INFO, __METHOD__ . ": sub was $ok");
if (!$ok) {
- $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed! Bad response from hub.'));
+ $this->showForm(_m('Feed subscription failed! Bad response from hub.'));
return;
}
}
@@ -217,11 +215,11 @@ class FeedSubSettingsAction extends ConnectSettingsAction
$profile = $this->feedinfo->getProfile();
if ($user->isSubscribed($profile)) {
- $this->showForm(dgettext('FeedSubPlugin', 'Already subscribed!'));
+ $this->showForm(_m('Already subscribed!'));
} elseif ($user->subscribeTo($profile)) {
- $this->showForm(dgettext('FeedSubPlugin', 'Feed subscribed!'));
+ $this->showForm(_m('Feed subscribed!'));
} else {
- $this->showForm(dgettext('FeedSubPlugin', 'Feed subscription failed!'));
+ $this->showForm(_m('Feed subscription failed!'));
}
}
}
@@ -230,7 +228,7 @@ class FeedSubSettingsAction extends ConnectSettingsAction
{
if ($this->validateFeed()) {
$this->preview = true;
- $this->showForm(dgettext('FeedSubPlugin', 'Previewing feed:'));
+ $this->showForm(_m('Previewing feed:'));
}
}
diff --git a/plugins/FeedSub/feedmunger.php b/plugins/FeedSub/feedmunger.php
index bb8075da9..f3618b8eb 100644
--- a/plugins/FeedSub/feedmunger.php
+++ b/plugins/FeedSub/feedmunger.php
@@ -212,7 +212,7 @@ class FeedMunger
// try adding #hashtags from the categories/tags on a post.
// @todo Should we force a language here?
- $format = dgettext("FeedSubPlugin", 'New post: "%1$s" %2$s');
+ $format = _m('New post: "%1$s" %2$s');
$title = $entry->title;
$link = $this->getAltLink($entry);
$out = sprintf($format, $title, $link);
diff --git a/plugins/FeedSub/locale/FeedSub.po b/plugins/FeedSub/locale/FeedSub.po
new file mode 100644
index 000000000..dedc018e3
--- /dev/null
+++ b/plugins/FeedSub/locale/FeedSub.po
@@ -0,0 +1,104 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: tests/gettext-speedtest.php:57 FeedSubPlugin.php:76
+msgid "Feeds"
+msgstr ""
+
+#: FeedSubPlugin.php:77
+msgid "Feed subscription options"
+msgstr ""
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr ""
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr ""
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr ""
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr ""
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
new file mode 100644
index 000000000..f17dfa50a
--- /dev/null
+++ b/plugins/FeedSub/locale/fr/LC_MESSAGES/FeedSub.po
@@ -0,0 +1,106 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 14:14-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: FeedSubPlugin.php:77
+msgid "Feeds"
+msgstr "Flux"
+
+#: FeedSubPlugin.php:78
+msgid "Feed subscription options"
+msgstr "Préférences pour abonnement flux"
+
+#: feedmunger.php:215
+#, php-format
+msgid "New post: \"%1$s\" %2$s"
+msgstr "Nouveau: \"%1$s\" %2$s"
+
+#: actions/feedsubsettings.php:41
+msgid "Feed subscriptions"
+msgstr "Abonnements aux fluxes"
+
+#: actions/feedsubsettings.php:52
+msgid ""
+"You can subscribe to feeds from other sites; updates will appear in your "
+"personal timeline."
+msgstr ""
+"Abonner aux fluxes RSS ou Atom des autres sites web; les temps se trouverair"
+"en votre flux personnel."
+
+#: actions/feedsubsettings.php:96
+msgid "Subscribe"
+msgstr "Abonner"
+
+#: actions/feedsubsettings.php:98
+msgid "Continue"
+msgstr "Prochaine"
+
+#: actions/feedsubsettings.php:151
+msgid "Empty feed URL!"
+msgstr ""
+
+#: actions/feedsubsettings.php:161
+msgid "Invalid URL or could not reach server."
+msgstr ""
+
+#: actions/feedsubsettings.php:164
+msgid "Cannot read feed; server returned error."
+msgstr ""
+
+#: actions/feedsubsettings.php:167
+msgid "Cannot read feed; server returned an empty page."
+msgstr ""
+
+#: actions/feedsubsettings.php:170
+msgid "Bad HTML, could not find feed link."
+msgstr ""
+
+#: actions/feedsubsettings.php:173
+msgid "Could not find a feed linked from this URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:176
+msgid "Not a recognized feed type."
+msgstr ""
+
+#: actions/feedsubsettings.php:180
+msgid "Bad feed URL."
+msgstr ""
+
+#: actions/feedsubsettings.php:188
+msgid "Feed is not PuSH-enabled; cannot subscribe."
+msgstr ""
+
+#: actions/feedsubsettings.php:208
+msgid "Feed subscription failed! Bad response from hub."
+msgstr ""
+
+#: actions/feedsubsettings.php:218
+msgid "Already subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:220
+msgid "Feed subscribed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:222
+msgid "Feed subscription failed!"
+msgstr ""
+
+#: actions/feedsubsettings.php:231
+msgid "Previewing feed:"
+msgstr ""
diff --git a/plugins/FeedSub/tests/gettext-speedtest.php b/plugins/FeedSub/tests/gettext-speedtest.php
new file mode 100644
index 000000000..8bbdf5e89
--- /dev/null
+++ b/plugins/FeedSub/tests/gettext-speedtest.php
@@ -0,0 +1,78 @@
+<?php
+
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+define('STATUSNET', true);
+define('LACONICA', true);
+
+require_once INSTALLDIR . '/scripts/commandline.inc';
+require_once INSTALLDIR . '/extlib/php-gettext/gettext.inc';
+
+common_init_locale("en_US");
+common_init_locale('fr');
+
+
+putenv("LANG=fr");
+putenv("LANGUAGE=fr");
+setlocale('fr.utf8');
+_setlocale('fr.utf8');
+
+_bindtextdomain("statusnet", INSTALLDIR . '/locale');
+_bindtextdomain("FeedSub", INSTALLDIR . '/plugins/FeedSub/locale');
+
+$times = 10000;
+$delta = array();
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = _("Send");
+}
+$delta["_"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = __("Send");
+}
+$delta["__"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = dgettext("FeedSub", "Feeds");
+}
+$delta["dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = _dgettext("FeedSub", "Feeds");
+}
+$delta["_dgettext"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = _m("Feeds");
+}
+$delta["_m"] = array((microtime(true) - $start) / $times, $result);
+
+
+$start = microtime(true);
+for($i = 0; $i < $times; $i++) {
+ $result = fake("Feeds");
+}
+$delta["fake"] = array((microtime(true) - $start) / $times, $result);
+
+foreach ($delta as $func => $bits) {
+ list($time, $result) = $bits;
+ $ms = $time * 1000.0;
+ printf("%10s %2.4fms %s\n", $func, $ms, $result);
+}
+
+
+function fake($str) {
+ return $str;
+}
+
diff --git a/plugins/FirePHP/FirePHPPlugin.php b/plugins/FirePHP/FirePHPPlugin.php
new file mode 100644
index 000000000..37b397796
--- /dev/null
+++ b/plugins/FirePHP/FirePHPPlugin.php
@@ -0,0 +1,59 @@
+<?php
+/*
+StatusNet Plugin: 0.9
+Plugin Name: FirePHP
+Description: Sends StatusNet log output to FirePHP
+Version: 0.1
+Author: Craig Andrews <candrews@integralblue.com>
+Author URI: http://candrews.integralblue.com/
+*/
+
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package MinifyPlugin
+ * @maintainer Craig Andrews <candrews@integralblue.com>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+// We bundle the FirePHP library...
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/FirePHP/lib');
+
+class FirePHPPlugin extends Plugin
+{
+ private $firephp;
+
+ function onInitializePlugin()
+ {
+ //Output buffering has to be enabled so FirePHP can send the HTTP headers it needs
+ ob_start();
+ require_once('FirePHPCore/FirePHP.class.php');
+ $this->firephp = FirePHP::getInstance(true);
+ }
+
+ function onStartLog(&$priority, &$msg, &$filename)
+ {
+ static $firephp_priorities = array(FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR, FirePHP::ERROR,
+ FirePHP::WARN, FirePHP::LOG, FirePHP::LOG, FirePHP::INFO);
+ $priority = $firephp_priorities[$priority];
+ $this->firephp->fb($msg, $priority);
+ }
+}
+
diff --git a/plugins/FirePHP/README b/plugins/FirePHP/README
new file mode 100644
index 000000000..ee22794d5
--- /dev/null
+++ b/plugins/FirePHP/README
@@ -0,0 +1,21 @@
+The FirePHP writes StatusNet's log output to FirePHP.
+
+Using FirePHP on production sites can expose sensitive information.
+ You must protect the security of your application by disabling FirePHP
+ logging on your live site.
+
+Installation
+============
+add "addPlugin('FirePHP',
+ array('setting'=>'value', 'setting2'=>'value2', ...);"
+to the bottom of your config.php
+
+Settings
+========
+None at the moment.
+
+Example
+=======
+
+addPlugin('FirePHP', array());
+
diff --git a/plugins/FirePHP/extlib/FirePHP/CHANGELOG b/plugins/FirePHP/extlib/FirePHP/CHANGELOG
new file mode 100644
index 000000000..619198079
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/CHANGELOG
@@ -0,0 +1,110 @@
+
+2008-06-14 - Release Version: 0.3.1
+
+ - (Issue 108) ignore class name case in object filter
+
+2009-05-11 - Release Version: 0.3
+2009-05-01 - Release Version: 0.3.rc.1
+
+ - (Issue 90) PHP4 compatible version of FirePHPCore
+ - (Issue 98) Thrown exceptions don't send an HTTP 500 if the FirePHP exception handler is enabled
+ - (Issue 85) Support associative arrays in encodeTable method in FirePHP.class.php
+ - (Issue 66) Add a new getOptions() public method in API
+ - (Issue 82) Define $this->options outside of __construct
+ - (Issue 72) Message error if group name is null
+ - (Issue 68) registerErrorHandler() and registerExceptionHandler() should returns previous handlers defined
+ - (Issue 69) Add the missing register handler in the triumvirate (error, exception, assert)
+ - (Issue 75) [Error & Exception Handling] Option to not exit script execution
+ - (Issue 83) Exception handler can't throw exceptions
+ - (Issue 80) Auto/Pre collapsing groups AND Custom group row colors
+
+2008-11-09 - Release Version: 0.2.1
+
+ - (Issue 70) Problem when logging resources
+
+2008-10-21 - Release Version: 0.2.0
+
+ - Updated version to 0.2.0
+ - Switched to using __sleep instead of __wakeup
+ - Added support to exclude object members when encoding
+ - Add support to enable/disable logging
+
+2008-10-17 - Release Version: 0.2.b.8
+
+ - New implementation for is_utf8()
+ - (Issue 55) maxObjectDepth Option not working correctly when using TABLE and EXCEPTION Type
+ - Bugfix for max[Object|Array]Depth when encoding nested array/object graphs
+ - Bugfix for FB::setOptions()
+
+2008-10-16 - Release Version: 0.2.b.7
+
+ - (Issue 45) Truncate dump when string have non utf8 cars
+ - (Issue 52) logging will not work when firephp object gets stored in the session.
+
+2008-10-16 - Release Version: 0.2.b.6
+
+ - (Issue 37) Display file and line information for each log message
+ - (Issue 51) Limit output of object graphs
+ - Bugfix for encoding object members set to NULL|false|''
+
+2008-10-14 - Release Version: 0.2.b.5
+
+ - Updated JsonStream wildfire protocol to be more robust
+ - (Issue 33) PHP error notices running demos
+ - (Issue 48) Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given
+
+2008-10-08 - Release Version: 0.2.b.4
+
+ - Bugfix for logging objects with recursion
+
+2008-10-08 - Release Version: 0.2.b.3
+
+ - (Issue 43) Notice message in 0.2b2
+ - Added support for PHP's native json_encode() if available
+ - Revised object encoder to detect object recursion
+
+2008-10-07 - Release Version: 0.2.b.2
+
+ - (Issue 28) Need solution for logging private and protected object variables
+ - Added trace() and table() aliases in FirePHP class
+ - (Issue 41) Use PHP doc in FirePHP
+ - (Issue 39) Static logging method for object oriented API
+
+2008-10-01 - Release Version: 0.2.b.1
+
+ - Added support for error and exception handling
+ - Updated min PHP version for PEAR package to 5.2
+ - Added version constant for library
+ - Gave server library it's own wildfire plugin namespace
+ - Migrated communication protocol to Wildfire JsonStream
+ - Added support for console groups using "group" and "groupEnd"
+ - Added support for log, info, warn and error logging aliases
+ - (Issue 29) problem with TRACE when using with error_handler
+ - (Issue 33) PHP error notices running demos
+ - (Issue 12) undefined index php notice
+ - Removed closing ?> php tags
+ - (Issue 13) the code in the fb() function has a second return statement that will never be reached
+
+2008-07-30 - Release Version: 0.1.1.3
+
+ - Include __className property in JSON string if variable was an object
+ - Bugfix - Mis-spelt "Exception" in JSON encoding code
+
+2008-06-13 - Release Version: 0.1.1.1
+
+ - Bugfix - Standardize windows paths in stack traces
+ - Bugfix - Display correct stack trace info in windows environments
+ - Bugfix - Check $_SERVER['HTTP_USER_AGENT'] before returning
+
+2008-06-13 - Release Version: 0.1.1
+
+ - Added support for FirePHP::TRACE log style
+ - Changed license to New BSD License
+
+2008-06-06 - Release Version: 0.0.2
+
+ - Bugfix - Added usleep() to header writing loop to ensure unique index
+ - Bugfix - Ensure chunk_split does not generate trailing "\n" with empty data header
+ - Added support for FirePHP::TABLE log style
+
+ \ No newline at end of file
diff --git a/plugins/FirePHP/extlib/FirePHP/CREDITS b/plugins/FirePHP/extlib/FirePHP/CREDITS
new file mode 100644
index 000000000..5f0d463d1
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/CREDITS
@@ -0,0 +1,12 @@
+ _______________________________
+ F i r e P H P C o r e
+
+ Current Development
+ -------------------
+
+ Christoph Dorn <christoph@christophdorn.com>
+ Michael Day <manveru.alma@gmail.com>
+
+ If you've done work on FirePHPCore and you are not listed here,
+ please feel free to add yourself.
+
diff --git a/plugins/FirePHP/extlib/FirePHP/README b/plugins/FirePHP/extlib/FirePHP/README
new file mode 100644
index 000000000..033719fae
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/README
@@ -0,0 +1,32 @@
+
+Version: 0.3.1
+
+------------------------------------------------------
+ Requirements
+------------------------------------------------------
+
+Client Side:
+
+ - Firefox - http://www.getfirefox.com/
+ - Firebug - http://www.getfirebug.com/
+ - FirePHP - http://www.firephp.org/
+
+Server Side:
+
+ - PHP 5 (complete functionality)
+ - PHP 4 (most functionality)
+
+
+------------------------------------------------------
+ Install Tutorial
+------------------------------------------------------
+
+ http://www.firephp.org/HQ/Install.htm
+
+
+------------------------------------------------------
+ Support
+------------------------------------------------------
+
+ http://forum.firephp.org/
+
diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php
new file mode 100644
index 000000000..d8ae13f34
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php
@@ -0,0 +1,1529 @@
+<?php
+/**
+ * *** BEGIN LICENSE BLOCK *****
+ *
+ * This file is part of FirePHP (http://www.firephp.org/).
+ *
+ * Software License Agreement (New BSD License)
+ *
+ * Copyright (c) 2006-2009, Christoph Dorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Christoph Dorn nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+
+
+/**
+ * Sends the given data to the FirePHP Firefox Extension.
+ * The data can be displayed in the Firebug Console or in the
+ * "Server" request tab.
+ *
+ * For more information see: http://www.firephp.org/
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+class FirePHP {
+
+ /**
+ * FirePHP version
+ *
+ * @var string
+ */
+ const VERSION = '0.3';
+
+ /**
+ * Firebug LOG level
+ *
+ * Logs a message to firebug console.
+ *
+ * @var string
+ */
+ const LOG = 'LOG';
+
+ /**
+ * Firebug INFO level
+ *
+ * Logs a message to firebug console and displays an info icon before the message.
+ *
+ * @var string
+ */
+ const INFO = 'INFO';
+
+ /**
+ * Firebug WARN level
+ *
+ * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise.
+ *
+ * @var string
+ */
+ const WARN = 'WARN';
+
+ /**
+ * Firebug ERROR level
+ *
+ * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
+ *
+ * @var string
+ */
+ const ERROR = 'ERROR';
+
+ /**
+ * Dumps a variable to firebug's server panel
+ *
+ * @var string
+ */
+ const DUMP = 'DUMP';
+
+ /**
+ * Displays a stack trace in firebug console
+ *
+ * @var string
+ */
+ const TRACE = 'TRACE';
+
+ /**
+ * Displays an exception in firebug console
+ *
+ * Increments the firebug error count.
+ *
+ * @var string
+ */
+ const EXCEPTION = 'EXCEPTION';
+
+ /**
+ * Displays an table in firebug console
+ *
+ * @var string
+ */
+ const TABLE = 'TABLE';
+
+ /**
+ * Starts a group in firebug console
+ *
+ * @var string
+ */
+ const GROUP_START = 'GROUP_START';
+
+ /**
+ * Ends a group in firebug console
+ *
+ * @var string
+ */
+ const GROUP_END = 'GROUP_END';
+
+ /**
+ * Singleton instance of FirePHP
+ *
+ * @var FirePHP
+ */
+ protected static $instance = null;
+
+ /**
+ * Flag whether we are logging from within the exception handler
+ *
+ * @var boolean
+ */
+ protected $inExceptionHandler = false;
+
+ /**
+ * Flag whether to throw PHP errors that have been converted to ErrorExceptions
+ *
+ * @var boolean
+ */
+ protected $throwErrorExceptions = true;
+
+ /**
+ * Flag whether to convert PHP assertion errors to Exceptions
+ *
+ * @var boolean
+ */
+ protected $convertAssertionErrorsToExceptions = true;
+
+ /**
+ * Flag whether to throw PHP assertion errors that have been converted to Exceptions
+ *
+ * @var boolean
+ */
+ protected $throwAssertionExceptions = false;
+
+ /**
+ * Wildfire protocol message index
+ *
+ * @var int
+ */
+ protected $messageIndex = 1;
+
+ /**
+ * Options for the library
+ *
+ * @var array
+ */
+ protected $options = array('maxObjectDepth' => 10,
+ 'maxArrayDepth' => 20,
+ 'useNativeJsonEncode' => true,
+ 'includeLineNumbers' => true);
+
+ /**
+ * Filters used to exclude object members when encoding
+ *
+ * @var array
+ */
+ protected $objectFilters = array();
+
+ /**
+ * A stack of objects used to detect recursion during object encoding
+ *
+ * @var object
+ */
+ protected $objectStack = array();
+
+ /**
+ * Flag to enable/disable logging
+ *
+ * @var boolean
+ */
+ protected $enabled = true;
+
+ /**
+ * The object constructor
+ */
+ function __construct() {
+ }
+
+ /**
+ * When the object gets serialized only include specific object members.
+ *
+ * @return array
+ */
+ public function __sleep() {
+ return array('options','objectFilters','enabled');
+ }
+
+ /**
+ * Gets singleton instance of FirePHP
+ *
+ * @param boolean $AutoCreate
+ * @return FirePHP
+ */
+ public static function getInstance($AutoCreate=false) {
+ if($AutoCreate===true && !self::$instance) {
+ self::init();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Creates FirePHP object and stores it for singleton access
+ *
+ * @return FirePHP
+ */
+ public static function init() {
+ return self::$instance = new self();
+ }
+
+ /**
+ * Enable and disable logging to Firebug
+ *
+ * @param boolean $Enabled TRUE to enable, FALSE to disable
+ * @return void
+ */
+ public function setEnabled($Enabled) {
+ $this->enabled = $Enabled;
+ }
+
+ /**
+ * Check if logging is enabled
+ *
+ * @return boolean TRUE if enabled
+ */
+ public function getEnabled() {
+ return $this->enabled;
+ }
+
+ /**
+ * Specify a filter to be used when encoding an object
+ *
+ * Filters are used to exclude object members.
+ *
+ * @param string $Class The class name of the object
+ * @param array $Filter An array of members to exclude
+ * @return void
+ */
+ public function setObjectFilter($Class, $Filter) {
+ $this->objectFilters[strtolower($Class)] = $Filter;
+ }
+
+ /**
+ * Set some options for the library
+ *
+ * Options:
+ * - maxObjectDepth: The maximum depth to traverse objects (default: 10)
+ * - maxArrayDepth: The maximum depth to traverse arrays (default: 20)
+ * - useNativeJsonEncode: If true will use json_encode() (default: true)
+ * - includeLineNumbers: If true will include line numbers and filenames (default: true)
+ *
+ * @param array $Options The options to be set
+ * @return void
+ */
+ public function setOptions($Options) {
+ $this->options = array_merge($this->options,$Options);
+ }
+
+ /**
+ * Get options from the library
+ *
+ * @return array The currently set options
+ */
+ public function getOptions() {
+ return $this->options;
+ }
+
+ /**
+ * Register FirePHP as your error handler
+ *
+ * Will throw exceptions for each php error.
+ *
+ * @return mixed Returns a string containing the previously defined error handler (if any)
+ */
+ public function registerErrorHandler($throwErrorExceptions=true)
+ {
+ //NOTE: The following errors will not be caught by this error handler:
+ // E_ERROR, E_PARSE, E_CORE_ERROR,
+ // E_CORE_WARNING, E_COMPILE_ERROR,
+ // E_COMPILE_WARNING, E_STRICT
+
+ $this->throwErrorExceptions = $throwErrorExceptions;
+
+ return set_error_handler(array($this,'errorHandler'));
+ }
+
+ /**
+ * FirePHP's error handler
+ *
+ * Throws exception for each php error that will occur.
+ *
+ * @param int $errno
+ * @param string $errstr
+ * @param string $errfile
+ * @param int $errline
+ * @param array $errcontext
+ */
+ public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
+ {
+ // Don't throw exception if error reporting is switched off
+ if (error_reporting() == 0) {
+ return;
+ }
+ // Only throw exceptions for errors we are asking for
+ if (error_reporting() & $errno) {
+
+ $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline);
+ if($this->throwErrorExceptions) {
+ throw $exception;
+ } else {
+ $this->fb($exception);
+ }
+ }
+ }
+
+ /**
+ * Register FirePHP as your exception handler
+ *
+ * @return mixed Returns the name of the previously defined exception handler,
+ * or NULL on error.
+ * If no previous handler was defined, NULL is also returned.
+ */
+ public function registerExceptionHandler()
+ {
+ return set_exception_handler(array($this,'exceptionHandler'));
+ }
+
+ /**
+ * FirePHP's exception handler
+ *
+ * Logs all exceptions to your firebug console and then stops the script.
+ *
+ * @param Exception $Exception
+ * @throws Exception
+ */
+ function exceptionHandler($Exception) {
+
+ $this->inExceptionHandler = true;
+
+ header('HTTP/1.1 500 Internal Server Error');
+
+ $this->fb($Exception);
+
+ $this->inExceptionHandler = false;
+ }
+
+ /**
+ * Register FirePHP driver as your assert callback
+ *
+ * @param boolean $convertAssertionErrorsToExceptions
+ * @param boolean $throwAssertionExceptions
+ * @return mixed Returns the original setting or FALSE on errors
+ */
+ public function registerAssertionHandler($convertAssertionErrorsToExceptions=true, $throwAssertionExceptions=false)
+ {
+ $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions;
+ $this->throwAssertionExceptions = $throwAssertionExceptions;
+
+ if($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) {
+ throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!');
+ }
+
+ return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
+ }
+
+ /**
+ * FirePHP's assertion handler
+ *
+ * Logs all assertions to your firebug console and then stops the script.
+ *
+ * @param string $file File source of assertion
+ * @param int $line Line source of assertion
+ * @param mixed $code Assertion code
+ */
+ public function assertionHandler($file, $line, $code)
+ {
+
+ if($this->convertAssertionErrorsToExceptions) {
+
+ $exception = new ErrorException('Assertion Failed - Code[ '.$code.' ]', 0, null, $file, $line);
+
+ if($this->throwAssertionExceptions) {
+ throw $exception;
+ } else {
+ $this->fb($exception);
+ }
+
+ } else {
+
+ $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File'=>$file,'Line'=>$line));
+
+ }
+ }
+
+ /**
+ * Set custom processor url for FirePHP
+ *
+ * @param string $URL
+ */
+ public function setProcessorUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-ProcessorURL', $URL);
+ }
+
+ /**
+ * Set custom renderer url for FirePHP
+ *
+ * @param string $URL
+ */
+ public function setRendererUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-RendererURL', $URL);
+ }
+
+ /**
+ * Start a group for following messages.
+ *
+ * Options:
+ * Collapsed: [true|false]
+ * Color: [#RRGGBB|ColorName]
+ *
+ * @param string $Name
+ * @param array $Options OPTIONAL Instructions on how to log the group
+ * @return true
+ * @throws Exception
+ */
+ public function group($Name, $Options=null) {
+
+ if(!$Name) {
+ throw $this->newException('You must specify a label for the group!');
+ }
+
+ if($Options) {
+ if(!is_array($Options)) {
+ throw $this->newException('Options must be defined as an array!');
+ }
+ if(array_key_exists('Collapsed', $Options)) {
+ $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false';
+ }
+ }
+
+ return $this->fb(null, $Name, FirePHP::GROUP_START, $Options);
+ }
+
+ /**
+ * Ends a group you have started before
+ *
+ * @return true
+ * @throws Exception
+ */
+ public function groupEnd() {
+ return $this->fb(null, null, FirePHP::GROUP_END);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::LOG
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function log($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::LOG);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::INFO
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function info($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::INFO);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::WARN
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function warn($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::WARN);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::ERROR
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function error($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::ERROR);
+ }
+
+ /**
+ * Dumps key and variable to firebug server panel
+ *
+ * @see FirePHP::DUMP
+ * @param string $Key
+ * @param mixed $Variable
+ * @return true
+ * @throws Exception
+ */
+ public function dump($Key, $Variable) {
+ return $this->fb($Variable, $Key, FirePHP::DUMP);
+ }
+
+ /**
+ * Log a trace in the firebug console
+ *
+ * @see FirePHP::TRACE
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function trace($Label) {
+ return $this->fb($Label, FirePHP::TRACE);
+ }
+
+ /**
+ * Log a table in the firebug console
+ *
+ * @see FirePHP::TABLE
+ * @param string $Label
+ * @param string $Table
+ * @return true
+ * @throws Exception
+ */
+ public function table($Label, $Table) {
+ return $this->fb($Table, $Label, FirePHP::TABLE);
+ }
+
+ /**
+ * Check if FirePHP is installed on client
+ *
+ * @return boolean
+ */
+ public function detectClientExtension() {
+ /* Check if FirePHP is installed on client */
+ if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) ||
+ !version_compare($m[1][0],'0.0.6','>=')) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Log varible to Firebug
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object The variable to be logged
+ * @return true Return TRUE if message was added to headers, FALSE otherwise
+ * @throws Exception
+ */
+ public function fb($Object) {
+
+ if(!$this->enabled) {
+ return false;
+ }
+
+ if (headers_sent($filename, $linenum)) {
+ // If we are logging from within the exception handler we cannot throw another exception
+ if($this->inExceptionHandler) {
+ // Simply echo the error out to the page
+ echo '<div style="border: 2px solid red; font-family: Arial; font-size: 12px; background-color: lightgray; padding: 5px;"><span style="color: red; font-weight: bold;">FirePHP ERROR:</span> Headers already sent in <b>'.$filename.'</b> on line <b>'.$linenum.'</b>. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.</div>';
+ } else {
+ throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
+ }
+ }
+
+ $Type = null;
+ $Label = null;
+ $Options = array();
+
+ if(func_num_args()==1) {
+ } else
+ if(func_num_args()==2) {
+ switch(func_get_arg(1)) {
+ case self::LOG:
+ case self::INFO:
+ case self::WARN:
+ case self::ERROR:
+ case self::DUMP:
+ case self::TRACE:
+ case self::EXCEPTION:
+ case self::TABLE:
+ case self::GROUP_START:
+ case self::GROUP_END:
+ $Type = func_get_arg(1);
+ break;
+ default:
+ $Label = func_get_arg(1);
+ break;
+ }
+ } else
+ if(func_num_args()==3) {
+ $Type = func_get_arg(2);
+ $Label = func_get_arg(1);
+ } else
+ if(func_num_args()==4) {
+ $Type = func_get_arg(2);
+ $Label = func_get_arg(1);
+ $Options = func_get_arg(3);
+ } else {
+ throw $this->newException('Wrong number of arguments to fb() function!');
+ }
+
+
+ if(!$this->detectClientExtension()) {
+ return false;
+ }
+
+ $meta = array();
+ $skipFinalObjectEncode = false;
+
+ if($Object instanceof Exception) {
+
+ $meta['file'] = $this->_escapeTraceFile($Object->getFile());
+ $meta['line'] = $Object->getLine();
+
+ $trace = $Object->getTrace();
+ if($Object instanceof ErrorException
+ && isset($trace[0]['function'])
+ && $trace[0]['function']=='errorHandler'
+ && isset($trace[0]['class'])
+ && $trace[0]['class']=='FirePHP') {
+
+ $severity = false;
+ switch($Object->getSeverity()) {
+ case E_WARNING: $severity = 'E_WARNING'; break;
+ case E_NOTICE: $severity = 'E_NOTICE'; break;
+ case E_USER_ERROR: $severity = 'E_USER_ERROR'; break;
+ case E_USER_WARNING: $severity = 'E_USER_WARNING'; break;
+ case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break;
+ case E_STRICT: $severity = 'E_STRICT'; break;
+ case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break;
+ case E_DEPRECATED: $severity = 'E_DEPRECATED'; break;
+ case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break;
+ }
+
+ $Object = array('Class'=>get_class($Object),
+ 'Message'=>$severity.': '.$Object->getMessage(),
+ 'File'=>$this->_escapeTraceFile($Object->getFile()),
+ 'Line'=>$Object->getLine(),
+ 'Type'=>'trigger',
+ 'Trace'=>$this->_escapeTrace(array_splice($trace,2)));
+ $skipFinalObjectEncode = true;
+ } else {
+ $Object = array('Class'=>get_class($Object),
+ 'Message'=>$Object->getMessage(),
+ 'File'=>$this->_escapeTraceFile($Object->getFile()),
+ 'Line'=>$Object->getLine(),
+ 'Type'=>'throw',
+ 'Trace'=>$this->_escapeTrace($trace));
+ $skipFinalObjectEncode = true;
+ }
+ $Type = self::EXCEPTION;
+
+ } else
+ if($Type==self::TRACE) {
+
+ $trace = debug_backtrace();
+ if(!$trace) return false;
+ for( $i=0 ; $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if($trace[$i]['function']=='fb'
+ || $trace[$i]['function']=='trace'
+ || $trace[$i]['function']=='send') {
+ $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
+ 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
+ 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
+ 'Message'=>$trace[$i]['args'][0],
+ 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
+ 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
+ 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
+ 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
+
+ $skipFinalObjectEncode = true;
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ } else
+ if($Type==self::TABLE) {
+
+ if(isset($Object[0]) && is_string($Object[0])) {
+ $Object[1] = $this->encodeTable($Object[1]);
+ } else {
+ $Object = $this->encodeTable($Object);
+ }
+
+ $skipFinalObjectEncode = true;
+
+ } else
+ if($Type==self::GROUP_START) {
+
+ if(!$Label) {
+ throw $this->newException('You must specify a label for the group!');
+ }
+
+ } else {
+ if($Type===null) {
+ $Type = self::LOG;
+ }
+ }
+
+ if($this->options['includeLineNumbers']) {
+ if(!isset($meta['file']) || !isset($meta['line'])) {
+
+ $trace = debug_backtrace();
+ for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if(isset($trace[$i]['file'])
+ && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip FB::fb() */
+ } else {
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ }
+ } else {
+ unset($meta['file']);
+ unset($meta['line']);
+ }
+
+ $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
+ $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION);
+
+ $structure_index = 1;
+ if($Type==self::DUMP) {
+ $structure_index = 2;
+ $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
+ } else {
+ $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
+ }
+
+ if($Type==self::DUMP) {
+ $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
+ } else {
+ $msg_meta = $Options;
+ $msg_meta['Type'] = $Type;
+ if($Label!==null) {
+ $msg_meta['Label'] = $Label;
+ }
+ if(isset($meta['file']) && !isset($msg_meta['File'])) {
+ $msg_meta['File'] = $meta['file'];
+ }
+ if(isset($meta['line']) && !isset($msg_meta['Line'])) {
+ $msg_meta['Line'] = $meta['line'];
+ }
+ $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
+ }
+
+ $parts = explode("\n",chunk_split($msg, 5000, "\n"));
+
+ for( $i=0 ; $i<count($parts) ; $i++) {
+
+ $part = $parts[$i];
+ if ($part) {
+
+ if(count($parts)>2) {
+ // Message needs to be split into multiple parts
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ (($i==0)?strlen($msg):'')
+ . '|' . $part . '|'
+ . (($i<count($parts)-2)?'\\':''));
+ } else {
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ strlen($part) . '|' . $part . '|');
+ }
+
+ $this->messageIndex++;
+
+ if ($this->messageIndex > 99999) {
+ throw $this->newException('Maximum number (99,999) of messages reached!');
+ }
+ }
+ }
+
+ $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
+
+ return true;
+ }
+
+ /**
+ * Standardizes path for windows systems.
+ *
+ * @param string $Path
+ * @return string
+ */
+ protected function _standardizePath($Path) {
+ return preg_replace('/\\\\+/','/',$Path);
+ }
+
+ /**
+ * Escape trace path for windows systems
+ *
+ * @param array $Trace
+ * @return array
+ */
+ protected function _escapeTrace($Trace) {
+ if(!$Trace) return $Trace;
+ for( $i=0 ; $i<sizeof($Trace) ; $i++ ) {
+ if(isset($Trace[$i]['file'])) {
+ $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']);
+ }
+ if(isset($Trace[$i]['args'])) {
+ $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
+ }
+ }
+ return $Trace;
+ }
+
+ /**
+ * Escape file information of trace for windows systems
+ *
+ * @param string $File
+ * @return string
+ */
+ protected function _escapeTraceFile($File) {
+ /* Check if we have a windows filepath */
+ if(strpos($File,'\\')) {
+ /* First strip down to single \ */
+
+ $file = preg_replace('/\\\\+/','\\',$File);
+
+ return $file;
+ }
+ return $File;
+ }
+
+ /**
+ * Send header
+ *
+ * @param string $Name
+ * @param string_type $Value
+ */
+ protected function setHeader($Name, $Value) {
+ return header($Name.': '.$Value);
+ }
+
+ /**
+ * Get user agent
+ *
+ * @return string|false
+ */
+ protected function getUserAgent() {
+ if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
+ return $_SERVER['HTTP_USER_AGENT'];
+ }
+
+ /**
+ * Returns a new exception
+ *
+ * @param string $Message
+ * @return Exception
+ */
+ protected function newException($Message) {
+ return new Exception($Message);
+ }
+
+ /**
+ * Encode an object into a JSON string
+ *
+ * Uses PHP's jeson_encode() if available
+ *
+ * @param object $Object The object to be encoded
+ * @return string The JSON string
+ */
+ public function jsonEncode($Object, $skipObjectEncode=false)
+ {
+ if(!$skipObjectEncode) {
+ $Object = $this->encodeObject($Object);
+ }
+
+ if(function_exists('json_encode')
+ && $this->options['useNativeJsonEncode']!=false) {
+
+ return json_encode($Object);
+ } else {
+ return $this->json_encode($Object);
+ }
+ }
+
+ /**
+ * Encodes a table by encoding each row and column with encodeObject()
+ *
+ * @param array $Table The table to be encoded
+ * @return array
+ */
+ protected function encodeTable($Table) {
+
+ if(!$Table) return $Table;
+
+ $new_table = array();
+ foreach($Table as $row) {
+
+ if(is_array($row)) {
+ $new_row = array();
+
+ foreach($row as $item) {
+ $new_row[] = $this->encodeObject($item);
+ }
+
+ $new_table[] = $new_row;
+ }
+ }
+
+ return $new_table;
+ }
+
+ /**
+ * Encodes an object including members with
+ * protected and private visibility
+ *
+ * @param Object $Object The object to be encoded
+ * @param int $Depth The current traversal depth
+ * @return array All members of the object
+ */
+ protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1)
+ {
+ $return = array();
+
+ if (is_resource($Object)) {
+
+ return '** '.(string)$Object.' **';
+
+ } else
+ if (is_object($Object)) {
+
+ if ($ObjectDepth > $this->options['maxObjectDepth']) {
+ return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
+ }
+
+ foreach ($this->objectStack as $refVal) {
+ if ($refVal === $Object) {
+ return '** Recursion ('.get_class($Object).') **';
+ }
+ }
+ array_push($this->objectStack, $Object);
+
+ $return['__className'] = $class = get_class($Object);
+ $class_lower = strtolower($class);
+
+ $reflectionClass = new ReflectionClass($class);
+ $properties = array();
+ foreach( $reflectionClass->getProperties() as $property) {
+ $properties[$property->getName()] = $property;
+ }
+
+ $members = (array)$Object;
+
+ foreach( $properties as $raw_name => $property ) {
+
+ $name = $raw_name;
+ if($property->isStatic()) {
+ $name = 'static:'.$name;
+ }
+ if($property->isPublic()) {
+ $name = 'public:'.$name;
+ } else
+ if($property->isPrivate()) {
+ $name = 'private:'.$name;
+ $raw_name = "\0".$class."\0".$raw_name;
+ } else
+ if($property->isProtected()) {
+ $name = 'protected:'.$name;
+ $raw_name = "\0".'*'."\0".$raw_name;
+ }
+
+ if(!(isset($this->objectFilters[$class_lower])
+ && is_array($this->objectFilters[$class_lower])
+ && in_array($raw_name,$this->objectFilters[$class_lower]))) {
+
+ if(array_key_exists($raw_name,$members)
+ && !$property->isStatic()) {
+
+ $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1);
+
+ } else {
+ if(method_exists($property,'setAccessible')) {
+ $property->setAccessible(true);
+ $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1);
+ } else
+ if($property->isPublic()) {
+ $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1);
+ } else {
+ $return[$name] = '** Need PHP 5.3 to get value **';
+ }
+ }
+ } else {
+ $return[$name] = '** Excluded by Filter **';
+ }
+ }
+
+ // Include all members that are not defined in the class
+ // but exist in the object
+ foreach( $members as $raw_name => $value ) {
+
+ $name = $raw_name;
+
+ if ($name{0} == "\0") {
+ $parts = explode("\0", $name);
+ $name = $parts[2];
+ }
+
+ if(!isset($properties[$name])) {
+ $name = 'undeclared:'.$name;
+
+ if(!(isset($this->objectFilters[$class_lower])
+ && is_array($this->objectFilters[$class_lower])
+ && in_array($raw_name,$this->objectFilters[$class_lower]))) {
+
+ $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1);
+ } else {
+ $return[$name] = '** Excluded by Filter **';
+ }
+ }
+ }
+
+ array_pop($this->objectStack);
+
+ } elseif (is_array($Object)) {
+
+ if ($ArrayDepth > $this->options['maxArrayDepth']) {
+ return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
+ }
+
+ foreach ($Object as $key => $val) {
+
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($key=='GLOBALS'
+ && is_array($val)
+ && array_key_exists('GLOBALS',$val)) {
+ $val['GLOBALS'] = '** Recursion (GLOBALS) **';
+ }
+
+ $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1);
+ }
+ } else {
+ if(self::is_utf8($Object)) {
+ return $Object;
+ } else {
+ return utf8_encode($Object);
+ }
+ }
+ return $return;
+ }
+
+ /**
+ * Returns true if $string is valid UTF-8 and false otherwise.
+ *
+ * @param mixed $str String to be tested
+ * @return boolean
+ */
+ protected static function is_utf8($str) {
+ $c=0; $b=0;
+ $bits=0;
+ $len=strlen($str);
+ for($i=0; $i<$len; $i++){
+ $c=ord($str[$i]);
+ if($c > 128){
+ if(($c >= 254)) return false;
+ elseif($c >= 252) $bits=6;
+ elseif($c >= 248) $bits=5;
+ elseif($c >= 240) $bits=4;
+ elseif($c >= 224) $bits=3;
+ elseif($c >= 192) $bits=2;
+ else return false;
+ if(($i+$bits) > $len) return false;
+ while($bits > 1){
+ $i++;
+ $b=ord($str[$i]);
+ if($b < 128 || $b > 191) return false;
+ $bits--;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * @category
+ * @package Services_JSON
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @copyright 2005 Michal Migurski
+ * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+
+ /**
+ * Keep a list of objects as we descend into the array so we can detect recursion.
+ */
+ private $json_objectStack = array();
+
+
+ /**
+ * convert a string from one UTF-8 char to one UTF-16 char
+ *
+ * Normally should be handled by mb_convert_encoding, but
+ * provides a slower PHP-only method for installations
+ * that lack the multibye string extension.
+ *
+ * @param string $utf8 UTF-8 character
+ * @return string UTF-16 character
+ * @access private
+ */
+ private function json_utf82utf16($utf8)
+ {
+ // oh please oh please oh please oh please oh please
+ if(function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+ }
+
+ switch(strlen($utf8)) {
+ case 1:
+ // this case should never be reached, because we are in ASCII range
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return $utf8;
+
+ case 2:
+ // return a UTF-16 character from a 2-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0x07 & (ord($utf8{0}) >> 2))
+ . chr((0xC0 & (ord($utf8{0}) << 6))
+ | (0x3F & ord($utf8{1})));
+
+ case 3:
+ // return a UTF-16 character from a 3-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr((0xF0 & (ord($utf8{0}) << 4))
+ | (0x0F & (ord($utf8{1}) >> 2)))
+ . chr((0xC0 & (ord($utf8{1}) << 6))
+ | (0x7F & ord($utf8{2})));
+ }
+
+ // ignoring UTF-32 for now, sorry
+ return '';
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to Services_JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return mixed JSON string representation of input var or an error if a problem occurs
+ * @access public
+ */
+ private function json_encode($var)
+ {
+
+ if(is_object($var)) {
+ if(in_array($var,$this->json_objectStack)) {
+ return '"** Recursion **"';
+ }
+ }
+
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return (int) $var;
+
+ case 'double':
+ case 'float':
+ return (float) $var;
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch (true) {
+ case $ord_var_c == 0x08:
+ $ascii .= '\b';
+ break;
+ case $ord_var_c == 0x09:
+ $ascii .= '\t';
+ break;
+ case $ord_var_c == 0x0A:
+ $ascii .= '\n';
+ break;
+ case $ord_var_c == 0x0C:
+ $ascii .= '\f';
+ break;
+ case $ord_var_c == 0x0D:
+ $ascii .= '\r';
+ break;
+
+ case $ord_var_c == 0x22:
+ case $ord_var_c == 0x2F:
+ case $ord_var_c == 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+ $c += 1;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}));
+ $c += 2;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}));
+ $c += 3;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}));
+ $c += 4;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}),
+ ord($var{$c + 5}));
+ $c += 5;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($var),
+ array_values($var));
+
+ array_pop($this->json_objectStack);
+
+ foreach($properties as $property) {
+ if($property instanceof Exception) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+ }
+
+ $this->json_objectStack[] = $var;
+
+ // treat it like a regular array
+ $elements = array_map(array($this, 'json_encode'), $var);
+
+ array_pop($this->json_objectStack);
+
+ foreach($elements as $element) {
+ if($element instanceof Exception) {
+ return $element;
+ }
+ }
+
+ return '[' . join(',', $elements) . ']';
+
+ case 'object':
+ $vars = self::encodeObject($var);
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($vars),
+ array_values($vars));
+
+ array_pop($this->json_objectStack);
+
+ foreach($properties as $property) {
+ if($property instanceof Exception) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ private function json_name_value($name, $value)
+ {
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($name=='GLOBALS'
+ && is_array($value)
+ && array_key_exists('GLOBALS',$value)) {
+ $value['GLOBALS'] = '** Recursion **';
+ }
+
+ $encoded_value = $this->json_encode($value);
+
+ if($encoded_value instanceof Exception) {
+ return $encoded_value;
+ }
+
+ return $this->json_encode(strval($name)) . ':' . $encoded_value;
+ }
+}
diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4 b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4
new file mode 100644
index 000000000..7cc4bfb04
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/FirePHP.class.php4
@@ -0,0 +1,1292 @@
+<?php
+/**
+ * *** BEGIN LICENSE BLOCK *****
+ *
+ * This file is part of FirePHP (http://www.firephp.org/).
+ *
+ * Software License Agreement (New BSD License)
+ *
+ * Copyright (c) 2006-2009, Christoph Dorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Christoph Dorn nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * This verion of FirePHPCore is for use with PHP4. If you do not require PHP4
+ * compatibility, it is suggested you use FirePHPCore.class.php instead.
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @author Michael Day <manveru.alma@gmail.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+
+/**
+ * FirePHP version
+ *
+ * @var string
+ */
+define('FirePHP_VERSION', '0.3');
+
+/**
+ * Firebug LOG level
+ *
+ * Logs a message to firebug console
+ *
+ * @var string
+ */
+define('FirePHP_LOG', 'LOG');
+
+/**
+ * Firebug INFO level
+ *
+ * Logs a message to firebug console and displays an info icon before the message
+ *
+ * @var string
+ */
+define('FirePHP_INFO', 'INFO');
+
+/**
+ * Firebug WARN level
+ *
+ * Logs a message to firebug console, displays a warning icon before the message and colors the line turquoise
+ *
+ * @var string
+ */
+define('FirePHP_WARN', 'WARN');
+
+/**
+ * Firebug ERROR level
+ *
+ * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
+ *
+ * @var string
+ */
+define('FirePHP_ERROR', 'ERROR');
+
+/**
+ * Dumps a variable to firebug's server panel
+ *
+ * @var string
+ */
+define('FirePHP_DUMP', 'DUMP');
+
+/**
+ * Displays a stack trace in firebug console
+ *
+ * @var string
+ */
+define('FirePHP_TRACE', 'TRACE');
+
+/**
+ * Displays a table in firebug console
+ *
+ * @var string
+ */
+define('FirePHP_TABLE', 'TABLE');
+
+/**
+ * Starts a group in firebug console
+ *
+ * @var string
+ */
+define('FirePHP_GROUP_START', 'GROUP_START');
+
+/**
+ * Ends a group in firebug console
+ *
+ * @var string
+ */
+define('FirePHP_GROUP_END', 'GROUP_END');
+
+/**
+ * Sends the given data to the FirePHP Firefox Extension.
+ * The data can be displayed in the Firebug Console or in the
+ * "Server" request tab.
+ *
+ * For more information see: http://www.firephp.org/
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @author Michael Day <manveru.alma@gmail.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+class FirePHP {
+ /**
+ * Wildfire protocol message index
+ *
+ * @var int
+ */
+ var $messageIndex = 1;
+
+ /**
+ * Options for the library
+ *
+ * @var array
+ */
+ var $options = array('maxObjectDepth' => 10,
+ 'maxArrayDepth' => 20,
+ 'useNativeJsonEncode' => true,
+ 'includeLineNumbers' => true);
+
+ /**
+ * Filters used to exclude object members when encoding
+ *
+ * @var array
+ */
+ var $objectFilters = array();
+
+ /**
+ * A stack of objects used to detect recursion during object encoding
+ *
+ * @var object
+ */
+ var $objectStack = array();
+
+ /**
+ * Flag to enable/disable logging
+ *
+ * @var boolean
+ */
+ var $enabled = true;
+
+ /**
+ * The object constructor
+ */
+ function FirePHP() {
+ }
+
+
+ /**
+ * When the object gets serialized only include specific object members.
+ *
+ * @return array
+ */
+ function __sleep() {
+ return array('options','objectFilters','enabled');
+ }
+
+ /**
+ * Gets singleton instance of FirePHP
+ *
+ * @param boolean $AutoCreate
+ * @return FirePHP
+ */
+ function &getInstance($AutoCreate=false) {
+ global $FirePHP_Instance;
+
+ if($AutoCreate===true && !$FirePHP_Instance) {
+ $FirePHP_Instance = new FirePHP();
+ }
+
+ return $FirePHP_Instance;
+ }
+
+ /**
+ * Enable and disable logging to Firebug
+ *
+ * @param boolean $Enabled TRUE to enable, FALSE to disable
+ * @return void
+ */
+ function setEnabled($Enabled) {
+ $this->enabled = $Enabled;
+ }
+
+ /**
+ * Check if logging is enabled
+ *
+ * @return boolean TRUE if enabled
+ */
+ function getEnabled() {
+ return $this->enabled;
+ }
+
+ /**
+ * Specify a filter to be used when encoding an object
+ *
+ * Filters are used to exclude object members.
+ *
+ * @param string $Class The class name of the object
+ * @param array $Filter An array of members to exclude
+ * @return void
+ */
+ function setObjectFilter($Class, $Filter) {
+ $this->objectFilters[strtolower($Class)] = $Filter;
+ }
+
+ /**
+ * Set some options for the library
+ *
+ * Options:
+ * - maxObjectDepth: The maximum depth to traverse objects (default: 10)
+ * - maxArrayDepth: The maximum depth to traverse arrays (default: 20)
+ * - useNativeJsonEncode: If true will use json_encode() (default: true)
+ * - includeLineNumbers: If true will include line numbers and filenames (default: true)
+ *
+ * @param array $Options The options to be set
+ * @return void
+ */
+ function setOptions($Options) {
+ $this->options = array_merge($this->options,$Options);
+ }
+
+ /**
+ * Get options from the library
+ *
+ * @return array The currently set options
+ */
+ function getOptions() {
+ return $this->options;
+ }
+
+ /**
+ * Register FirePHP as your error handler
+ *
+ * Will use FirePHP to log each php error.
+ *
+ * @return mixed Returns a string containing the previously defined error handler (if any)
+ */
+ function registerErrorHandler()
+ {
+ //NOTE: The following errors will not be caught by this error handler:
+ // E_ERROR, E_PARSE, E_CORE_ERROR,
+ // E_CORE_WARNING, E_COMPILE_ERROR,
+ // E_COMPILE_WARNING, E_STRICT
+
+ return set_error_handler(array($this,'errorHandler'));
+ }
+
+ /**
+ * FirePHP's error handler
+ *
+ * Logs each php error that will occur.
+ *
+ * @param int $errno
+ * @param string $errstr
+ * @param string $errfile
+ * @param int $errline
+ * @param array $errcontext
+ */
+ function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
+ {
+ global $FirePHP_Instance;
+ // Don't log error if error reporting is switched off
+ if (error_reporting() == 0) {
+ return;
+ }
+ // Only log error for errors we are asking for
+ if (error_reporting() & $errno) {
+ $FirePHP_Instance->group($errstr);
+ $FirePHP_Instance->error("{$errfile}, line $errline");
+ $FirePHP_Instance->groupEnd();
+ }
+ }
+
+ /**
+ * Register FirePHP driver as your assert callback
+ *
+ * @return mixed Returns the original setting
+ */
+ function registerAssertionHandler()
+ {
+ return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
+ }
+
+ /**
+ * FirePHP's assertion handler
+ *
+ * Logs all assertions to your firebug console and then stops the script.
+ *
+ * @param string $file File source of assertion
+ * @param int $line Line source of assertion
+ * @param mixed $code Assertion code
+ */
+ function assertionHandler($file, $line, $code)
+ {
+ $this->fb($code, 'Assertion Failed', FirePHP_ERROR, array('File'=>$file,'Line'=>$line));
+ }
+
+ /**
+ * Set custom processor url for FirePHP
+ *
+ * @param string $URL
+ */
+ function setProcessorUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-ProcessorURL', $URL);
+ }
+
+ /**
+ * Set custom renderer url for FirePHP
+ *
+ * @param string $URL
+ */
+ function setRendererUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-RendererURL', $URL);
+ }
+
+ /**
+ * Start a group for following messages.
+ *
+ * Options:
+ * Collapsed: [true|false]
+ * Color: [#RRGGBB|ColorName]
+ *
+ * @param string $Name
+ * @param array $Options OPTIONAL Instructions on how to log the group
+ * @return true
+ * @throws Exception
+ */
+ function group($Name, $Options=null) {
+
+ if(!$Name) {
+ trigger_error('You must specify a label for the group!');
+ }
+
+ if($Options) {
+ if(!is_array($Options)) {
+ trigger_error('Options must be defined as an array!');
+ }
+ if(array_key_exists('Collapsed', $Options)) {
+ $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false';
+ }
+ }
+
+ return $this->fb(null, $Name, FirePHP_GROUP_START, $Options);
+ }
+
+ /**
+ * Ends a group you have started before
+ *
+ * @return true
+ * @throws Exception
+ */
+ function groupEnd() {
+ return $this->fb(null, null, FirePHP_GROUP_END);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::LOG
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ function log($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP_LOG);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::INFO
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ function info($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP_INFO);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::WARN
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ function warn($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP_WARN);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::ERROR
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ function error($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP_ERROR);
+ }
+
+ /**
+ * Dumps key and variable to firebug server panel
+ *
+ * @see FirePHP::DUMP
+ * @param string $Key
+ * @param mixed $Variable
+ * @return true
+ * @throws Exception
+ */
+ function dump($Key, $Variable) {
+ return $this->fb($Variable, $Key, FirePHP_DUMP);
+ }
+
+ /**
+ * Log a trace in the firebug console
+ *
+ * @see FirePHP::TRACE
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ function trace($Label) {
+ return $this->fb($Label, FirePHP_TRACE);
+ }
+
+ /**
+ * Log a table in the firebug console
+ *
+ * @see FirePHP::TABLE
+ * @param string $Label
+ * @param string $Table
+ * @return true
+ * @throws Exception
+ */
+ function table($Label, $Table) {
+ return $this->fb($Table, $Label, FirePHP_TABLE);
+ }
+
+ /**
+ * Check if FirePHP is installed on client
+ *
+ * @return boolean
+ */
+ function detectClientExtension() {
+ /* Check if FirePHP is installed on client */
+ if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) ||
+ !version_compare($m[1][0],'0.0.6','>=')) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Log varible to Firebug
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object The variable to be logged
+ * @return true Return TRUE if message was added to headers, FALSE otherwise
+ * @throws Exception
+ */
+ function fb($Object) {
+
+ if(!$this->enabled) {
+ return false;
+ }
+
+ if (headers_sent($filename, $linenum)) {
+ trigger_error('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
+ }
+
+ $Type = null;
+ $Label = null;
+ $Options = array();
+
+ if(func_num_args()==1) {
+ } else
+ if(func_num_args()==2) {
+ switch(func_get_arg(1)) {
+ case FirePHP_LOG:
+ case FirePHP_INFO:
+ case FirePHP_WARN:
+ case FirePHP_ERROR:
+ case FirePHP_DUMP:
+ case FirePHP_TRACE:
+ case FirePHP_TABLE:
+ case FirePHP_GROUP_START:
+ case FirePHP_GROUP_END:
+ $Type = func_get_arg(1);
+ break;
+ default:
+ $Label = func_get_arg(1);
+ break;
+ }
+ } else
+ if(func_num_args()==3) {
+ $Type = func_get_arg(2);
+ $Label = func_get_arg(1);
+ } else
+ if(func_num_args()==4) {
+ $Type = func_get_arg(2);
+ $Label = func_get_arg(1);
+ $Options = func_get_arg(3);
+ } else {
+ trigger_error('Wrong number of arguments to fb() function!');
+ }
+
+
+ if(!$this->detectClientExtension()) {
+ return false;
+ }
+
+ $meta = array();
+ $skipFinalObjectEncode = false;
+
+ if($Type==FirePHP_TRACE) {
+
+ $trace = debug_backtrace();
+ if(!$trace) return false;
+ for( $i=0 ; $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if($trace[$i]['function']=='fb'
+ || $trace[$i]['function']=='trace'
+ || $trace[$i]['function']=='send') {
+ $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
+ 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
+ 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
+ 'Message'=>$trace[$i]['args'][0],
+ 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
+ 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
+ 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
+ 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
+
+ $skipFinalObjectEncode = true;
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ } else
+ if($Type==FirePHP_TABLE) {
+
+ if(isset($Object[0]) && is_string($Object[0])) {
+ $Object[1] = $this->encodeTable($Object[1]);
+ } else {
+ $Object = $this->encodeTable($Object);
+ }
+
+ $skipFinalObjectEncode = true;
+
+ } else
+ if($Type==FirePHP_GROUP_START) {
+
+ if(!$Label) {
+ trigger_error('You must specify a label for the group!');
+ }
+ } else {
+ if($Type===null) {
+ $Type = FirePHP_LOG;
+ }
+ }
+
+ if($this->options['includeLineNumbers']) {
+ if(!isset($meta['file']) || !isset($meta['line'])) {
+
+ $trace = debug_backtrace();
+ for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if(isset($trace[$i]['file'])
+ && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip FB::fb() */
+ } else {
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ }
+ } else {
+ unset($meta['file']);
+ unset($meta['line']);
+ }
+
+ $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
+ $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.FirePHP_VERSION);
+
+ $structure_index = 1;
+ if($Type==FirePHP_DUMP) {
+ $structure_index = 2;
+ $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
+ } else {
+ $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
+ }
+
+ if($Type==FirePHP_DUMP) {
+ $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
+ } else {
+ $msg_meta = $Options;
+ $msg_meta['Type'] = $Type;
+ if($Label!==null) {
+ $msg_meta['Label'] = $Label;
+ }
+ if(isset($meta['file']) && !isset($msg_meta['File'])) {
+ $msg_meta['File'] = $meta['file'];
+ }
+ if(isset($meta['line']) && !isset($msg_meta['Line'])) {
+ $msg_meta['Line'] = $meta['line'];
+ }
+ $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
+ }
+
+ $parts = explode("\n",chunk_split($msg, 5000, "\n"));
+
+ for( $i=0 ; $i<count($parts) ; $i++) {
+
+ $part = $parts[$i];
+ if ($part) {
+
+ if(count($parts)>2) {
+ // Message needs to be split into multiple parts
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ (($i==0)?strlen($msg):'')
+ . '|' . $part . '|'
+ . (($i<count($parts)-2)?'\\':''));
+ } else {
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ strlen($part) . '|' . $part . '|');
+ }
+
+ $this->messageIndex++;
+
+ if ($this->messageIndex > 99999) {
+ trigger_error('Maximum number (99,999) of messages reached!');
+ }
+ }
+ }
+
+ $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
+
+ return true;
+ }
+
+
+ /**
+ * Standardizes path for windows systems.
+ *
+ * @param string $Path
+ * @return string
+ */
+ function _standardizePath($Path) {
+ return preg_replace('/\\\\+/','/',$Path);
+ }
+
+ /**
+ * Escape trace path for windows systems
+ *
+ * @param array $Trace
+ * @return array
+ */
+ function _escapeTrace($Trace) {
+ if(!$Trace) return $Trace;
+ for( $i=0 ; $i<sizeof($Trace) ; $i++ ) {
+ if(isset($Trace[$i]['file'])) {
+ $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']);
+ }
+ if(isset($Trace[$i]['args'])) {
+ $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
+ }
+ }
+ return $Trace;
+ }
+
+ /**
+ * Escape file information of trace for windows systems
+ *
+ * @param string $File
+ * @return string
+ */
+ function _escapeTraceFile($File) {
+ /* Check if we have a windows filepath */
+ if(strpos($File,'\\')) {
+ /* First strip down to single \ */
+
+ $file = preg_replace('/\\\\+/','\\',$File);
+
+ return $file;
+ }
+ return $File;
+ }
+
+ /**
+ * Send header
+ *
+ * @param string $Name
+ * @param string_type $Value
+ */
+ function setHeader($Name, $Value) {
+ return header($Name.': '.$Value);
+ }
+
+ /**
+ * Get user agent
+ *
+ * @return string|false
+ */
+ function getUserAgent() {
+ if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
+ return $_SERVER['HTTP_USER_AGENT'];
+ }
+
+ /**
+ * Encode an object into a JSON string
+ *
+ * Uses PHP's jeson_encode() if available
+ *
+ * @param object $Object The object to be encoded
+ * @return string The JSON string
+ */
+ function jsonEncode($Object, $skipObjectEncode=false)
+ {
+ if(!$skipObjectEncode) {
+ $Object = $this->encodeObject($Object);
+ }
+
+ if(function_exists('json_encode')
+ && $this->options['useNativeJsonEncode']!=false) {
+
+ return json_encode($Object);
+ } else {
+ return $this->json_encode($Object);
+ }
+ }
+
+ /**
+ * Encodes a table by encoding each row and column with encodeObject()
+ *
+ * @param array $Table The table to be encoded
+ * @return array
+ */
+ function encodeTable($Table) {
+
+ if(!$Table) return $Table;
+
+ $new_table = array();
+ foreach($Table as $row) {
+
+ if(is_array($row)) {
+ $new_row = array();
+
+ foreach($row as $item) {
+ $new_row[] = $this->encodeObject($item);
+ }
+
+ $new_table[] = $new_row;
+ }
+ }
+
+ return $new_table;
+ }
+
+ /**
+ * Encodes an object
+ *
+ * @param Object $Object The object to be encoded
+ * @param int $Depth The current traversal depth
+ * @return array All members of the object
+ */
+ function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1)
+ {
+ $return = array();
+
+ if (is_resource($Object)) {
+
+ return '** '.(string)$Object.' **';
+
+ } else
+ if (is_object($Object)) {
+
+ if ($ObjectDepth > $this->options['maxObjectDepth']) {
+ return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
+ }
+
+ foreach ($this->objectStack as $refVal) {
+ if ($refVal === $Object) {
+ return '** Recursion ('.get_class($Object).') **';
+ }
+ }
+ array_push($this->objectStack, $Object);
+
+ $return['__className'] = $class = get_class($Object);
+ $class_lower = strtolower($class);
+
+ $members = (array)$Object;
+
+ // Include all members that are not defined in the class
+ // but exist in the object
+ foreach( $members as $raw_name => $value ) {
+
+ $name = $raw_name;
+
+ if ($name{0} == "\0") {
+ $parts = explode("\0", $name);
+ $name = $parts[2];
+ }
+
+ if(!isset($properties[$name])) {
+ $name = 'undeclared:'.$name;
+
+ if(!(isset($this->objectFilters[$class_lower])
+ && is_array($this->objectFilters[$class_lower])
+ && in_array($raw_name,$this->objectFilters[$class_lower]))) {
+
+ $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1);
+ } else {
+ $return[$name] = '** Excluded by Filter **';
+ }
+ }
+ }
+
+ array_pop($this->objectStack);
+
+ } elseif (is_array($Object)) {
+
+ if ($ArrayDepth > $this->options['maxArrayDepth']) {
+ return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
+ }
+
+ foreach ($Object as $key => $val) {
+
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($key=='GLOBALS'
+ && is_array($val)
+ && array_key_exists('GLOBALS',$val)) {
+ $val['GLOBALS'] = '** Recursion (GLOBALS) **';
+ }
+
+ $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1);
+ }
+ } else {
+ if($this->is_utf8($Object)) {
+ return $Object;
+ } else {
+ return utf8_encode($Object);
+ }
+ }
+ return $return;
+
+ }
+
+ /**
+ * Returns true if $string is valid UTF-8 and false otherwise.
+ *
+ * @param mixed $str String to be tested
+ * @return boolean
+ */
+ function is_utf8($str) {
+ $c=0; $b=0;
+ $bits=0;
+ $len=strlen($str);
+ for($i=0; $i<$len; $i++){
+ $c=ord($str[$i]);
+ if($c > 128){
+ if(($c >= 254)) return false;
+ elseif($c >= 252) $bits=6;
+ elseif($c >= 248) $bits=5;
+ elseif($c >= 240) $bits=4;
+ elseif($c >= 224) $bits=3;
+ elseif($c >= 192) $bits=2;
+ else return false;
+ if(($i+$bits) > $len) return false;
+ while($bits > 1){
+ $i++;
+ $b=ord($str[$i]);
+ if($b < 128 || $b > 191) return false;
+ $bits--;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * @category
+ * @package Services_JSON
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @copyright 2005 Michal Migurski
+ * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+
+ /**
+ * Keep a list of objects as we descend into the array so we can detect recursion.
+ */
+ var $json_objectStack = array();
+
+
+ /**
+ * convert a string from one UTF-8 char to one UTF-16 char
+ *
+ * Normally should be handled by mb_convert_encoding, but
+ * provides a slower PHP-only method for installations
+ * that lack the multibye string extension.
+ *
+ * @param string $utf8 UTF-8 character
+ * @return string UTF-16 character
+ * @access private
+ */
+ function json_utf82utf16($utf8)
+ {
+ // oh please oh please oh please oh please oh please
+ if(function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+ }
+
+ switch(strlen($utf8)) {
+ case 1:
+ // this case should never be reached, because we are in ASCII range
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return $utf8;
+
+ case 2:
+ // return a UTF-16 character from a 2-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0x07 & (ord($utf8{0}) >> 2))
+ . chr((0xC0 & (ord($utf8{0}) << 6))
+ | (0x3F & ord($utf8{1})));
+
+ case 3:
+ // return a UTF-16 character from a 3-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr((0xF0 & (ord($utf8{0}) << 4))
+ | (0x0F & (ord($utf8{1}) >> 2)))
+ . chr((0xC0 & (ord($utf8{1}) << 6))
+ | (0x7F & ord($utf8{2})));
+ }
+
+ // ignoring UTF-32 for now, sorry
+ return '';
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to Services_JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return mixed JSON string representation of input var or an error if a problem occurs
+ * @access public
+ */
+ function json_encode($var)
+ {
+
+ if(is_object($var)) {
+ if(in_array($var,$this->json_objectStack)) {
+ return '"** Recursion **"';
+ }
+ }
+
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return (int) $var;
+
+ case 'double':
+ case 'float':
+ return (float) $var;
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch (true) {
+ case $ord_var_c == 0x08:
+ $ascii .= '\b';
+ break;
+ case $ord_var_c == 0x09:
+ $ascii .= '\t';
+ break;
+ case $ord_var_c == 0x0A:
+ $ascii .= '\n';
+ break;
+ case $ord_var_c == 0x0C:
+ $ascii .= '\f';
+ break;
+ case $ord_var_c == 0x0D:
+ $ascii .= '\r';
+ break;
+
+ case $ord_var_c == 0x22:
+ case $ord_var_c == 0x2F:
+ case $ord_var_c == 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+ $c += 1;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}));
+ $c += 2;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}));
+ $c += 3;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}));
+ $c += 4;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}),
+ ord($var{$c + 5}));
+ $c += 5;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($var),
+ array_values($var));
+
+ array_pop($this->json_objectStack);
+
+ return '{' . join(',', $properties) . '}';
+ }
+
+ $this->json_objectStack[] = $var;
+
+ // treat it like a regular array
+ $elements = array_map(array($this, 'json_encode'), $var);
+
+ array_pop($this->json_objectStack);
+
+ return '[' . join(',', $elements) . ']';
+
+ case 'object':
+ $vars = FirePHP::encodeObject($var);
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($vars),
+ array_values($vars));
+
+ array_pop($this->json_objectStack);
+
+ return '{' . join(',', $properties) . '}';
+
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ function json_name_value($name, $value)
+ {
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($name=='GLOBALS'
+ && is_array($value)
+ && array_key_exists('GLOBALS',$value)) {
+ $value['GLOBALS'] = '** Recursion **';
+ }
+
+ $encoded_value = $this->json_encode($value);
+
+ return $this->json_encode(strval($name)) . ':' . $encoded_value;
+ }
+}
+
diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE
new file mode 100644
index 000000000..3e390f9d9
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/LICENSE
@@ -0,0 +1,29 @@
+Software License Agreement (New BSD License)
+
+Copyright (c) 2006-2009, Christoph Dorn
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ * Neither the name of Christoph Dorn nor the names of its
+ contributors may be used to endorse or promote products derived from this
+ software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php
new file mode 100644
index 000000000..9d1857cbc
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php
@@ -0,0 +1,261 @@
+<?php
+
+/* ***** BEGIN LICENSE BLOCK *****
+ *
+ * This file is part of FirePHP (http://www.firephp.org/).
+ *
+ * Software License Agreement (New BSD License)
+ *
+ * Copyright (c) 2006-2009, Christoph Dorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Christoph Dorn nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+
+require_once dirname(__FILE__).'/FirePHP.class.php';
+
+/**
+ * Sends the given data to the FirePHP Firefox Extension.
+ * The data can be displayed in the Firebug Console or in the
+ * "Server" request tab.
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object
+ * @return true
+ * @throws Exception
+ */
+function fb()
+{
+ $instance = FirePHP::getInstance(true);
+
+ $args = func_get_args();
+ return call_user_func_array(array($instance,'fb'),$args);
+}
+
+
+class FB
+{
+ /**
+ * Enable and disable logging to Firebug
+ *
+ * @see FirePHP->setEnabled()
+ * @param boolean $Enabled TRUE to enable, FALSE to disable
+ * @return void
+ */
+ public static function setEnabled($Enabled) {
+ $instance = FirePHP::getInstance(true);
+ $instance->setEnabled($Enabled);
+ }
+
+ /**
+ * Check if logging is enabled
+ *
+ * @see FirePHP->getEnabled()
+ * @return boolean TRUE if enabled
+ */
+ public static function getEnabled() {
+ $instance = FirePHP::getInstance(true);
+ return $instance->getEnabled();
+ }
+
+ /**
+ * Specify a filter to be used when encoding an object
+ *
+ * Filters are used to exclude object members.
+ *
+ * @see FirePHP->setObjectFilter()
+ * @param string $Class The class name of the object
+ * @param array $Filter An array or members to exclude
+ * @return void
+ */
+ public static function setObjectFilter($Class, $Filter) {
+ $instance = FirePHP::getInstance(true);
+ $instance->setObjectFilter($Class, $Filter);
+ }
+
+ /**
+ * Set some options for the library
+ *
+ * @see FirePHP->setOptions()
+ * @param array $Options The options to be set
+ * @return void
+ */
+ public static function setOptions($Options) {
+ $instance = FirePHP::getInstance(true);
+ $instance->setOptions($Options);
+ }
+
+ /**
+ * Get options for the library
+ *
+ * @see FirePHP->getOptions()
+ * @return array The options
+ */
+ public static function getOptions() {
+ $instance = FirePHP::getInstance(true);
+ return $instance->getOptions();
+ }
+
+ /**
+ * Log object to firebug
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object
+ * @return true
+ * @throws Exception
+ */
+ public static function send()
+ {
+ $instance = FirePHP::getInstance(true);
+ $args = func_get_args();
+ return call_user_func_array(array($instance,'fb'),$args);
+ }
+
+ /**
+ * Start a group for following messages
+ *
+ * Options:
+ * Collapsed: [true|false]
+ * Color: [#RRGGBB|ColorName]
+ *
+ * @param string $Name
+ * @param array $Options OPTIONAL Instructions on how to log the group
+ * @return true
+ */
+ public static function group($Name, $Options=null) {
+ $instance = FirePHP::getInstance(true);
+ return $instance->group($Name, $Options);
+ }
+
+ /**
+ * Ends a group you have started before
+ *
+ * @return true
+ * @throws Exception
+ */
+ public static function groupEnd() {
+ return self::send(null, null, FirePHP::GROUP_END);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::LOG
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public static function log($Object, $Label=null) {
+ return self::send($Object, $Label, FirePHP::LOG);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::INFO
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public static function info($Object, $Label=null) {
+ return self::send($Object, $Label, FirePHP::INFO);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::WARN
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public static function warn($Object, $Label=null) {
+ return self::send($Object, $Label, FirePHP::WARN);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::ERROR
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public static function error($Object, $Label=null) {
+ return self::send($Object, $Label, FirePHP::ERROR);
+ }
+
+ /**
+ * Dumps key and variable to firebug server panel
+ *
+ * @see FirePHP::DUMP
+ * @param string $Key
+ * @param mixed $Variable
+ * @return true
+ * @throws Exception
+ */
+ public static function dump($Key, $Variable) {
+ return self::send($Variable, $Key, FirePHP::DUMP);
+ }
+
+ /**
+ * Log a trace in the firebug console
+ *
+ * @see FirePHP::TRACE
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public static function trace($Label) {
+ return self::send($Label, FirePHP::TRACE);
+ }
+
+ /**
+ * Log a table in the firebug console
+ *
+ * @see FirePHP::TABLE
+ * @param string $Label
+ * @param string $Table
+ * @return true
+ * @throws Exception
+ */
+ public static function table($Label, $Table) {
+ return self::send($Table, $Label, FirePHP::TABLE);
+ }
+
+}
+
diff --git a/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4 b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4
new file mode 100644
index 000000000..5b69e3487
--- /dev/null
+++ b/plugins/FirePHP/extlib/FirePHP/lib/FirePHPCore/fb.php4
@@ -0,0 +1,251 @@
+<?php
+
+/* ***** BEGIN LICENSE BLOCK *****
+ *
+ * This file is part of FirePHP (http://www.firephp.org/).
+ *
+ * Software License Agreement (New BSD License)
+ *
+ * Copyright (c) 2006-2009, Christoph Dorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Christoph Dorn nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * @copyright Copyright (C) 2007-2009 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @author Michael Day <manveru.alma@gmail.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+
+require_once dirname(__FILE__).'/FirePHP.class.php4';
+
+/**
+ * Sends the given data to the FirePHP Firefox Extension.
+ * The data can be displayed in the Firebug Console or in the
+ * "Server" request tab.
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object
+ * @return true
+ * @throws Exception
+ */
+function fb()
+{
+ $instance =& FirePHP::getInstance(true);
+
+ $args = func_get_args();
+ return call_user_func_array(array(&$instance,'fb'),$args);
+}
+
+
+class FB
+{
+ /**
+ * Enable and disable logging to Firebug
+ *
+ * @see FirePHP->setEnabled()
+ * @param boolean $Enabled TRUE to enable, FALSE to disable
+ * @return void
+ */
+ function setEnabled($Enabled) {
+ $instance =& FirePHP::getInstance(true);
+ $instance->setEnabled($Enabled);
+ }
+
+ /**
+ * Check if logging is enabled
+ *
+ * @see FirePHP->getEnabled()
+ * @return boolean TRUE if enabled
+ */
+ function getEnabled() {
+ $instance =& FirePHP::getInstance(true);
+ return $instance->getEnabled();
+ }
+
+ /**
+ * Specify a filter to be used when encoding an object
+ *
+ * Filters are used to exclude object members.
+ *
+ * @see FirePHP->setObjectFilter()
+ * @param string $Class The class name of the object
+ * @param array $Filter An array or members to exclude
+ * @return void
+ */
+ function setObjectFilter($Class, $Filter) {
+ $instance =& FirePHP::getInstance(true);
+ $instance->setObjectFilter($Class, $Filter);
+ }
+
+ /**
+ * Set some options for the library
+ *
+ * @see FirePHP->setOptions()
+ * @param array $Options The options to be set
+ * @return void
+ */
+ function setOptions($Options) {
+ $instance =& FirePHP::getInstance(true);
+ $instance->setOptions($Options);
+ }
+
+ /**
+ * Get options for the library
+ *
+ * @see FirePHP->getOptions()
+ * @return array The options
+ */
+ function getOptions() {
+ $instance =& FirePHP::getInstance(true);
+ return $instance->getOptions();
+ }
+
+ /**
+ * Log object to firebug
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object
+ * @return true
+ */
+ function send()
+ {
+ $instance =& FirePHP::getInstance(true);
+ $args = func_get_args();
+ return call_user_func_array(array(&$instance,'fb'),$args);
+ }
+
+ /**
+ * Start a group for following messages
+ *
+ * Options:
+ * Collapsed: [true|false]
+ * Color: [#RRGGBB|ColorName]
+ *
+ * @param string $Name
+ * @param array $Options OPTIONAL Instructions on how to log the group
+ * @return true
+ */
+ function group($Name, $Options=null) {
+ $instance =& FirePHP::getInstance(true);
+ return $instance->group($Name, $Options);
+ }
+
+ /**
+ * Ends a group you have started before
+ *
+ * @return true
+ */
+ function groupEnd() {
+ return FB::send(null, null, FirePHP_GROUP_END);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::LOG
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ */
+ function log($Object, $Label=null) {
+ return FB::send($Object, $Label, FirePHP_LOG);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::INFO
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ */
+ function info($Object, $Label=null) {
+ return FB::send($Object, $Label, FirePHP_INFO);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::WARN
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ */
+ function warn($Object, $Label=null) {
+ return FB::send($Object, $Label, FirePHP_WARN);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::ERROR
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ */
+ function error($Object, $Label=null) {
+ return FB::send($Object, $Label, FirePHP_ERROR);
+ }
+
+ /**
+ * Dumps key and variable to firebug server panel
+ *
+ * @see FirePHP::DUMP
+ * @param string $Key
+ * @param mixed $Variable
+ * @return true
+ */
+ function dump($Key, $Variable) {
+ return FB::send($Variable, $Key, FirePHP_DUMP);
+ }
+
+ /**
+ * Log a trace in the firebug console
+ *
+ * @see FirePHP::TRACE
+ * @param string $Label
+ * @return true
+ */
+ function trace($Label) {
+ return FB::send($Label, FirePHP_TRACE);
+ }
+
+ /**
+ * Log a table in the firebug console
+ *
+ * @see FirePHP::TABLE
+ * @param string $Label
+ * @param string $Table
+ * @return true
+ */
+ function table($Label, $Table) {
+ return FB::send($Table, $Label, FirePHP_TABLE);
+ }
+}
diff --git a/plugins/GeonamesPlugin.php b/plugins/GeonamesPlugin.php
index 340a6f0bf..a750f1242 100644
--- a/plugins/GeonamesPlugin.php
+++ b/plugins/GeonamesPlugin.php
@@ -51,6 +51,11 @@ class GeonamesPlugin extends Plugin
{
const LOCATION_NS = 1;
+ public $host = 'ws.geonames.org';
+ public $username = null;
+ public $token = null;
+ public $expiry = 7776000; // 90-day expiry
+
/**
* convert a name into a Location object
*
@@ -75,12 +80,11 @@ class GeonamesPlugin extends Plugin
// XXX: break down a name by commas, narrow by each
- $str = http_build_query(array('maxRows' => 1,
- 'q' => $name,
- 'lang' => $language,
- 'type' => 'json'));
-
- $result = $client->get('http://ws.geonames.org/search?'.$str);
+ $result = $client->get($this->wsUrl('search',
+ array('maxRows' => 1,
+ 'q' => $name,
+ 'lang' => $language,
+ 'type' => 'json')));
if ($result->isOk()) {
$rj = json_decode($result->getBody());
@@ -135,10 +139,9 @@ class GeonamesPlugin extends Plugin
$client = HTTPClient::start();
- $str = http_build_query(array('geonameId' => $id,
- 'lang' => $language));
-
- $result = $client->get('http://ws.geonames.org/hierarchyJSON?'.$str);
+ $result = $client->get($this->wsUrl('hierarchyJSON',
+ array('geonameId' => $id,
+ 'lang' => $language)));
if ($result->isOk()) {
@@ -195,6 +198,9 @@ class GeonamesPlugin extends Plugin
function onLocationFromLatLon($lat, $lon, $language, &$location)
{
+ $lat = rtrim($lat, "0");
+ $lon = rtrim($lon, "0");
+
$loc = $this->getCache(array('lat' => $lat,
'lon' => $lon));
@@ -205,12 +211,11 @@ class GeonamesPlugin extends Plugin
$client = HTTPClient::start();
- $str = http_build_query(array('lat' => $lat,
- 'lng' => $lon,
- 'lang' => $language));
-
$result =
- $client->get('http://ws.geonames.org/findNearbyPlaceNameJSON?'.$str);
+ $client->get($this->wsUrl('findNearbyPlaceNameJSON',
+ array('lat' => $lat,
+ 'lng' => $lon,
+ 'lang' => $language)));
if ($result->isOk()) {
@@ -286,10 +291,9 @@ class GeonamesPlugin extends Plugin
$client = HTTPClient::start();
- $str = http_build_query(array('geonameId' => $location->location_id,
- 'lang' => $language));
-
- $result = $client->get('http://ws.geonames.org/hierarchyJSON?'.$str);
+ $result = $client->get($this->wsUrl('hierarchyJSON',
+ array('geonameId' => $location->location_id,
+ 'lang' => $language)));
if ($result->isOk()) {
@@ -376,33 +380,30 @@ class GeonamesPlugin extends Plugin
{
$c = common_memcache();
- if (!$c) {
+ if (empty($c)) {
return null;
}
- return $c->get($this->cacheKey($attrs));
+ $key = $this->cacheKey($attrs);
+
+ $value = $c->get($key);
+
+ return $value;
}
function setCache($attrs, $loc)
{
$c = common_memcache();
- if (!$c) {
+ if (empty($c)) {
return null;
}
- $c->set($this->cacheKey($attrs), $loc);
- }
-
- function clearCache($attrs)
- {
- $c = common_memcache();
+ $key = $this->cacheKey($attrs);
- if (!$c) {
- return null;
- }
+ $result = $c->set($key, $loc, 0, time() + $this->expiry);
- $c->delete($this->cacheKey($attrs));
+ return $result;
}
function cacheKey($attrs)
@@ -411,4 +412,19 @@ class GeonamesPlugin extends Plugin
implode(',', array_keys($attrs)) . ':'.
common_keyize(implode(',', array_values($attrs))));
}
+
+ function wsUrl($method, $params)
+ {
+ if (!empty($this->username)) {
+ $params['username'] = $this->username;
+ }
+
+ if (!empty($this->token)) {
+ $params['token'] = $this->token;
+ }
+
+ $str = http_build_query($params);
+
+ return 'http://'.$this->host.'/'.$method.'?'.$str;
+ }
}
diff --git a/plugins/GoogleAnalyticsPlugin.php b/plugins/GoogleAnalyticsPlugin.php
index 7f3d209ee..6891ee6a7 100644
--- a/plugins/GoogleAnalyticsPlugin.php
+++ b/plugins/GoogleAnalyticsPlugin.php
@@ -67,11 +67,7 @@ class GoogleAnalyticsPlugin extends Plugin
'pageTracker._trackPageview();'.
'} catch(err) {}',
$this->code);
- $action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw($js1);
- $action->elementEnd('script');
- $action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw($js2);
- $action->elementEnd('script');
+ $action->inlineScript($js1);
+ $action->inlineScript($js2);
}
}
diff --git a/plugins/Mapstraction/MapstractionPlugin.php b/plugins/Mapstraction/MapstractionPlugin.php
index c0c2c5b8e..93679e56c 100644
--- a/plugins/Mapstraction/MapstractionPlugin.php
+++ b/plugins/Mapstraction/MapstractionPlugin.php
@@ -90,6 +90,7 @@ class MapstractionPlugin extends Plugin
{
case 'AllmapAction':
case 'UsermapAction':
+ case 'MapAction':
include_once INSTALLDIR.'/plugins/Mapstraction/' . strtolower(mb_substr($cls, 0, -6)) . '.php';
return false;
default:
@@ -110,9 +111,9 @@ class MapstractionPlugin extends Plugin
function onEndShowScripts($action)
{
$actionName = $action->trimmed('action');
- // These are the ones that have maps on 'em
+
if (!in_array($actionName,
- array('showstream', 'all', 'allmap', 'usermap'))) {
+ array('showstream', 'all', 'usermap', 'allmap'))) {
return true;
}
@@ -147,43 +148,20 @@ class MapstractionPlugin extends Plugin
$action->script(common_path('plugins/Mapstraction/usermap.js'));
- $action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw(sprintf('var _provider = "%s";', $this->provider));
- $action->elementEnd('script');
+ $action->inlineScript(sprintf('var _provider = "%s";', $this->provider));
- switch ($actionName) {
- case 'usermap':
- case 'showstream':
- $notice = empty($action->tag)
- ? $action->user->getNotices(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1)
- : $action->user->getTaggedNotices($action->tag, ($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null);
- break;
- case 'all':
- case 'allmap':
- $cur = common_current_user();
- if (!empty($cur) && $cur->id == $action->user->id) {
- $notice = $action->user->noticeInbox(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
- } else {
- $notice = $action->user->noticesWithFriends(($action->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
- }
- break;
- }
-
- $jsonArray = array();
+ // usermap and allmap handle this themselves
- while ($notice->fetch()) {
- if (!empty($notice->lat) && !empty($notice->lon)) {
- $jsonNotice = $this->noticeAsJson($notice);
- $jsonArray[] = $jsonNotice;
- }
+ if (in_array($actionName,
+ array('showstream', 'all'))) {
+ $action->inlineScript('$(document).ready(function() { '.
+ ' var user = null; '.
+ (($actionName == 'showstream') ? ' user = scrapeUser(); ' : '') .
+ ' var notices = scrapeNotices(user); ' .
+ ' showMapstraction($("#map_canvas"), notices); '.
+ '});');
}
- $action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw('/*<![CDATA[*/'); // XHTML compat for Safari
- $action->raw('var _notices = ' . json_encode($jsonArray));
- $action->raw('/*]]>*/'); // XHTML compat for Safari
- $action->elementEnd('script');
-
return true;
}
@@ -199,7 +177,7 @@ class MapstractionPlugin extends Plugin
$action->elementStart('div', array('id' => 'entity_map',
'class' => 'section'));
- $action->element('h2', null, _('Map'));
+ $action->element('h2', null, _m('Map'));
$action->element('div', array('id' => 'map_canvas',
'class' => 'gray smallmap',
@@ -210,38 +188,8 @@ class MapstractionPlugin extends Plugin
array('nickname' => $action->trimmed('nickname')));
$action->element('a', array('href' => $mapUrl),
- _("Full size"));
+ _m("Full size"));
$action->elementEnd('div');
}
-
- function noticeAsJson($notice)
- {
- // FIXME: this code should be abstracted to a neutral third
- // party, like Notice::asJson(). I'm not sure of the ethics
- // of refactoring from within a plugin, so I'm just abusing
- // the ApiAction method. Don't do this unless you're me!
-
- require_once(INSTALLDIR.'/lib/api.php');
-
- $act = new ApiAction('/dev/null');
-
- $arr = $act->twitterStatusArray($notice, true);
- $arr['url'] = $notice->bestUrl();
- $arr['html'] = $notice->rendered;
- $arr['source'] = $arr['source'];
-
- if (!empty($notice->reply_to)) {
- $reply_to = Notice::staticGet('id', $notice->reply_to);
- if (!empty($reply_to)) {
- $arr['in_reply_to_status_url'] = $reply_to->bestUrl();
- }
- $reply_to = null;
- }
-
- $profile = $notice->getProfile();
- $arr['user']['profile_url'] = $profile->profileurl;
-
- return $arr;
- }
}
diff --git a/plugins/Mapstraction/allmap.php b/plugins/Mapstraction/allmap.php
index 6a48b141f..e73aa76e8 100644
--- a/plugins/Mapstraction/allmap.php
+++ b/plugins/Mapstraction/allmap.php
@@ -37,59 +37,26 @@ if (!defined('STATUSNET')) {
* @category Mapstraction
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
+ * @author Craig Andrews <candrews@integralblue.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-class AllmapAction extends OwnerDesignAction
+class AllmapAction extends MapAction
{
- var $profile = null;
- var $page = null;
- var $notices = null;
-
- public $plugin = null;
-
function prepare($args)
{
- parent::prepare($args);
-
- $nickname_arg = $this->arg('nickname');
- $nickname = common_canonical_nickname($nickname_arg);
-
- // Permanent redirect on non-canonical nickname
-
- if ($nickname_arg != $nickname) {
- $args = array('nickname' => $nickname);
- if ($this->arg('page') && $this->arg('page') != 1) {
- $args['page'] = $this->arg['page'];
+ if(parent::prepare($args)) {
+ $cur = common_current_user();
+ if (!empty($cur) && $cur->id == $this->user->id) {
+ $this->notice = $this->user->noticeInbox(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
+ } else {
+ $this->notice = $this->user->noticesWithFriends(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
}
- common_redirect(common_local_url($this->trimmed('action'), $args), 301);
- return false;
- }
-
- $this->user = User::staticGet('nickname', $nickname);
-
- if (!$this->user) {
- $this->clientError(_('No such user.'), 404);
- return false;
- }
-
- $this->profile = $this->user->getProfile();
-
- if (!$this->profile) {
- $this->serverError(_('User has no profile.'));
+ return true;
+ }else{
return false;
}
-
- $page = $this->trimmed('page');
-
- if (!empty($page) && Validate::number($page)) {
- $this->page = $page+0;
- } else {
- $this->page = 1;
- }
-
- return true;
}
function title()
@@ -101,25 +68,12 @@ class AllmapAction extends OwnerDesignAction
}
if ($this->page == 1) {
- return sprintf(_("%s friends map"),
+ return sprintf(_m("%s friends map"),
$base);
} else {
- return sprintf(_("%s friends map, page %d"),
+ return sprintf(_m("%s friends map, page %d"),
$base,
$this->page);
}
}
-
- function handle($args)
- {
- parent::handle($args);
- $this->showPage();
- }
-
- function showContent()
- {
- $this->element('div', array('id' => 'map_canvas',
- 'class' => 'gray smallmap',
- 'style' => "width: 100%; height: 400px"));
- }
-} \ No newline at end of file
+}
diff --git a/plugins/Mapstraction/locale/Mapstraction.po b/plugins/Mapstraction/locale/Mapstraction.po
new file mode 100644
index 000000000..c1c50bf50
--- /dev/null
+++ b/plugins/Mapstraction/locale/Mapstraction.po
@@ -0,0 +1,48 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: allmap.php:71
+#, php-format
+msgid "%s friends map"
+msgstr ""
+
+#: allmap.php:74
+#, php-format
+msgid "%s friends map, page %d"
+msgstr ""
+
+#: map.php:72
+msgid "No such user."
+msgstr ""
+
+#: map.php:79
+msgid "User has no profile."
+msgstr ""
+
+#: usermap.php:71
+#, php-format
+msgid "%s map, page %d"
+msgstr ""
+
+#: MapstractionPlugin.php:180
+msgid "Map"
+msgstr ""
+
+#: MapstractionPlugin.php:191
+msgid "Full size"
+msgstr ""
diff --git a/plugins/Mapstraction/map.php b/plugins/Mapstraction/map.php
new file mode 100644
index 000000000..a33dfc736
--- /dev/null
+++ b/plugins/Mapstraction/map.php
@@ -0,0 +1,167 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Show a map of user's notices
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Mapstraction
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2009 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Show a map of notices
+ *
+ * @category Mapstraction
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class MapAction extends OwnerDesignAction
+{
+ var $profile = null;
+ var $page = null;
+ var $notices = null;
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+
+ $nickname_arg = $this->arg('nickname');
+ $nickname = common_canonical_nickname($nickname_arg);
+
+ // Permanent redirect on non-canonical nickname
+
+ if ($nickname_arg != $nickname) {
+ $args = array('nickname' => $nickname);
+ if ($this->arg('page') && $this->arg('page') != 1) {
+ $args['page'] = $this->arg['page'];
+ }
+ common_redirect(common_local_url($this->trimmed('action'), $args), 301);
+ return false;
+ }
+
+ $this->user = User::staticGet('nickname', $nickname);
+
+ if (!$this->user) {
+ $this->clientError(_m('No such user.'), 404);
+ return false;
+ }
+
+ $this->profile = $this->user->getProfile();
+
+ if (!$this->profile) {
+ $this->serverError(_m('User has no profile.'));
+ return false;
+ }
+
+ $page = $this->trimmed('page');
+
+ if (!empty($page) && Validate::number($page)) {
+ $this->page = $page+0;
+ } else {
+ $this->page = 1;
+ }
+
+ $this->notices = empty($this->tag)
+ ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1)
+ : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null);
+
+ return true;
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+ $this->showPage();
+ }
+
+ function showContent()
+ {
+ $this->element('div', array('id' => 'map_canvas',
+ 'class' => 'gray smallmap',
+ 'style' => "width: 100%; height: 400px"));
+ }
+
+ /**
+ * Hook for adding extra JavaScript
+ *
+ * @param Action $action Action object for the page
+ *
+ * @return boolean event handler return
+ */
+
+ function showScripts()
+ {
+ parent::showScripts();
+ $jsonArray = array();
+
+ while ($this->notice->fetch()) {
+ if (!empty($this->notice->lat) && !empty($this->notice->lon)) {
+ $jsonNotice = $this->noticeAsJson($this->notice);
+ $jsonArray[] = $jsonNotice;
+ }
+ }
+
+ $this->inlineScript('$(document).ready(function() { '.
+ ' var _notices = ' . json_encode($jsonArray).'; ' .
+ 'showMapstraction($("#map_canvas"), _notices); });');
+
+ return true;
+ }
+
+ function noticeAsJson($notice)
+ {
+ // FIXME: this code should be abstracted to a neutral third
+ // party, like Notice::asJson(). I'm not sure of the ethics
+ // of refactoring from within a plugin, so I'm just abusing
+ // the ApiAction method. Don't do this unless you're me!
+
+ require_once(INSTALLDIR.'/lib/api.php');
+
+ $act = new ApiAction('/dev/null');
+
+ $arr = $act->twitterStatusArray($notice, true);
+ $arr['url'] = $notice->bestUrl();
+ $arr['html'] = $notice->rendered;
+ $arr['source'] = $arr['source'];
+
+ if (!empty($notice->reply_to)) {
+ $reply_to = Notice::staticGet('id', $notice->reply_to);
+ if (!empty($reply_to)) {
+ $arr['in_reply_to_status_url'] = $reply_to->bestUrl();
+ }
+ $reply_to = null;
+ }
+
+ $profile = $notice->getProfile();
+ $arr['user']['profile_url'] = $profile->profileurl;
+
+ return $arr;
+ }
+}
diff --git a/plugins/Mapstraction/usermap.js b/plugins/Mapstraction/usermap.js
index e667dd579..4b7a6c26b 100644
--- a/plugins/Mapstraction/usermap.js
+++ b/plugins/Mapstraction/usermap.js
@@ -1,40 +1,32 @@
-$(document).ready(function() {
+function scrapeNotices(user)
+{
var notices = [];
$(".notice").each(function(){
- var notice = getNoticeFromElement($(this));
- if(notice['geo'])
- notices.push(notice);
+ var notice = getNoticeFromElement($(this));
+ if (user) {
+ notice['user'] = user;
+ } else {
+ notice['user'] = getUserFromElement($(this));
+ }
+ if(notice['geo'])
+ notices.push(notice);
});
- if($("#map_canvas").length && notices.length>0)
- {
- showMapstraction($("#map_canvas"), notices);
- }
- $('.geo').click(function(){
- var noticeElement = $(this).closest(".notice");
- notice = getNoticeFromElement(noticeElement);
-
- $.fn.jOverlay.options = {
- color : '#000',
- opacity : '0.6',
- zIndex : 99,
- center : false,
- bgClickToClose : true,
- autoHide : true,
- css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'}
- };
- var html="<div id='map_canvas_popup' class='gray smallmap' style='width: 542px; height: 500px' />";
- html+="<button class='close'>&#215;</button>";
- html+=$("<div/>").append($(this).clone()).html();
- $().jOverlay({ "html": html });
- $('#jOverlayContent').show();
- $('#jOverlayContent button').click($.closeOverlay);
-
- showMapstraction($("#map_canvas_popup"), notice);
-
- return false;
- });
-});
+ return notices;
+}
+
+function scrapeUser()
+{
+ var avatarURL = $(".entity_profile .entity_depiction img.avatar").attr('src');
+ var profileURL = $(".entity_profile .entity_nickname .url").attr('href');
+ var nickname = $(".entity_profile .entity_nickname .nickname").text();
+
+ return {
+ 'profile_image_url': avatarURL,
+ 'profile_url': profileURL,
+ 'screen_name': nickname
+ };
+}
function getMicroformatValue(element)
{
@@ -48,23 +40,34 @@ function getMicroformatValue(element)
function getNoticeFromElement(noticeElement)
{
var notice = {};
- if(noticeElement.find(".geo").length){
+
+ if(noticeElement.find(".geo").length) {
var latlon = noticeElement.find(".geo").attr('title').split(";");
notice['geo']={'coordinates': [
parseFloat(latlon[0]),
parseFloat(latlon[1])] };
}
- notice['user']={
- 'profile_image_url': noticeElement.find("img.avatar").attr('src'),
- 'profile_url': noticeElement.find(".author a.url").attr('href'),
- 'screen_name': noticeElement.find(".author .nickname").text()
- };
- notice['html']=noticeElement.find(".entry-content").html();
- notice['url']=noticeElement.find("a.timestamp").attr('href');
- notice['created_at']=noticeElement.find("abbr.published").text();
+
+ notice['html'] = noticeElement.find(".entry-content").html();
+ notice['url'] = noticeElement.find("a.timestamp").attr('href');
+ notice['created_at'] = noticeElement.find("abbr.published").text();
+
return notice;
}
+function getUserFromElement(noticeElement)
+{
+ var avatarURL = noticeElement.find("img.avatar").attr('src');
+ var profileURL = noticeElement.find(".author a.url").attr('href');
+ var nickname = noticeElement.find(".author .nickname").text();
+
+ return {
+ 'profile_image_url': avatarURL,
+ 'profile_url': profileURL,
+ 'screen_name': nickname
+ };
+}
+
function showMapstraction(element, notices) {
if(element instanceof jQuery) element = element[0];
if(! $.isArray(notices)) notices = [notices];
diff --git a/plugins/Mapstraction/usermap.php b/plugins/Mapstraction/usermap.php
index fbf1469c3..ff47b6ada 100644
--- a/plugins/Mapstraction/usermap.php
+++ b/plugins/Mapstraction/usermap.php
@@ -37,61 +37,24 @@ if (!defined('STATUSNET')) {
* @category Mapstraction
* @package StatusNet
* @author Evan Prodromou <evan@status.net>
+ * @author Craig Andrews <candrews@integralblue.com>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
-class UsermapAction extends OwnerDesignAction
+class UsermapAction extends MapAction
{
- var $profile = null;
- var $page = null;
- var $notices = null;
-
- public $plugin = null;
function prepare($args)
{
- parent::prepare($args);
-
- $nickname_arg = $this->arg('nickname');
- $nickname = common_canonical_nickname($nickname_arg);
-
- // Permanent redirect on non-canonical nickname
-
- if ($nickname_arg != $nickname) {
- $args = array('nickname' => $nickname);
- if ($this->arg('page') && $this->arg('page') != 1) {
- $args['page'] = $this->arg['page'];
- }
- common_redirect(common_local_url($this->trimmed('action'), $args), 301);
+ if(parent::prepare($args)) {
+ $this->notice = empty($this->tag)
+ ? $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1)
+ : $this->user->getTaggedNotices($this->tag, ($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1, 0, 0, null);
+ return true;
+ }else{
return false;
}
-
- $this->user = User::staticGet('nickname', $nickname);
-
- if (!$this->user) {
- $this->clientError(_('No such user.'), 404);
- return false;
- }
-
- $this->profile = $this->user->getProfile();
-
- if (!$this->profile) {
- $this->serverError(_('User has no profile.'));
- return false;
- }
-
- $page = $this->trimmed('page');
-
- if (!empty($page) && Validate::number($page)) {
- $this->page = $page+0;
- } else {
- $this->page = 1;
- }
-
- $this->notices = $this->user->getNotices(($this->page-1)*NOTICES_PER_PAGE, NOTICES_PER_PAGE + 1);
-
- return true;
}
function title()
@@ -105,22 +68,9 @@ class UsermapAction extends OwnerDesignAction
if ($this->page == 1) {
return $base;
} else {
- return sprintf(_("%s map, page %d"),
+ return sprintf(_m("%s map, page %d"),
$base,
$this->page);
}
}
-
- function handle($args)
- {
- parent::handle($args);
- $this->showPage();
- }
-
- function showContent()
- {
- $this->element('div', array('id' => 'map_canvas',
- 'class' => 'gray smallmap',
- 'style' => "width: 100%; height: 400px"));
- }
-} \ No newline at end of file
+}
diff --git a/plugins/Minify/MinifyPlugin.php b/plugins/Minify/MinifyPlugin.php
new file mode 100644
index 000000000..71fade19a
--- /dev/null
+++ b/plugins/Minify/MinifyPlugin.php
@@ -0,0 +1,168 @@
+<?php
+/*
+StatusNet Plugin: 0.9
+Plugin Name: Minify
+Description: Minifies resources (Javascript and CSS)
+Version: 0.1
+Author: Craig Andrews <candrews@integralblue.com>
+Author URI: http://candrews.integralblue.com/
+*/
+
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package MinifyPlugin
+ * @maintainer Craig Andrews <candrews@integralblue.com>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+// We bundle the minify library...
+set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/extlib/minify/min/lib');
+
+class MinifyPlugin extends Plugin
+{
+ private $minifyInlineJs = true;
+ private $minifyInlineCss = true;
+
+ const cacheKey = 'minify';
+
+ /**
+ * Add Minification related paths to the router table
+ *
+ * Hook for RouterInitialized event.
+ *
+ * @return boolean hook return
+ */
+
+ function onStartInitializeRouter($m)
+ {
+ $m->connect('main/min',
+ array('action' => 'minify'));
+ return true;
+ }
+
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'MinifyAction':
+ require_once(INSTALLDIR.'/plugins/Minify/' . strtolower(mb_substr($cls, 0, -6)) . '.php');
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ function onLoginAction($action, &$login)
+ {
+ switch ($action)
+ {
+ case 'minify':
+ $login = true;
+ return false;
+ default:
+ return true;
+ }
+ }
+
+ function onStartScriptElement($action,&$src,&$type) {
+ $url = parse_url($src);
+ if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ {
+ $src = $this->minifyUrl($src);
+ }
+ }
+
+ function onStartCssLinkElement($action,&$src,&$theme,&$media) {
+ $allowThemeMinification =
+ is_null(common_config('theme', 'dir'))
+ && is_null(common_config('theme', 'path'))
+ && is_null(common_config('theme', 'server'));
+ $url = parse_url($src);
+ if( empty($url->scheme) && empty($url->host) && empty($url->query) && empty($url->fragment))
+ {
+ if(!isset($theme)) {
+ $theme = common_config('site', 'theme');
+ }
+ if($allowThemeMinification && file_exists(INSTALLDIR.'/local/theme/'.$theme.'/'.$src)) {
+ $src = $this->minifyUrl('local/theme/'.$theme.'/'.$src);
+ } else if($allowThemeMinification && file_exists(INSTALLDIR.'/theme/'.$theme.'/'.$src)) {
+ $src = $this->minifyUrl('theme/'.$theme.'/'.$src);
+ }else if(file_exists(INSTALLDIR.'/'.$src)){
+ $src = $this->minifyUrl($src);
+ }
+ }
+ }
+
+ function onStartInlineScriptElement($action,&$code,&$type)
+ {
+ if($this->minifyInlineJs && $type=='text/javascript'){
+ $c = common_memcache();
+ if (!empty($c)) {
+ $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code));
+ $out = $c->get($cacheKey);
+ }
+ if(empty($out)) {
+ $out = $this->minifyJs($code);
+ }
+ if (!empty($c)) {
+ $c->set($cacheKey, $out);
+ }
+ if(!empty($out)) {
+ $code = $out;
+ }
+ }
+ }
+
+ function onStartStyleElement($action,&$code,&$type,&$media)
+ {
+ if($this->minifyInlineCss && $type=='text/css'){
+ $c = common_memcache();
+ if (!empty($c)) {
+ $cacheKey = common_cache_key(self::cacheKey . ':' . crc32($code));
+ $out = $c->get($cacheKey);
+ }
+ if(empty($out)) {
+ $out = $this->minifyCss($code);
+ }
+ if (!empty($c)) {
+ $c->set($cacheKey, $out);
+ }
+ if(!empty($out)) {
+ $code = $out;
+ }
+ }
+ }
+
+ function minifyUrl($src) {
+ return common_local_url('minify',null,array('f' => $src ,v => STATUSNET_VERSION));
+ }
+
+ static function minifyJs($code) {
+ require_once('JSMin.php');
+ return JSMin::minify($code);
+ }
+
+ static function minifyCss($code, $options = array()) {
+ require_once('Minify/CSS.php');
+ return Minify_CSS::minify($code,$options);
+ }
+}
+
diff --git a/plugins/Minify/README b/plugins/Minify/README
new file mode 100644
index 000000000..f7763735e
--- /dev/null
+++ b/plugins/Minify/README
@@ -0,0 +1,34 @@
+The Minify plugin minifies your CSS and Javascript, removing whitespace and comments.
+
+Note that if enabled this plugin and use a theme server,
+ (if any of $config['theme']['server'], $config['theme']['path'],
+ $config['theme']['dir'] are set) theme CSS will not be minified.
+
+This plugin will use memcache, if it is available, for storing minified inline
+ and file javascript and css. Because minification is non-trivial, using
+ memcache is recommended.
+
+Installation
+============
+add "addPlugin('minify',
+ array('setting'=>'value', 'setting2'=>'value2', ...);"
+to the bottom of your config.php
+
+Settings
+========
+minifyInlineJs (true): Minify inline javascript.
+ Because caching isn'tas effective for inline resources (due to its more
+ dynamic nature) than static files, minifying inline resources may adversely
+ affect performance for higher volume sites. Testing (and memcache usage)
+ are highly recommended.
+minifyInlineCss (true): Minify inline CSS.
+ Because caching isn'tas effective for inline resources (due to its more
+ dynamic nature) than static files, minifying inline resources may adversely
+ affect performance for higher volume sites. Testing (and memcache usage)
+ are highly recommended.
+
+Example
+=======
+
+addPlugin('minify', array());
+
diff --git a/plugins/Minify/extlib/minify/HISTORY.txt b/plugins/Minify/extlib/minify/HISTORY.txt
new file mode 100644
index 000000000..95a46c87e
--- /dev/null
+++ b/plugins/Minify/extlib/minify/HISTORY.txt
@@ -0,0 +1,75 @@
+Minify Release History
+
+Version 2.1.3
+ * HTTP fixes
+ * ETag generation now valid (different when gzipped)
+ * Vary header always sent when Accept-Encoding is sniffed
+ * Cache-Control no longer has "must-revalidate" due to webkit bug
+ See: http://mrclay.org/index.php/2009/02/24/safari-4-beta-cache-controlmust-revalidate-bug/
+ * Dropped deflate encoding. Browser and proxy support could be buggy.
+ See: http://stackoverflow.com/questions/883841/
+ * File cache now works w/o setting $min_cachePath
+ * Allow setting contentType in Minify_Source objects
+ * No more 5.3 deprecation warnings: split() removed
+
+Version 2.1.2
+ * Javascript fixes
+ * Debug mode no longer confused by "*/*" in strings/RegExps (jQuery)
+ * quote characters inside RegExp literals no longer cause exception
+ * files ending in single-line comments no longer cause code loss
+ * CSS: data: URLs no longer mangled
+ * Optional error logging to Firefox's FirePHP extension
+ * Unit tests to check for common DOCUMENT_ROOT problems
+ * DOCUMENT_ROOT no longer overwritten on IIS servers
+ * Builder app doesn't fail on systems without gzdeflate()
+ * APC caching class included
+
+Version 2.1.1
+ * Bug fix release
+ * Detection and workarounds for zlib.output_compression and non-PHP encoding modules
+ * Zlib not required (mod_rewrite, et.al., can still be used for encoding)
+ * HTML : More IE conditional comments preserved
+ * Minify_groupUri() utility fixed
+
+Version 2.1.0
+ * "min" default application for quick deployment
+ * Minify URI Builder app & bookmarklet for quickly creating minify URIs
+ * Relative URIs in CSS file are fixed automatically by default
+ * "debug" mode for revealing original line #s in combined files
+ * Better IIS support
+ * Improved minifier classes:
+ * JS: preserves IE conditional comments
+ * CSS: smaller output, preserves more hacks and valid CSS syntax,
+ shorter line lengths, other bug fixes
+ * HTML: smaller output, shorter line lengths, other bug fixes
+ * Default Cache-Control: max-age of 30 minutes
+ * Conditional GETs supported even when max-age sent
+ * Experimental memcache cache class (default is files)
+ * Minify_Cache_File has flock()s (by default)
+ * Workaround for Windows mtime reporting bug
+
+Version 2.0.2 beta (2008-06-24)
+ * Fast new cache system. Cached files served almost 3x as fast.
+ * Dropped support of compress encoding (though HTTP_Encoder still supports it)
+
+Version 2.0.1 (2008-05-31)
+ * E_STRICT compliance (Cache_Lite_File).
+
+Version 2.0.0 (2008-05-22)
+ * Complete code overhaul. Minify is now a PEAR-style class and toolkit
+ for building customized minifying file servers.
+ * Content-Encoding: deflate/gzip/compress, based on request headers
+ * Expanded CSS and HTML minifiers with test cases
+ * Easily plug-in 3rd-party minifiers (like Packer)
+ * Plug-able front end controller allows changing the way files are chosen
+ * Compression & encoding modules lazy-loaded as needed (304 responses use
+ use minimal code)
+ * Separate utility classes for HTTP encoding and cache control
+
+Version 1.0.1 (2007-05-05)
+ * Fixed various problems resolving pathnames when hosted on an NFS mount.
+ * Fixed 'undefined constant' notice.
+ * Replaced old JSMin library with a much faster custom implementation.
+
+Version 1.0.0 (2007-05-02)
+ * First release. \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/LICENSE.txt b/plugins/Minify/extlib/minify/LICENSE.txt
new file mode 100644
index 000000000..8f008adb5
--- /dev/null
+++ b/plugins/Minify/extlib/minify/LICENSE.txt
@@ -0,0 +1,26 @@
+Copyright (c) 2008 Ryan Grove <ryan@wonko.com>
+Copyright (c) 2008 Steve Clay <steve@mrclay.org>
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of this project nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/plugins/Minify/extlib/minify/README.txt b/plugins/Minify/extlib/minify/README.txt
new file mode 100644
index 000000000..3899b9953
--- /dev/null
+++ b/plugins/Minify/extlib/minify/README.txt
@@ -0,0 +1,53 @@
+WELCOME TO MINIFY 2.1!
+
+Minify is an HTTP content server. It compresses sources of content
+(usually files), combines the result and serves it with appropriate
+HTTP headers. These headers can allow clients to perform conditional
+GETs (serving content only when clients do not have a valid cache)
+and tell clients to cache the file for a period of time.
+More info: http://code.google.com/p/minify/
+
+
+UPGRADING
+
+See UPGRADING.txt for instructions.
+
+
+INSTALLATION AND USAGE:
+
+1. Place the /min/ directory as a child of your DOCUMENT_ROOT
+directory: i.e. you will have: /home/user/www/public_html/min
+
+2. Open http://yourdomain/min/ in a web browser. This will forward
+you to the Minify URI Builder application, which will help you
+quickly start using Minify to serve content on your site.
+
+
+UNIT TESTING:
+
+1. Place the /min_unit_tests/ directory as a child of your DOCUMENT_ROOT
+directory: i.e. you will have: /home/user/www/public_html/min_unit_tests
+
+2. To run unit tests, access: http://yourdomain/min_unit_tests/test_all.php
+
+(If you wish, the other test_*.php files can be run to test individual
+components with more verbose output.)
+
+3. Remove /min_unit_tests/ from your DOCUMENT_ROOT when you are done.
+
+
+EXTRAS:
+
+The min_extras folder contains files for benchmarking using Apache ab on Windows
+and a couple single-use tools. DO NOT place this on your production server.
+
+
+FILE ENCODINGS
+
+Minify *should* work fine with files encoded in UTF-8 or other 8-bit
+encodings like ISO 8859/Windows-1252. By default Minify appends
+";charset=utf-8" to the Content-Type headers it sends.
+
+Leading UTF-8 BOMs are stripped from all sources to prevent
+duplication in output files, and files are converted to Unix newlines.
+
diff --git a/plugins/Minify/extlib/minify/UPGRADING.txt b/plugins/Minify/extlib/minify/UPGRADING.txt
new file mode 100644
index 000000000..5025faf9b
--- /dev/null
+++ b/plugins/Minify/extlib/minify/UPGRADING.txt
@@ -0,0 +1,35 @@
+Minify Upgrade Guide
+
+UPGRADING FROM 2.1.*
+
+1. Rename the following files:
+
+ /min/config.php --> /min/old_config.php
+ /min/groupsConfig.php --> /min/old_groupsConfig.php
+
+2. Overwrite all files in /min (and /min_unit_tests) with those from this zip.
+
+3. Delete /min/groupsConfig.php
+
+4. Rename /min/old_groupsConfig.php --> /min/groupsConfig.php
+
+5. Merge your settings in old_config.php into config.php.
+
+ * If you've set $_SERVER['DOCUMENT_ROOT'], instead set the new option
+ $min_documentRoot. This is advantageous on IIS systems because Minify
+ will no longer overwrite the path you specified.
+
+ * $min_errorLogger adds the ability to enable FirePHP logging.
+
+6. (optional) Delete /min/old_config.php and the Minify files from your cache
+ directory (specified in $min_cachePath).
+
+
+INSTALLING FRESH
+
+See README.txt for instructions on installing this app for the first time.
+
+
+SUPPORT
+
+Send a message to http://groups.google.com/group/minify \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/README.txt b/plugins/Minify/extlib/minify/min/README.txt
new file mode 100644
index 000000000..a7cf774a1
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/README.txt
@@ -0,0 +1,132 @@
+The files in this directory represent the default Minify setup designed to ease
+integration with your site. This app will combine and minify your Javascript or
+CSS files and serve them with HTTP compression and cache headers.
+
+
+RECOMMENDED
+
+It's recommended to edit config.php to set $min_cachePath to a writeable
+(by PHP) directory on your system. This will improve performance.
+
+
+GETTING STARTED
+
+The quickest way to get started is to use the Minify URI Builder application
+on your website: http://example.com/min/builder/
+
+
+MINIFYING A SINGLE FILE
+
+Let's say you want to serve this file:
+ http://example.com/wp-content/themes/default/default.css
+
+Here's the "Minify URL" for this file:
+ http://example.com/min/?f=wp-content/themes/default/default.css
+
+In other words, the "f" argument is set to the file path from root without the
+initial "/". As CSS files may contain relative URIs, Minify will automatically
+"fix" these by rewriting them as root relative.
+
+
+COMBINING MULTIPLE FILES IN ONE DOWNLOAD
+
+Separate the paths given to "f" with commas.
+
+Let's say you have CSS files at these URLs:
+ http://example.com/scripts/jquery-1.2.6.js
+ http://example.com/scripts/site.js
+
+You can combine these files through Minify by requesting this URL:
+ http://example.com/min/?f=scripts/jquery-1.2.6.js,scripts/site.js
+
+
+SIMPLIFYING URLS WITH A BASE PATH
+
+If you're combining files that share the same ancestor directory, you can use
+the "b" argument to set the base directory for the "f" argument. Do not include
+the leading or trailing "/" characters.
+
+E.g., the following URLs will serve the exact same content:
+ http://example.com/min/?f=scripts/jquery-1.2.6.js,scripts/site.js,scripts/home.js
+ http://example.com/min/?b=scripts&f=jquery-1.2.6.js,site.js,home.js
+
+
+MINIFY URLS IN HTML
+
+In (X)HTML files, don't forget to replace any "&" characters with "&amp;".
+
+
+SPECIFYING ALLOWED DIRECTORIES
+
+By default, Minify will serve any *.css/*.js files within the DOCUMENT_ROOT. If
+you'd prefer to limit Minify's access to certain directories, set the
+$min_serveOptions['minApp']['allowDirs'] array in config.php. E.g. to limit
+to the /js and /themes/default directories, use:
+
+$min_serveOptions['minApp']['allowDirs'] = array('//js', '//themes/default');
+
+
+GROUPS: FASTER PERFORMANCE AND BETTER URLS
+
+For the best performance, edit groupsConfig.php to pre-specify groups of files
+to be combined under preset keys. E.g., here's an example configuration in
+groupsConfig.php:
+
+return array(
+ 'js' => array('//js/Class.js', '//js/email.js')
+);
+
+This pre-selects the following files to be combined under the key "js":
+ http://example.com/js/Class.js
+ http://example.com/js/email.js
+
+You can now serve these files with this simple URL:
+ http://example.com/min/?g=js
+
+
+GROUPS: SPECIFYING FILES OUTSIDE THE DOC_ROOT
+
+In the groupsConfig.php array, the "//" in the file paths is a shortcut for
+the DOCUMENT_ROOT, but you can also specify paths from the root of the filesystem
+or relative to the DOC_ROOT:
+
+return array(
+ 'js' => array(
+ '//js/file.js' // file within DOC_ROOT
+ ,'//../file.js' // file in parent directory of DOC_ROOT
+ ,'C:/Users/Steve/file.js' // file anywhere on filesystem
+ )
+);
+
+
+FAR-FUTURE EXPIRES HEADERS
+
+Minify can send far-future (one year) Expires headers. To enable this you must
+add a number to the querystring (e.g. /min/?g=js&1234 or /min/f=file.js&1234)
+and alter it whenever a source file is changed. If you have a build process you
+can use a build/source control revision number.
+
+If you serve files as a group, you can use the utility function Minify_groupUri()
+to get a "versioned" Minify URI for use in your HTML. E.g.:
+
+<?php
+// add /min/lib to your include_path first!
+require $_SERVER['DOCUMENT_ROOT'] . '/min/utils.php';
+
+$jsUri = Minify_groupUri('js');
+echo "<script type='text/javascript' src='{$jsUri}'></script>";
+
+
+DEBUG MODE
+
+In debug mode, instead of compressing files, Minify sends combined files with
+comments prepended to each line to show the line number in the original source
+file. To enable this, set $min_allowDebugFlag to true in config.php and append
+"&debug=1" to your URIs. E.g. /min/?f=script1.js,script2.js&debug=1
+
+Known issue: files with comment-like strings/regexps can cause problems in this mode.
+
+
+QUESTIONS?
+
+http://groups.google.com/group/minify \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/builder/_index.js b/plugins/Minify/extlib/minify/min/builder/_index.js
new file mode 100644
index 000000000..8e5313a3b
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/builder/_index.js
@@ -0,0 +1,242 @@
+var MUB = {
+ _uid : 0
+ ,_minRoot : '/min/?'
+ ,checkRewrite : function () {
+ var testUri = location.pathname.replace(/\/[^\/]*$/, '/rewriteTest.js').substr(1);
+ function fail() {
+ $('#minRewriteFailed')[0].className = 'topNote';
+ };
+ $.ajax({
+ url : '../f=' + testUri + '&' + (new Date()).getTime()
+ ,success : function (data) {
+ if (data === '1') {
+ MUB._minRoot = '/min/';
+ $('span.minRoot').html('/min/');
+ } else
+ fail();
+ }
+ ,error : fail
+ });
+ }
+ /**
+ * Get markup for new source LI element
+ */
+ ,newLi : function () {
+ return '<li id="li' + MUB._uid + '">http://' + location.host + '/<input type=text size=20>'
+ + ' <button title="Remove">x</button> <button title="Include Earlier">&uarr;</button>'
+ + ' <button title="Include Later">&darr;</button> <span></span></li>';
+ }
+ /**
+ * Add new empty source LI and attach handlers to buttons
+ */
+ ,addLi : function () {
+ $('#sources').append(MUB.newLi());
+ var li = $('#li' + MUB._uid)[0];
+ $('button[title=Remove]', li).click(function () {
+ $('#results').hide();
+ var hadValue = !!$('input', li)[0].value;
+ $(li).remove();
+ });
+ $('button[title$=Earlier]', li).click(function () {
+ $(li).prev('li').find('input').each(function () {
+ $('#results').hide();
+ // this = previous li input
+ var tmp = this.value;
+ this.value = $('input', li).val();
+ $('input', li).val(tmp);
+ MUB.updateAllTestLinks();
+ });
+ });
+ $('button[title$=Later]', li).click(function () {
+ $(li).next('li').find('input').each(function () {
+ $('#results').hide();
+ // this = next li input
+ var tmp = this.value;
+ this.value = $('input', li).val();
+ $('input', li).val(tmp);
+ MUB.updateAllTestLinks();
+ });
+ });
+ ++MUB._uid;
+ }
+ /**
+ * In the context of a source LI element, this will analyze the URI in
+ * the INPUT and check the URL on the site.
+ */
+ ,liUpdateTestLink : function () { // call in context of li element
+ if (! $('input', this)[0].value)
+ return;
+ var li = this;
+ $('span', this).html('');
+ var url = 'http://' + location.host + '/'
+ + $('input', this)[0].value.replace(/^\//, '');
+ $.ajax({
+ url : url
+ ,complete : function (xhr, stat) {
+ if ('success' == stat)
+ $('span', li).html('&#x2713;');
+ else {
+ $('span', li).html('<button><b>404! </b> recheck</button>')
+ .find('button').click(function () {
+ MUB.liUpdateTestLink.call(li);
+ });
+ }
+ }
+ ,dataType : 'text'
+ });
+ }
+ /**
+ * Check all source URLs
+ */
+ ,updateAllTestLinks : function () {
+ $('#sources li').each(MUB.liUpdateTestLink);
+ }
+ /**
+ * In a given array of strings, find the character they all have at
+ * a particular index
+ * @param Array arr array of strings
+ * @param Number pos index to check
+ * @return mixed a common char or '' if any do not match
+ */
+ ,getCommonCharAtPos : function (arr, pos) {
+ var i
+ ,l = arr.length
+ ,c = arr[0].charAt(pos);
+ if (c === '' || l === 1)
+ return c;
+ for (i = 1; i < l; ++i)
+ if (arr[i].charAt(pos) !== c)
+ return '';
+ return c;
+ }
+ /**
+ * Get the shortest URI to minify the set of source files
+ * @param Array sources URIs
+ */
+ ,getBestUri : function (sources) {
+ var pos = 0
+ ,base = ''
+ ,c;
+ while (true) {
+ c = MUB.getCommonCharAtPos(sources, pos);
+ if (c === '')
+ break;
+ else
+ base += c;
+ ++pos;
+ }
+ base = base.replace(/[^\/]+$/, '');
+ var uri = MUB._minRoot + 'f=' + sources.join(',');
+ if (base.charAt(base.length - 1) === '/') {
+ // we have a base dir!
+ var basedSources = sources
+ ,i
+ ,l = sources.length;
+ for (i = 0; i < l; ++i) {
+ basedSources[i] = sources[i].substr(base.length);
+ }
+ base = base.substr(0, base.length - 1);
+ var bUri = MUB._minRoot + 'b=' + base + '&f=' + basedSources.join(',');
+ //window.console && console.log([uri, bUri]);
+ uri = uri.length < bUri.length
+ ? uri
+ : bUri;
+ }
+ return uri;
+ }
+ /**
+ * Create the Minify URI for the sources
+ */
+ ,update : function () {
+ MUB.updateAllTestLinks();
+ var sources = []
+ ,ext = false
+ ,fail = false;
+ $('#sources input').each(function () {
+ var m, val;
+ if (! fail && this.value && (m = this.value.match(/\.(css|js)$/))) {
+ var thisExt = m[1];
+ if (ext === false)
+ ext = thisExt;
+ else if (thisExt !== ext) {
+ fail = true;
+ return alert('extensions must match!');
+ }
+ this.value = this.value.replace(/^\//, '');
+ if (-1 != $.inArray(this.value, sources)) {
+ fail = true;
+ return alert('duplicate file!');
+ }
+ sources.push(this.value);
+ }
+ });
+ if (fail || ! sources.length)
+ return;
+ $('#groupConfig').val(" 'keyName' => array('//" + sources.join("', '//") + "'),");
+ var uri = MUB.getBestUri(sources)
+ ,uriH = uri.replace(/</, '&lt;').replace(/>/, '&gt;').replace(/&/, '&amp;');
+ $('#uriA').html(uriH)[0].href = uri;
+ $('#uriHtml').val(
+ ext === 'js'
+ ? '<script type="text/javascript" src="' + uriH + '"></script>'
+ : '<link type="text/css" rel="stylesheet" href="' + uriH + '" />'
+ );
+ $('#results').show();
+ }
+ /**
+ * Handler for the "Add file +" button
+ */
+ ,addButtonClick : function () {
+ $('#results').hide();
+ MUB.addLi();
+ MUB.updateAllTestLinks();
+ $('#update').show().click(MUB.update);
+ $('#sources li:last input')[0].focus();
+ }
+ /**
+ * Runs on DOMready
+ */
+ ,init : function () {
+ $('#app').show();
+ $('#sources').html('');
+ $('#add button').click(MUB.addButtonClick);
+ // make easier to copy text out of
+ $('#uriHtml, #groupConfig').click(function () {
+ this.select();
+ }).focus(function () {
+ this.select();
+ });
+ $('a.ext').attr({target:'_blank'});
+ if (location.hash) {
+ // make links out of URIs from bookmarklet
+ $('#getBm').hide();
+ $('#bmUris').html('<p><strong>Found by bookmarklet:</strong> /<a href=#>'
+ + location.hash.substr(1).split(',').join('</a> | /<a href=#>')
+ + '</a></p>'
+ );
+ $('#bmUris a').click(function () {
+ MUB.addButtonClick();
+ $('#sources li:last input').val(this.innerHTML)
+ MUB.liUpdateTestLink.call($('#sources li:last')[0]);
+ $('#results').hide();
+ return false;
+ }).attr({title:'Add file +'});
+ } else {
+ // copy bookmarklet code into href
+ var bmUri = location.pathname.replace(/\/[^\/]*$/, '/bm.js').substr(1);
+ $.ajax({
+ url : '../?f=' + bmUri
+ ,success : function (code) {
+ $('#bm')[0].href = code
+ .replace('%BUILDER_URL%', location.href)
+ .replace(/\n/g, ' ');
+ }
+ ,dataType : 'text'
+ });
+ $.browser.msie && $('#getBm p:last').append(' Sorry, not supported in MSIE!');
+ MUB.addButtonClick();
+ }
+ MUB.checkRewrite();
+ }
+};
+window.onload = MUB.init; \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/builder/bm.js b/plugins/Minify/extlib/minify/min/builder/bm.js
new file mode 100644
index 000000000..10d194381
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/builder/bm.js
@@ -0,0 +1,36 @@
+javascript:(function() {
+ var d = document
+ ,uris = []
+ ,i = 0
+ ,o
+ ,home = (location + '').split('/').splice(0, 3).join('/') + '/';
+ function add(uri) {
+ return (0 === uri.indexOf(home))
+ && (!/[\?&]/.test(uri))
+ && uris.push(escape(uri.substr(home.length)));
+ };
+ function sheet(ss) {
+ // we must check the domain with add() before accessing ss.cssRules
+ // otherwise a security exception will be thrown
+ if (ss.href && add(ss.href) && ss.cssRules) {
+ var i = 0, r;
+ while (r = ss.cssRules[i++])
+ r.styleSheet && sheet(r.styleSheet);
+ }
+ };
+ while (o = d.getElementsByTagName('script')[i++])
+ o.src && !(o.type && /vbs/i.test(o.type)) && add(o.src);
+ i = 0;
+ while (o = d.styleSheets[i++])
+ /* http://www.w3.org/TR/DOM-Level-2-Style/stylesheets.html#StyleSheets-DocumentStyle-styleSheets
+ document.styleSheet is a list property where [0] accesses the 1st element and
+ [outOfRange] returns null. In IE, styleSheets is a function, and also throws an
+ exception when you check the out of bounds index. (sigh) */
+ sheet(o);
+ if (uris.length)
+ window.open('%BUILDER_URL%#' + uris.join(','));
+ else
+ alert('No js/css files found with URLs within "'
+ + home.split('/')[2]
+ + '".\n(This tool is limited to URLs with the same domain.)');
+})(); \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/builder/index.php b/plugins/Minify/extlib/minify/min/builder/index.php
new file mode 100644
index 000000000..1b2098222
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/builder/index.php
@@ -0,0 +1,182 @@
+<?php
+
+if (phpversion() < 5) {
+ exit('Minify requires PHP5 or greater.');
+}
+
+// check for auto-encoding
+$encodeOutput = (function_exists('gzdeflate')
+ && !ini_get('zlib.output_compression'));
+
+require dirname(__FILE__) . '/../config.php';
+
+if (! $min_enableBuilder) {
+ header('Location: /');
+ exit();
+}
+
+ob_start();
+?>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<head>
+ <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
+ <title>Minify URI Builder</title>
+ <style type="text/css">
+body {margin:1em 60px;}
+h1, h2, h3 {margin-left:-25px; position:relative;}
+h1 {margin-top:0;}
+#sources {margin:0; padding:0;}
+#sources li {margin:0 0 0 40px}
+#sources li input {margin-left:2px}
+#add {margin:5px 0 1em 40px}
+.hide {display:none}
+#uriTable {border-collapse:collapse;}
+#uriTable td, #uriTable th {padding-top:10px;}
+#uriTable th {padding-right:10px;}
+#groupConfig {font-family:monospace;}
+b {color:#c00}
+.topNote {background: #ff9; display:inline-block; padding:.5em .6em; margin:0 0 1em;}
+.topWarning {background:#c00; color:#fff; padding:.5em .6em; margin:0 0 1em;}
+ </style>
+</head>
+
+<?php if (! isset($min_cachePath)): ?>
+<p class=topNote><strong>Note:</strong> Please set <code>$min_cachePath</code>
+in /min/config.php to improve performance.</p>
+<?php endIf; ?>
+
+<p id=minRewriteFailed class="hide"><strong>Note:</strong> Your webserver does not seem to
+ support mod_rewrite (used in /min/.htaccess). Your Minify URIs will contain "?", which
+<a href="http://www.stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring/"
+>may reduce the benefit of proxy cache servers</a>.</p>
+
+<h1>Minify URI Builder</h1>
+
+<noscript><p class="topNote">Javascript and a browser supported by jQuery 1.2.6 is required
+for this application.</p></noscript>
+
+<div id=app class=hide>
+
+<p>Create a list of Javascript or CSS files (or 1 is fine) you'd like to combine
+and click [Update].</p>
+
+<ol id=sources><li></li></ol>
+<div id=add><button>Add file +</button></div>
+
+<div id=bmUris></div>
+
+<p><button id=update class=hide>Update</button></p>
+
+<div id=results class=hide>
+
+<h2>Minify URI</h2>
+<p>Place this URI in your HTML to serve the files above combined, minified, compressed and
+with cache headers.</p>
+<table id=uriTable>
+ <tr><th>URI</th><td><a id=uriA class=ext>/min</a> <small>(opens in new window)</small></td></tr>
+ <tr><th>HTML</th><td><input id=uriHtml type=text size=100 readonly></td></tr>
+</table>
+
+<h2>How to serve these files as a group</h2>
+<p>For the best performance you can serve these files as a pre-defined group with a URI
+like: <code><span class=minRoot>/min/?</span>g=keyName</code></p>
+<p>To do this, add a line like this to /min/groupsConfig.php:</p>
+
+<pre><code>return array(
+ <span style="color:#666">... your existing groups here ...</span>
+<input id=groupConfig size=100 type=text readonly>
+);</code></pre>
+
+<p><em>Make sure to replace <code>keyName</code> with a unique key for this group.</em></p>
+</div>
+
+<div id=getBm>
+<h3>Find URIs on a Page</h3>
+<p>You can use the bookmarklet below to fetch all CSS &amp; Javascript URIs from a page
+on your site. When you active it, this page will open in a new window with a list of
+available URIs to add.</p>
+
+<p><a id=bm>Create Minify URIs</a> <small>(right-click, add to bookmarks)</small></p>
+</div>
+
+<h3>Combining CSS files that contain <code>@import</code></h3>
+<p>If your CSS files contain <code>@import</code> declarations, Minify will not
+remove them. Therefore, you will want to remove those that point to files already
+in your list, and move any others to the top of the first file in your list
+(imports below any styles will be ignored by browsers as invalid).</p>
+<p>If you desire, you can use Minify URIs in imports and they will not be touched
+by Minify. E.g. <code>@import "<span class=minRoot>/min/?</span>g=css2";</code></p>
+
+</div><!-- #app -->
+
+<hr>
+<p>Need help? Search or post to the <a class=ext
+href="http://groups.google.com/group/minify">Minify discussion list</a>.</p>
+<p><small>This app is minified :) <a class=ext
+href="http://code.google.com/p/minify/source/browse/trunk/min/builder/index.php">view
+source</a></small></p>
+
+<script type="text/javascript"
+src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
+
+<script type="text/javascript">
+$(function () {
+ // detection of double output encoding
+ var msg = '<\p class=topWarning><\strong>Warning:<\/strong> ';
+ var url = 'ocCheck.php?' + (new Date()).getTime();
+ $.get(url, function (ocStatus) {
+ $.get(url + '&hello=1', function (ocHello) {
+ if (ocHello != 'World!') {
+ msg += 'It appears output is being automatically compressed, interfering '
+ + ' with Minify\'s own compression. ';
+ if (ocStatus == '1')
+ msg += 'The option "zlib.output_compression" is enabled in your PHP configuration. '
+ + 'Minify set this to "0", but it had no effect. This option must be disabled '
+ + 'in php.ini or .htaccess.';
+ else
+ msg += 'The option "zlib.output_compression" is disabled in your PHP configuration '
+ + 'so this behavior is likely due to a server option.';
+ $(document.body).prepend(msg + '<\/p>');
+ } else
+ if (ocStatus == '1')
+ $(document.body).prepend('<\p class=topNote><\strong>Note:</\strong> The option '
+ + '"zlib.output_compression" is enabled in your PHP configuration, but has been '
+ + 'successfully disabled via ini_set(). If you experience mangled output you '
+ + 'may want to consider disabling this option in your PHP configuration.<\/p>'
+ );
+ });
+ });
+});
+</script>
+<script type="text/javascript">
+ // workaround required to test when /min isn't child of web root
+ var src = location.pathname.replace(/\/[^\/]*$/, '/_index.js').substr(1);
+ document.write('<\script type="text/javascript" src="../?f=' + src + '"><\/script>');
+</script>
+
+<?php
+
+$serveOpts = array(
+ 'content' => ob_get_contents()
+ ,'id' => __FILE__
+ ,'lastModifiedTime' => max(
+ // regenerate cache if either of these change
+ filemtime(__FILE__)
+ ,filemtime(dirname(__FILE__) . '/../config.php')
+ )
+ ,'minifyAll' => true
+ ,'encodeOutput' => $encodeOutput
+);
+ob_end_clean();
+
+set_include_path(dirname(__FILE__) . '/../lib' . PATH_SEPARATOR . get_include_path());
+
+require 'Minify.php';
+
+if (0 === stripos(PHP_OS, 'win')) {
+ Minify::setDocRoot(); // we may be on IIS
+}
+Minify::setCache(isset($min_cachePath) ? $min_cachePath : null);
+Minify::$uploaderHoursBehind = $min_uploaderHoursBehind;
+
+Minify::serve('Page', $serveOpts);
diff --git a/plugins/Minify/extlib/minify/min/builder/ocCheck.php b/plugins/Minify/extlib/minify/min/builder/ocCheck.php
new file mode 100644
index 000000000..c47baa33d
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/builder/ocCheck.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * AJAX checks for zlib.output_compression
+ *
+ * @package Minify
+ */
+
+$_oc = ini_get('zlib.output_compression');
+
+// allow access only if builder is enabled
+require dirname(__FILE__) . '/../config.php';
+if (! $min_enableBuilder) {
+ header('Location: /');
+ exit();
+}
+
+if (isset($_GET['hello'])) {
+ // echo 'World!'
+
+ // try to prevent double encoding (may not have an effect)
+ ini_set('zlib.output_compression', '0');
+
+ require $min_libPath . '/HTTP/Encoder.php';
+ HTTP_Encoder::$encodeToIe6 = true; // just in case
+ $he = new HTTP_Encoder(array(
+ 'content' => 'World!'
+ ,'method' => 'deflate'
+ ));
+ $he->encode();
+ $he->sendAll();
+
+} else {
+ // echo status "0" or "1"
+ header('Content-Type: text/plain');
+ echo (int)$_oc;
+}
diff --git a/plugins/Minify/extlib/minify/min/builder/rewriteTest.js b/plugins/Minify/extlib/minify/min/builder/rewriteTest.js
new file mode 100644
index 000000000..56a6051ca
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/builder/rewriteTest.js
@@ -0,0 +1 @@
+1 \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/groupsConfig.php b/plugins/Minify/extlib/minify/min/groupsConfig.php
new file mode 100644
index 000000000..9e2514d7a
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/groupsConfig.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Groups configuration for default Minify implementation
+ * @package Minify
+ */
+
+/**
+ * You may wish to use the Minify URI Builder app to suggest
+ * changes. http://yourdomain/min/builder/
+ **/
+
+return array(
+ // 'js' => array('//js/file1.js', '//js/file2.js'),
+ // 'css' => array('//css/file1.css', '//css/file2.css'),
+
+ // custom source example
+ /*'js2' => array(
+ dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js',
+ // do NOT process this file
+ new Minify_Source(array(
+ 'filepath' => dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js',
+ 'minifier' => create_function('$a', 'return $a;')
+ ))
+ ),//*/
+
+ /*'js3' => array(
+ dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js',
+ // do NOT process this file
+ new Minify_Source(array(
+ 'filepath' => dirname(__FILE__) . '/../min_unit_tests/_test_files/js/before.js',
+ 'minifier' => array('Minify_Packer', 'minify')
+ ))
+ ),//*/
+); \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/index.php b/plugins/Minify/extlib/minify/min/index.php
new file mode 100644
index 000000000..51c352569
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/index.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * Front controller for default Minify implementation
+ *
+ * DO NOT EDIT! Configure this utility via config.php and groupsConfig.php
+ *
+ * @package Minify
+ */
+
+define('MINIFY_MIN_DIR', dirname(__FILE__));
+
+// load config
+require MINIFY_MIN_DIR . '/config.php';
+
+// setup include path
+set_include_path($min_libPath . PATH_SEPARATOR . get_include_path());
+
+require 'Minify.php';
+
+Minify::$uploaderHoursBehind = $min_uploaderHoursBehind;
+Minify::setCache(
+ isset($min_cachePath) ? $min_cachePath : ''
+ ,$min_cacheFileLocking
+);
+
+if ($min_documentRoot) {
+ $_SERVER['DOCUMENT_ROOT'] = $min_documentRoot;
+} elseif (0 === stripos(PHP_OS, 'win')) {
+ Minify::setDocRoot(); // IIS may need help
+}
+
+$min_serveOptions['minifierOptions']['text/css']['symlinks'] = $min_symlinks;
+
+if ($min_allowDebugFlag && isset($_GET['debug'])) {
+ $min_serveOptions['debug'] = true;
+}
+
+if ($min_errorLogger) {
+ require_once 'Minify/Logger.php';
+ if (true === $min_errorLogger) {
+ require_once 'FirePHP.php';
+ Minify_Logger::setLogger(FirePHP::getInstance(true));
+ } else {
+ Minify_Logger::setLogger($min_errorLogger);
+ }
+}
+
+// check for URI versioning
+if (preg_match('/&\\d/', $_SERVER['QUERY_STRING'])) {
+ $min_serveOptions['maxAge'] = 31536000;
+}
+if (isset($_GET['g'])) {
+ // well need groups config
+ $min_serveOptions['minApp']['groups'] = (require MINIFY_MIN_DIR . '/groupsConfig.php');
+}
+if (isset($_GET['f']) || isset($_GET['g'])) {
+ // serve!
+ Minify::serve('MinApp', $min_serveOptions);
+
+} elseif ($min_enableBuilder) {
+ header('Location: builder/');
+ exit();
+} else {
+ header("Location: /");
+ exit();
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/FirePHP.php b/plugins/Minify/extlib/minify/min/lib/FirePHP.php
new file mode 100644
index 000000000..d301a641a
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/FirePHP.php
@@ -0,0 +1,1370 @@
+<?php
+/**
+ * *** BEGIN LICENSE BLOCK *****
+ *
+ * This file is part of FirePHP (http://www.firephp.org/).
+ *
+ * Software License Agreement (New BSD License)
+ *
+ * Copyright (c) 2006-2008, Christoph Dorn
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ *
+ * * Neither the name of Christoph Dorn nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * ***** END LICENSE BLOCK *****
+ *
+ * @copyright Copyright (C) 2007-2008 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+
+
+/**
+ * Sends the given data to the FirePHP Firefox Extension.
+ * The data can be displayed in the Firebug Console or in the
+ * "Server" request tab.
+ *
+ * For more information see: http://www.firephp.org/
+ *
+ * @copyright Copyright (C) 2007-2008 Christoph Dorn
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @package FirePHP
+ */
+class FirePHP {
+
+ /**
+ * FirePHP version
+ *
+ * @var string
+ */
+ const VERSION = '0.2.0';
+
+ /**
+ * Firebug LOG level
+ *
+ * Logs a message to firebug console.
+ *
+ * @var string
+ */
+ const LOG = 'LOG';
+
+ /**
+ * Firebug INFO level
+ *
+ * Logs a message to firebug console and displays an info icon before the message.
+ *
+ * @var string
+ */
+ const INFO = 'INFO';
+
+ /**
+ * Firebug WARN level
+ *
+ * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise.
+ *
+ * @var string
+ */
+ const WARN = 'WARN';
+
+ /**
+ * Firebug ERROR level
+ *
+ * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
+ *
+ * @var string
+ */
+ const ERROR = 'ERROR';
+
+ /**
+ * Dumps a variable to firebug's server panel
+ *
+ * @var string
+ */
+ const DUMP = 'DUMP';
+
+ /**
+ * Displays a stack trace in firebug console
+ *
+ * @var string
+ */
+ const TRACE = 'TRACE';
+
+ /**
+ * Displays an exception in firebug console
+ *
+ * Increments the firebug error count.
+ *
+ * @var string
+ */
+ const EXCEPTION = 'EXCEPTION';
+
+ /**
+ * Displays an table in firebug console
+ *
+ * @var string
+ */
+ const TABLE = 'TABLE';
+
+ /**
+ * Starts a group in firebug console
+ *
+ * @var string
+ */
+ const GROUP_START = 'GROUP_START';
+
+ /**
+ * Ends a group in firebug console
+ *
+ * @var string
+ */
+ const GROUP_END = 'GROUP_END';
+
+ /**
+ * Singleton instance of FirePHP
+ *
+ * @var FirePHP
+ */
+ protected static $instance = null;
+
+ /**
+ * Wildfire protocol message index
+ *
+ * @var int
+ */
+ protected $messageIndex = 1;
+
+ /**
+ * Options for the library
+ *
+ * @var array
+ */
+ protected $options = array();
+
+ /**
+ * Filters used to exclude object members when encoding
+ *
+ * @var array
+ */
+ protected $objectFilters = array();
+
+ /**
+ * A stack of objects used to detect recursion during object encoding
+ *
+ * @var object
+ */
+ protected $objectStack = array();
+
+ /**
+ * Flag to enable/disable logging
+ *
+ * @var boolean
+ */
+ protected $enabled = true;
+
+ /**
+ * The object constructor
+ */
+ function __construct() {
+ $this->options['maxObjectDepth'] = 10;
+ $this->options['maxArrayDepth'] = 20;
+ $this->options['useNativeJsonEncode'] = true;
+ $this->options['includeLineNumbers'] = true;
+ }
+
+ /**
+ * When the object gets serialized only include specific object members.
+ *
+ * @return array
+ */
+ public function __sleep() {
+ return array('options','objectFilters','enabled');
+ }
+
+ /**
+ * Gets singleton instance of FirePHP
+ *
+ * @param boolean $AutoCreate
+ * @return FirePHP
+ */
+ public static function getInstance($AutoCreate=false) {
+ if($AutoCreate===true && !self::$instance) {
+ self::init();
+ }
+ return self::$instance;
+ }
+
+ /**
+ * Creates FirePHP object and stores it for singleton access
+ *
+ * @return FirePHP
+ */
+ public static function init() {
+ return self::$instance = new self();
+ }
+
+ /**
+ * Enable and disable logging to Firebug
+ *
+ * @param boolean $Enabled TRUE to enable, FALSE to disable
+ * @return void
+ */
+ public function setEnabled($Enabled) {
+ $this->enabled = $Enabled;
+ }
+
+ /**
+ * Check if logging is enabled
+ *
+ * @return boolean TRUE if enabled
+ */
+ public function getEnabled() {
+ return $this->enabled;
+ }
+
+ /**
+ * Specify a filter to be used when encoding an object
+ *
+ * Filters are used to exclude object members.
+ *
+ * @param string $Class The class name of the object
+ * @param array $Filter An array or members to exclude
+ * @return void
+ */
+ public function setObjectFilter($Class, $Filter) {
+ $this->objectFilters[$Class] = $Filter;
+ }
+
+ /**
+ * Set some options for the library
+ *
+ * Options:
+ * - maxObjectDepth: The maximum depth to traverse objects (default: 10)
+ * - maxArrayDepth: The maximum depth to traverse arrays (default: 20)
+ * - useNativeJsonEncode: If true will use json_encode() (default: true)
+ * - includeLineNumbers: If true will include line numbers and filenames (default: true)
+ *
+ * @param array $Options The options to be set
+ * @return void
+ */
+ public function setOptions($Options) {
+ $this->options = array_merge($this->options,$Options);
+ }
+
+ /**
+ * Register FirePHP as your error handler
+ *
+ * Will throw exceptions for each php error.
+ */
+ public function registerErrorHandler()
+ {
+ //NOTE: The following errors will not be caught by this error handler:
+ // E_ERROR, E_PARSE, E_CORE_ERROR,
+ // E_CORE_WARNING, E_COMPILE_ERROR,
+ // E_COMPILE_WARNING, E_STRICT
+
+ set_error_handler(array($this,'errorHandler'));
+ }
+
+ /**
+ * FirePHP's error handler
+ *
+ * Throws exception for each php error that will occur.
+ *
+ * @param int $errno
+ * @param string $errstr
+ * @param string $errfile
+ * @param int $errline
+ * @param array $errcontext
+ */
+ public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
+ {
+ // Don't throw exception if error reporting is switched off
+ if (error_reporting() == 0) {
+ return;
+ }
+ // Only throw exceptions for errors we are asking for
+ if (error_reporting() & $errno) {
+ throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
+ }
+ }
+
+ /**
+ * Register FirePHP as your exception handler
+ */
+ public function registerExceptionHandler()
+ {
+ set_exception_handler(array($this,'exceptionHandler'));
+ }
+
+ /**
+ * FirePHP's exception handler
+ *
+ * Logs all exceptions to your firebug console and then stops the script.
+ *
+ * @param Exception $Exception
+ * @throws Exception
+ */
+ function exceptionHandler($Exception) {
+ $this->fb($Exception);
+ }
+
+ /**
+ * Set custom processor url for FirePHP
+ *
+ * @param string $URL
+ */
+ public function setProcessorUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-ProcessorURL', $URL);
+ }
+
+ /**
+ * Set custom renderer url for FirePHP
+ *
+ * @param string $URL
+ */
+ public function setRendererUrl($URL)
+ {
+ $this->setHeader('X-FirePHP-RendererURL', $URL);
+ }
+
+ /**
+ * Start a group for following messages
+ *
+ * @param string $Name
+ * @return true
+ * @throws Exception
+ */
+ public function group($Name) {
+ return $this->fb(null, $Name, FirePHP::GROUP_START);
+ }
+
+ /**
+ * Ends a group you have started before
+ *
+ * @return true
+ * @throws Exception
+ */
+ public function groupEnd() {
+ return $this->fb(null, null, FirePHP::GROUP_END);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::LOG
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function log($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::LOG);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::INFO
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function info($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::INFO);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::WARN
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function warn($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::WARN);
+ }
+
+ /**
+ * Log object with label to firebug console
+ *
+ * @see FirePHP::ERROR
+ * @param mixes $Object
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function error($Object, $Label=null) {
+ return $this->fb($Object, $Label, FirePHP::ERROR);
+ }
+
+ /**
+ * Dumps key and variable to firebug server panel
+ *
+ * @see FirePHP::DUMP
+ * @param string $Key
+ * @param mixed $Variable
+ * @return true
+ * @throws Exception
+ */
+ public function dump($Key, $Variable) {
+ return $this->fb($Variable, $Key, FirePHP::DUMP);
+ }
+
+ /**
+ * Log a trace in the firebug console
+ *
+ * @see FirePHP::TRACE
+ * @param string $Label
+ * @return true
+ * @throws Exception
+ */
+ public function trace($Label) {
+ return $this->fb($Label, FirePHP::TRACE);
+ }
+
+ /**
+ * Log a table in the firebug console
+ *
+ * @see FirePHP::TABLE
+ * @param string $Label
+ * @param string $Table
+ * @return true
+ * @throws Exception
+ */
+ public function table($Label, $Table) {
+ return $this->fb($Table, $Label, FirePHP::TABLE);
+ }
+
+ /**
+ * Check if FirePHP is installed on client
+ *
+ * @return boolean
+ */
+ public function detectClientExtension() {
+ /* Check if FirePHP is installed on client */
+ if(!@preg_match_all('/\sFirePHP\/([\.|\d]*)\s?/si',$this->getUserAgent(),$m) ||
+ !version_compare($m[1][0],'0.0.6','>=')) {
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Log varible to Firebug
+ *
+ * @see http://www.firephp.org/Wiki/Reference/Fb
+ * @param mixed $Object The variable to be logged
+ * @return true Return TRUE if message was added to headers, FALSE otherwise
+ * @throws Exception
+ */
+ public function fb($Object) {
+
+ if(!$this->enabled) {
+ return false;
+ }
+
+ if (headers_sent($filename, $linenum)) {
+ throw $this->newException('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
+ }
+
+ $Type = null;
+ $Label = null;
+
+ if(func_num_args()==1) {
+ } else
+ if(func_num_args()==2) {
+ switch(func_get_arg(1)) {
+ case self::LOG:
+ case self::INFO:
+ case self::WARN:
+ case self::ERROR:
+ case self::DUMP:
+ case self::TRACE:
+ case self::EXCEPTION:
+ case self::TABLE:
+ case self::GROUP_START:
+ case self::GROUP_END:
+ $Type = func_get_arg(1);
+ break;
+ default:
+ $Label = func_get_arg(1);
+ break;
+ }
+ } else
+ if(func_num_args()==3) {
+ $Type = func_get_arg(2);
+ $Label = func_get_arg(1);
+ } else {
+ throw $this->newException('Wrong number of arguments to fb() function!');
+ }
+
+
+ if(!$this->detectClientExtension()) {
+ return false;
+ }
+
+ $meta = array();
+ $skipFinalObjectEncode = false;
+
+ if($Object instanceof Exception) {
+
+ $meta['file'] = $this->_escapeTraceFile($Object->getFile());
+ $meta['line'] = $Object->getLine();
+
+ $trace = $Object->getTrace();
+ if($Object instanceof ErrorException
+ && isset($trace[0]['function'])
+ && $trace[0]['function']=='errorHandler'
+ && isset($trace[0]['class'])
+ && $trace[0]['class']=='FirePHP') {
+
+ $severity = false;
+ switch($Object->getSeverity()) {
+ case E_WARNING: $severity = 'E_WARNING'; break;
+ case E_NOTICE: $severity = 'E_NOTICE'; break;
+ case E_USER_ERROR: $severity = 'E_USER_ERROR'; break;
+ case E_USER_WARNING: $severity = 'E_USER_WARNING'; break;
+ case E_USER_NOTICE: $severity = 'E_USER_NOTICE'; break;
+ case E_STRICT: $severity = 'E_STRICT'; break;
+ case E_RECOVERABLE_ERROR: $severity = 'E_RECOVERABLE_ERROR'; break;
+ case E_DEPRECATED: $severity = 'E_DEPRECATED'; break;
+ case E_USER_DEPRECATED: $severity = 'E_USER_DEPRECATED'; break;
+ }
+
+ $Object = array('Class'=>get_class($Object),
+ 'Message'=>$severity.': '.$Object->getMessage(),
+ 'File'=>$this->_escapeTraceFile($Object->getFile()),
+ 'Line'=>$Object->getLine(),
+ 'Type'=>'trigger',
+ 'Trace'=>$this->_escapeTrace(array_splice($trace,2)));
+ $skipFinalObjectEncode = true;
+ } else {
+ $Object = array('Class'=>get_class($Object),
+ 'Message'=>$Object->getMessage(),
+ 'File'=>$this->_escapeTraceFile($Object->getFile()),
+ 'Line'=>$Object->getLine(),
+ 'Type'=>'throw',
+ 'Trace'=>$this->_escapeTrace($trace));
+ $skipFinalObjectEncode = true;
+ }
+ $Type = self::EXCEPTION;
+
+ } else
+ if($Type==self::TRACE) {
+
+ $trace = debug_backtrace();
+ if(!$trace) return false;
+ for( $i=0 ; $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if($trace[$i]['function']=='fb'
+ || $trace[$i]['function']=='trace'
+ || $trace[$i]['function']=='send') {
+ $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
+ 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
+ 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
+ 'Message'=>$trace[$i]['args'][0],
+ 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
+ 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
+ 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
+ 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
+
+ $skipFinalObjectEncode = true;
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ } else
+ if($Type==self::TABLE) {
+
+ if(isset($Object[0]) && is_string($Object[0])) {
+ $Object[1] = $this->encodeTable($Object[1]);
+ } else {
+ $Object = $this->encodeTable($Object);
+ }
+
+ $skipFinalObjectEncode = true;
+
+ } else {
+ if($Type===null) {
+ $Type = self::LOG;
+ }
+ }
+
+ if($this->options['includeLineNumbers']) {
+ if(!isset($meta['file']) || !isset($meta['line'])) {
+
+ $trace = debug_backtrace();
+ for( $i=0 ; $trace && $i<sizeof($trace) ; $i++ ) {
+
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i]['file'])
+ && ($trace[$i]['class']=='FirePHP'
+ || $trace[$i]['class']=='FB')
+ && (substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
+ || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
+ /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
+ } else
+ if(isset($trace[$i]['class'])
+ && isset($trace[$i+1]['file'])
+ && $trace[$i]['class']=='FirePHP'
+ && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip fb() */
+ } else
+ if(isset($trace[$i]['file'])
+ && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
+ /* Skip FB::fb() */
+ } else {
+ $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
+ $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
+ break;
+ }
+ }
+
+ }
+ } else {
+ unset($meta['file']);
+ unset($meta['line']);
+ }
+
+ $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
+ $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.self::VERSION);
+
+ $structure_index = 1;
+ if($Type==self::DUMP) {
+ $structure_index = 2;
+ $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
+ } else {
+ $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
+ }
+
+ if($Type==self::DUMP) {
+ $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
+ } else {
+ $msg_meta = array('Type'=>$Type);
+ if($Label!==null) {
+ $msg_meta['Label'] = $Label;
+ }
+ if(isset($meta['file'])) {
+ $msg_meta['File'] = $meta['file'];
+ }
+ if(isset($meta['line'])) {
+ $msg_meta['Line'] = $meta['line'];
+ }
+ $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
+ }
+
+ $parts = explode("\n",chunk_split($msg, 5000, "\n"));
+
+ for( $i=0 ; $i<count($parts) ; $i++) {
+
+ $part = $parts[$i];
+ if ($part) {
+
+ if(count($parts)>2) {
+ // Message needs to be split into multiple parts
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ (($i==0)?strlen($msg):'')
+ . '|' . $part . '|'
+ . (($i<count($parts)-2)?'\\':''));
+ } else {
+ $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
+ strlen($part) . '|' . $part . '|');
+ }
+
+ $this->messageIndex++;
+
+ if ($this->messageIndex > 99999) {
+ throw new Exception('Maximum number (99,999) of messages reached!');
+ }
+ }
+ }
+
+ $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
+
+ return true;
+ }
+
+ /**
+ * Standardizes path for windows systems.
+ *
+ * @param string $Path
+ * @return string
+ */
+ protected function _standardizePath($Path) {
+ return preg_replace('/\\\\+/','/',$Path);
+ }
+
+ /**
+ * Escape trace path for windows systems
+ *
+ * @param array $Trace
+ * @return array
+ */
+ protected function _escapeTrace($Trace) {
+ if(!$Trace) return $Trace;
+ for( $i=0 ; $i<sizeof($Trace) ; $i++ ) {
+ if(isset($Trace[$i]['file'])) {
+ $Trace[$i]['file'] = $this->_escapeTraceFile($Trace[$i]['file']);
+ }
+ if(isset($Trace[$i]['args'])) {
+ $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
+ }
+ }
+ return $Trace;
+ }
+
+ /**
+ * Escape file information of trace for windows systems
+ *
+ * @param string $File
+ * @return string
+ */
+ protected function _escapeTraceFile($File) {
+ /* Check if we have a windows filepath */
+ if(strpos($File,'\\')) {
+ /* First strip down to single \ */
+
+ $file = preg_replace('/\\\\+/','\\',$File);
+
+ return $file;
+ }
+ return $File;
+ }
+
+ /**
+ * Send header
+ *
+ * @param string $Name
+ * @param string_type $Value
+ */
+ protected function setHeader($Name, $Value) {
+ return header($Name.': '.$Value);
+ }
+
+ /**
+ * Get user agent
+ *
+ * @return string|false
+ */
+ protected function getUserAgent() {
+ if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
+ return $_SERVER['HTTP_USER_AGENT'];
+ }
+
+ /**
+ * Returns a new exception
+ *
+ * @param string $Message
+ * @return Exception
+ */
+ protected function newException($Message) {
+ return new Exception($Message);
+ }
+
+ /**
+ * Encode an object into a JSON string
+ *
+ * Uses PHP's jeson_encode() if available
+ *
+ * @param object $Object The object to be encoded
+ * @return string The JSON string
+ */
+ protected function jsonEncode($Object, $skipObjectEncode=false)
+ {
+ if(!$skipObjectEncode) {
+ $Object = $this->encodeObject($Object);
+ }
+
+ if(function_exists('json_encode')
+ && $this->options['useNativeJsonEncode']!=false) {
+
+ return json_encode($Object);
+ } else {
+ return $this->json_encode($Object);
+ }
+ }
+
+ /**
+ * Encodes a table by encoding each row and column with encodeObject()
+ *
+ * @param array $Table The table to be encoded
+ * @return array
+ */
+ protected function encodeTable($Table) {
+ if(!$Table) return $Table;
+ for( $i=0 ; $i<count($Table) ; $i++ ) {
+ if(is_array($Table[$i])) {
+ for( $j=0 ; $j<count($Table[$i]) ; $j++ ) {
+ $Table[$i][$j] = $this->encodeObject($Table[$i][$j]);
+ }
+ }
+ }
+ return $Table;
+ }
+
+ /**
+ * Encodes an object including members with
+ * protected and private visibility
+ *
+ * @param Object $Object The object to be encoded
+ * @param int $Depth The current traversal depth
+ * @return array All members of the object
+ */
+ protected function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1)
+ {
+ $return = array();
+
+ if (is_object($Object)) {
+
+ if ($ObjectDepth > $this->options['maxObjectDepth']) {
+ return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
+ }
+
+ foreach ($this->objectStack as $refVal) {
+ if ($refVal === $Object) {
+ return '** Recursion ('.get_class($Object).') **';
+ }
+ }
+ array_push($this->objectStack, $Object);
+
+ $return['__className'] = $class = get_class($Object);
+
+ $reflectionClass = new ReflectionClass($class);
+ $properties = array();
+ foreach( $reflectionClass->getProperties() as $property) {
+ $properties[$property->getName()] = $property;
+ }
+
+ $members = (array)$Object;
+
+ foreach( $properties as $raw_name => $property ) {
+
+ $name = $raw_name;
+ if($property->isStatic()) {
+ $name = 'static:'.$name;
+ }
+ if($property->isPublic()) {
+ $name = 'public:'.$name;
+ } else
+ if($property->isPrivate()) {
+ $name = 'private:'.$name;
+ $raw_name = "\0".$class."\0".$raw_name;
+ } else
+ if($property->isProtected()) {
+ $name = 'protected:'.$name;
+ $raw_name = "\0".'*'."\0".$raw_name;
+ }
+
+ if(!(isset($this->objectFilters[$class])
+ && is_array($this->objectFilters[$class])
+ && in_array($raw_name,$this->objectFilters[$class]))) {
+
+ if(array_key_exists($raw_name,$members)
+ && !$property->isStatic()) {
+
+ $return[$name] = $this->encodeObject($members[$raw_name], $ObjectDepth + 1, 1);
+
+ } else {
+ if(method_exists($property,'setAccessible')) {
+ $property->setAccessible(true);
+ $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1);
+ } else
+ if($property->isPublic()) {
+ $return[$name] = $this->encodeObject($property->getValue($Object), $ObjectDepth + 1, 1);
+ } else {
+ $return[$name] = '** Need PHP 5.3 to get value **';
+ }
+ }
+ } else {
+ $return[$name] = '** Excluded by Filter **';
+ }
+ }
+
+ // Include all members that are not defined in the class
+ // but exist in the object
+ foreach( $members as $raw_name => $value ) {
+
+ $name = $raw_name;
+
+ if ($name{0} == "\0") {
+ $parts = explode("\0", $name);
+ $name = $parts[2];
+ }
+
+ if(!isset($properties[$name])) {
+ $name = 'undeclared:'.$name;
+
+ if(!(isset($this->objectFilters[$class])
+ && is_array($this->objectFilters[$class])
+ && in_array($raw_name,$this->objectFilters[$class]))) {
+
+ $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1);
+ } else {
+ $return[$name] = '** Excluded by Filter **';
+ }
+ }
+ }
+
+ array_pop($this->objectStack);
+
+ } elseif (is_array($Object)) {
+
+ if ($ArrayDepth > $this->options['maxArrayDepth']) {
+ return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
+ }
+
+ foreach ($Object as $key => $val) {
+
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($key=='GLOBALS'
+ && is_array($val)
+ && array_key_exists('GLOBALS',$val)) {
+ $val['GLOBALS'] = '** Recursion (GLOBALS) **';
+ }
+
+ $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1);
+ }
+ } else {
+ if(self::is_utf8($Object)) {
+ return $Object;
+ } else {
+ return utf8_encode($Object);
+ }
+ }
+ return $return;
+ }
+
+ /**
+ * Returns true if $string is valid UTF-8 and false otherwise.
+ *
+ * @param mixed $str String to be tested
+ * @return boolean
+ */
+ protected static function is_utf8($str) {
+ $c=0; $b=0;
+ $bits=0;
+ $len=strlen($str);
+ for($i=0; $i<$len; $i++){
+ $c=ord($str[$i]);
+ if($c > 128){
+ if(($c >= 254)) return false;
+ elseif($c >= 252) $bits=6;
+ elseif($c >= 248) $bits=5;
+ elseif($c >= 240) $bits=4;
+ elseif($c >= 224) $bits=3;
+ elseif($c >= 192) $bits=2;
+ else return false;
+ if(($i+$bits) > $len) return false;
+ while($bits > 1){
+ $i++;
+ $b=ord($str[$i]);
+ if($b < 128 || $b > 191) return false;
+ $bits--;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Converts to and from JSON format.
+ *
+ * JSON (JavaScript Object Notation) is a lightweight data-interchange
+ * format. It is easy for humans to read and write. It is easy for machines
+ * to parse and generate. It is based on a subset of the JavaScript
+ * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
+ * This feature can also be found in Python. JSON is a text format that is
+ * completely language independent but uses conventions that are familiar
+ * to programmers of the C-family of languages, including C, C++, C#, Java,
+ * JavaScript, Perl, TCL, and many others. These properties make JSON an
+ * ideal data-interchange language.
+ *
+ * This package provides a simple encoder and decoder for JSON notation. It
+ * is intended for use with client-side Javascript applications that make
+ * use of HTTPRequest to perform server communication functions - data can
+ * be encoded into JSON notation for use in a client-side javascript, or
+ * decoded from incoming Javascript requests. JSON format is native to
+ * Javascript, and can be directly eval()'ed with no further parsing
+ * overhead
+ *
+ * All strings should be in ASCII or UTF-8 format!
+ *
+ * LICENSE: Redistribution and use in source and binary forms, with or
+ * without modification, are permitted provided that the following
+ * conditions are met: Redistributions of source code must retain the
+ * above copyright notice, this list of conditions and the following
+ * disclaimer. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
+ * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
+ * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * @category
+ * @package Services_JSON
+ * @author Michal Migurski <mike-json@teczno.com>
+ * @author Matt Knapp <mdknapp[at]gmail[dot]com>
+ * @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
+ * @author Christoph Dorn <christoph@christophdorn.com>
+ * @copyright 2005 Michal Migurski
+ * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
+ * @license http://www.opensource.org/licenses/bsd-license.php
+ * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
+ */
+
+
+ /**
+ * Keep a list of objects as we descend into the array so we can detect recursion.
+ */
+ private $json_objectStack = array();
+
+
+ /**
+ * convert a string from one UTF-8 char to one UTF-16 char
+ *
+ * Normally should be handled by mb_convert_encoding, but
+ * provides a slower PHP-only method for installations
+ * that lack the multibye string extension.
+ *
+ * @param string $utf8 UTF-8 character
+ * @return string UTF-16 character
+ * @access private
+ */
+ private function json_utf82utf16($utf8)
+ {
+ // oh please oh please oh please oh please oh please
+ if(function_exists('mb_convert_encoding')) {
+ return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
+ }
+
+ switch(strlen($utf8)) {
+ case 1:
+ // this case should never be reached, because we are in ASCII range
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return $utf8;
+
+ case 2:
+ // return a UTF-16 character from a 2-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr(0x07 & (ord($utf8{0}) >> 2))
+ . chr((0xC0 & (ord($utf8{0}) << 6))
+ | (0x3F & ord($utf8{1})));
+
+ case 3:
+ // return a UTF-16 character from a 3-byte UTF-8 char
+ // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ return chr((0xF0 & (ord($utf8{0}) << 4))
+ | (0x0F & (ord($utf8{1}) >> 2)))
+ . chr((0xC0 & (ord($utf8{1}) << 6))
+ | (0x7F & ord($utf8{2})));
+ }
+
+ // ignoring UTF-32 for now, sorry
+ return '';
+ }
+
+ /**
+ * encodes an arbitrary variable into JSON format
+ *
+ * @param mixed $var any number, boolean, string, array, or object to be encoded.
+ * see argument 1 to Services_JSON() above for array-parsing behavior.
+ * if var is a strng, note that encode() always expects it
+ * to be in ASCII or UTF-8 format!
+ *
+ * @return mixed JSON string representation of input var or an error if a problem occurs
+ * @access public
+ */
+ private function json_encode($var)
+ {
+
+ if(is_object($var)) {
+ if(in_array($var,$this->json_objectStack)) {
+ return '"** Recursion **"';
+ }
+ }
+
+ switch (gettype($var)) {
+ case 'boolean':
+ return $var ? 'true' : 'false';
+
+ case 'NULL':
+ return 'null';
+
+ case 'integer':
+ return (int) $var;
+
+ case 'double':
+ case 'float':
+ return (float) $var;
+
+ case 'string':
+ // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
+ $ascii = '';
+ $strlen_var = strlen($var);
+
+ /*
+ * Iterate over every character in the string,
+ * escaping with a slash or encoding to UTF-8 where necessary
+ */
+ for ($c = 0; $c < $strlen_var; ++$c) {
+
+ $ord_var_c = ord($var{$c});
+
+ switch (true) {
+ case $ord_var_c == 0x08:
+ $ascii .= '\b';
+ break;
+ case $ord_var_c == 0x09:
+ $ascii .= '\t';
+ break;
+ case $ord_var_c == 0x0A:
+ $ascii .= '\n';
+ break;
+ case $ord_var_c == 0x0C:
+ $ascii .= '\f';
+ break;
+ case $ord_var_c == 0x0D:
+ $ascii .= '\r';
+ break;
+
+ case $ord_var_c == 0x22:
+ case $ord_var_c == 0x2F:
+ case $ord_var_c == 0x5C:
+ // double quote, slash, slosh
+ $ascii .= '\\'.$var{$c};
+ break;
+
+ case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
+ // characters U-00000000 - U-0000007F (same as ASCII)
+ $ascii .= $var{$c};
+ break;
+
+ case (($ord_var_c & 0xE0) == 0xC0):
+ // characters U-00000080 - U-000007FF, mask 110XXXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
+ $c += 1;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF0) == 0xE0):
+ // characters U-00000800 - U-0000FFFF, mask 1110XXXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}));
+ $c += 2;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xF8) == 0xF0):
+ // characters U-00010000 - U-001FFFFF, mask 11110XXX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}));
+ $c += 3;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFC) == 0xF8):
+ // characters U-00200000 - U-03FFFFFF, mask 111110XX
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}));
+ $c += 4;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+
+ case (($ord_var_c & 0xFE) == 0xFC):
+ // characters U-04000000 - U-7FFFFFFF, mask 1111110X
+ // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
+ $char = pack('C*', $ord_var_c,
+ ord($var{$c + 1}),
+ ord($var{$c + 2}),
+ ord($var{$c + 3}),
+ ord($var{$c + 4}),
+ ord($var{$c + 5}));
+ $c += 5;
+ $utf16 = $this->json_utf82utf16($char);
+ $ascii .= sprintf('\u%04s', bin2hex($utf16));
+ break;
+ }
+ }
+
+ return '"'.$ascii.'"';
+
+ case 'array':
+ /*
+ * As per JSON spec if any array key is not an integer
+ * we must treat the the whole array as an object. We
+ * also try to catch a sparsely populated associative
+ * array with numeric keys here because some JS engines
+ * will create an array with empty indexes up to
+ * max_index which can cause memory issues and because
+ * the keys, which may be relevant, will be remapped
+ * otherwise.
+ *
+ * As per the ECMA and JSON specification an object may
+ * have any string as a property. Unfortunately due to
+ * a hole in the ECMA specification if the key is a
+ * ECMA reserved word or starts with a digit the
+ * parameter is only accessible using ECMAScript's
+ * bracket notation.
+ */
+
+ // treat as a JSON object
+ if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($var),
+ array_values($var));
+
+ array_pop($this->json_objectStack);
+
+ foreach($properties as $property) {
+ if($property instanceof Exception) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+ }
+
+ $this->json_objectStack[] = $var;
+
+ // treat it like a regular array
+ $elements = array_map(array($this, 'json_encode'), $var);
+
+ array_pop($this->json_objectStack);
+
+ foreach($elements as $element) {
+ if($element instanceof Exception) {
+ return $element;
+ }
+ }
+
+ return '[' . join(',', $elements) . ']';
+
+ case 'object':
+ $vars = self::encodeObject($var);
+
+ $this->json_objectStack[] = $var;
+
+ $properties = array_map(array($this, 'json_name_value'),
+ array_keys($vars),
+ array_values($vars));
+
+ array_pop($this->json_objectStack);
+
+ foreach($properties as $property) {
+ if($property instanceof Exception) {
+ return $property;
+ }
+ }
+
+ return '{' . join(',', $properties) . '}';
+
+ default:
+ return null;
+ }
+ }
+
+ /**
+ * array-walking function for use in generating JSON-formatted name-value pairs
+ *
+ * @param string $name name of key to use
+ * @param mixed $value reference to an array element to be encoded
+ *
+ * @return string JSON-formatted name-value pair, like '"name":value'
+ * @access private
+ */
+ private function json_name_value($name, $value)
+ {
+ // Encoding the $GLOBALS PHP array causes an infinite loop
+ // if the recursion is not reset here as it contains
+ // a reference to itself. This is the only way I have come up
+ // with to stop infinite recursion in this case.
+ if($name=='GLOBALS'
+ && is_array($value)
+ && array_key_exists('GLOBALS',$value)) {
+ $value['GLOBALS'] = '** Recursion **';
+ }
+
+ $encoded_value = $this->json_encode($value);
+
+ if($encoded_value instanceof Exception) {
+ return $encoded_value;
+ }
+
+ return $this->json_encode(strval($name)) . ':' . $encoded_value;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php b/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php
new file mode 100644
index 000000000..823db058f
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/HTTP/ConditionalGet.php
@@ -0,0 +1,348 @@
+<?php
+/**
+ * Class HTTP_ConditionalGet
+ * @package Minify
+ * @subpackage HTTP
+ */
+
+/**
+ * Implement conditional GET via a timestamp or hash of content
+ *
+ * E.g. Content from DB with update time:
+ * <code>
+ * list($updateTime, $content) = getDbUpdateAndContent();
+ * $cg = new HTTP_ConditionalGet(array(
+ * 'lastModifiedTime' => $updateTime
+ * ,'isPublic' => true
+ * ));
+ * $cg->sendHeaders();
+ * if ($cg->cacheIsValid) {
+ * exit();
+ * }
+ * echo $content;
+ * </code>
+ *
+ * E.g. Shortcut for the above
+ * <code>
+ * HTTP_ConditionalGet::check($updateTime, true); // exits if client has cache
+ * echo $content;
+ * </code>
+ *
+ * E.g. Content from DB with no update time:
+ * <code>
+ * $content = getContentFromDB();
+ * $cg = new HTTP_ConditionalGet(array(
+ * 'contentHash' => md5($content)
+ * ));
+ * $cg->sendHeaders();
+ * if ($cg->cacheIsValid) {
+ * exit();
+ * }
+ * echo $content;
+ * </code>
+ *
+ * E.g. Static content with some static includes:
+ * <code>
+ * // before content
+ * $cg = new HTTP_ConditionalGet(array(
+ * 'lastUpdateTime' => max(
+ * filemtime(__FILE__)
+ * ,filemtime('/path/to/header.inc')
+ * ,filemtime('/path/to/footer.inc')
+ * )
+ * ));
+ * $cg->sendHeaders();
+ * if ($cg->cacheIsValid) {
+ * exit();
+ * }
+ * </code>
+ * @package Minify
+ * @subpackage HTTP
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class HTTP_ConditionalGet {
+
+ /**
+ * Does the client have a valid copy of the requested resource?
+ *
+ * You'll want to check this after instantiating the object. If true, do
+ * not send content, just call sendHeaders() if you haven't already.
+ *
+ * @var bool
+ */
+ public $cacheIsValid = null;
+
+ /**
+ * @param array $spec options
+ *
+ * 'isPublic': (bool) if true, the Cache-Control header will contain
+ * "public", allowing proxies to cache the content. Otherwise "private" will
+ * be sent, allowing only browser caching. (default false)
+ *
+ * 'lastModifiedTime': (int) if given, both ETag AND Last-Modified headers
+ * will be sent with content. This is recommended.
+ *
+ * 'encoding': (string) if set, the header "Vary: Accept-Encoding" will
+ * always be sent and a truncated version of the encoding will be appended
+ * to the ETag. E.g. "pub123456;gz". This will also trigger a more lenient
+ * checking of the client's If-None-Match header, as the encoding portion of
+ * the ETag will be stripped before comparison.
+ *
+ * 'contentHash': (string) if given, only the ETag header can be sent with
+ * content (only HTTP1.1 clients can conditionally GET). The given string
+ * should be short with no quote characters and always change when the
+ * resource changes (recommend md5()). This is not needed/used if
+ * lastModifiedTime is given.
+ *
+ * 'eTag': (string) if given, this will be used as the ETag header rather
+ * than values based on lastModifiedTime or contentHash. Also the encoding
+ * string will not be appended to the given value as described above.
+ *
+ * 'invalidate': (bool) if true, the client cache will be considered invalid
+ * without testing. Effectively this disables conditional GET.
+ * (default false)
+ *
+ * 'maxAge': (int) if given, this will set the Cache-Control max-age in
+ * seconds, and also set the Expires header to the equivalent GMT date.
+ * After the max-age period has passed, the browser will again send a
+ * conditional GET to revalidate its cache.
+ *
+ * @return null
+ */
+ public function __construct($spec)
+ {
+ $scope = (isset($spec['isPublic']) && $spec['isPublic'])
+ ? 'public'
+ : 'private';
+ $maxAge = 0;
+ // backwards compatibility (can be removed later)
+ if (isset($spec['setExpires'])
+ && is_numeric($spec['setExpires'])
+ && ! isset($spec['maxAge'])) {
+ $spec['maxAge'] = $spec['setExpires'] - $_SERVER['REQUEST_TIME'];
+ }
+ if (isset($spec['maxAge'])) {
+ $maxAge = $spec['maxAge'];
+ $this->_headers['Expires'] = self::gmtDate(
+ $_SERVER['REQUEST_TIME'] + $spec['maxAge']
+ );
+ }
+ $etagAppend = '';
+ if (isset($spec['encoding'])) {
+ $this->_stripEtag = true;
+ $this->_headers['Vary'] = 'Accept-Encoding';
+ if ('' !== $spec['encoding']) {
+ if (0 === strpos($spec['encoding'], 'x-')) {
+ $spec['encoding'] = substr($spec['encoding'], 2);
+ }
+ $etagAppend = ';' . substr($spec['encoding'], 0, 2);
+ }
+ }
+ if (isset($spec['lastModifiedTime'])) {
+ $this->_setLastModified($spec['lastModifiedTime']);
+ if (isset($spec['eTag'])) { // Use it
+ $this->_setEtag($spec['eTag'], $scope);
+ } else { // base both headers on time
+ $this->_setEtag($spec['lastModifiedTime'] . $etagAppend, $scope);
+ }
+ } elseif (isset($spec['eTag'])) { // Use it
+ $this->_setEtag($spec['eTag'], $scope);
+ } elseif (isset($spec['contentHash'])) { // Use the hash as the ETag
+ $this->_setEtag($spec['contentHash'] . $etagAppend, $scope);
+ }
+ $this->_headers['Cache-Control'] = "max-age={$maxAge}, {$scope}";
+ // invalidate cache if disabled, otherwise check
+ $this->cacheIsValid = (isset($spec['invalidate']) && $spec['invalidate'])
+ ? false
+ : $this->_isCacheValid();
+ }
+
+ /**
+ * Get array of output headers to be sent
+ *
+ * In the case of 304 responses, this array will only contain the response
+ * code header: array('_responseCode' => 'HTTP/1.0 304 Not Modified')
+ *
+ * Otherwise something like:
+ * <code>
+ * array(
+ * 'Cache-Control' => 'max-age=0, public'
+ * ,'ETag' => '"foobar"'
+ * )
+ * </code>
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_headers;
+ }
+
+ /**
+ * Set the Content-Length header in bytes
+ *
+ * With most PHP configs, as long as you don't flush() output, this method
+ * is not needed and PHP will buffer all output and set Content-Length for
+ * you. Otherwise you'll want to call this to let the client know up front.
+ *
+ * @param int $bytes
+ *
+ * @return int copy of input $bytes
+ */
+ public function setContentLength($bytes)
+ {
+ return $this->_headers['Content-Length'] = $bytes;
+ }
+
+ /**
+ * Send headers
+ *
+ * @see getHeaders()
+ *
+ * Note this doesn't "clear" the headers. Calling sendHeaders() will
+ * call header() again (but probably have not effect) and getHeaders() will
+ * still return the headers.
+ *
+ * @return null
+ */
+ public function sendHeaders()
+ {
+ $headers = $this->_headers;
+ if (array_key_exists('_responseCode', $headers)) {
+ header($headers['_responseCode']);
+ unset($headers['_responseCode']);
+ }
+ foreach ($headers as $name => $val) {
+ header($name . ': ' . $val);
+ }
+ }
+
+ /**
+ * Exit if the client's cache is valid for this resource
+ *
+ * This is a convenience method for common use of the class
+ *
+ * @param int $lastModifiedTime if given, both ETag AND Last-Modified headers
+ * will be sent with content. This is recommended.
+ *
+ * @param bool $isPublic (default false) if true, the Cache-Control header
+ * will contain "public", allowing proxies to cache the content. Otherwise
+ * "private" will be sent, allowing only browser caching.
+ *
+ * @param array $options (default empty) additional options for constructor
+ *
+ * @return null
+ */
+ public static function check($lastModifiedTime = null, $isPublic = false, $options = array())
+ {
+ if (null !== $lastModifiedTime) {
+ $options['lastModifiedTime'] = (int)$lastModifiedTime;
+ }
+ $options['isPublic'] = (bool)$isPublic;
+ $cg = new HTTP_ConditionalGet($options);
+ $cg->sendHeaders();
+ if ($cg->cacheIsValid) {
+ exit();
+ }
+ }
+
+
+ /**
+ * Get a GMT formatted date for use in HTTP headers
+ *
+ * <code>
+ * header('Expires: ' . HTTP_ConditionalGet::gmtdate($time));
+ * </code>
+ *
+ * @param int $time unix timestamp
+ *
+ * @return string
+ */
+ public static function gmtDate($time)
+ {
+ return gmdate('D, d M Y H:i:s \G\M\T', $time);
+ }
+
+ protected $_headers = array();
+ protected $_lmTime = null;
+ protected $_etag = null;
+ protected $_stripEtag = false;
+
+ protected function _setEtag($hash, $scope)
+ {
+ $this->_etag = '"' . substr($scope, 0, 3) . $hash . '"';
+ $this->_headers['ETag'] = $this->_etag;
+ }
+
+ protected function _setLastModified($time)
+ {
+ $this->_lmTime = (int)$time;
+ $this->_headers['Last-Modified'] = self::gmtDate($time);
+ }
+
+ /**
+ * Determine validity of client cache and queue 304 header if valid
+ */
+ protected function _isCacheValid()
+ {
+ if (null === $this->_etag) {
+ // lmTime is copied to ETag, so this condition implies that the
+ // server sent neither ETag nor Last-Modified, so the client can't
+ // possibly has a valid cache.
+ return false;
+ }
+ $isValid = ($this->resourceMatchedEtag() || $this->resourceNotModified());
+ if ($isValid) {
+ $this->_headers['_responseCode'] = 'HTTP/1.0 304 Not Modified';
+ }
+ return $isValid;
+ }
+
+ protected function resourceMatchedEtag()
+ {
+ if (!isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
+ return false;
+ }
+ $clientEtagList = get_magic_quotes_gpc()
+ ? stripslashes($_SERVER['HTTP_IF_NONE_MATCH'])
+ : $_SERVER['HTTP_IF_NONE_MATCH'];
+ $clientEtags = explode(',', $clientEtagList);
+
+ $compareTo = $this->normalizeEtag($this->_etag);
+ foreach ($clientEtags as $clientEtag) {
+ if ($this->normalizeEtag($clientEtag) === $compareTo) {
+ // respond with the client's matched ETag, even if it's not what
+ // we would've sent by default
+ $this->_headers['ETag'] = trim($clientEtag);
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected function normalizeEtag($etag) {
+ $etag = trim($etag);
+ return $this->_stripEtag
+ ? preg_replace('/;\\w\\w"$/', '"', $etag)
+ : $etag;
+ }
+
+ protected function resourceNotModified()
+ {
+ if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
+ return false;
+ }
+ $ifModifiedSince = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
+ if (false !== ($semicolon = strrpos($ifModifiedSince, ';'))) {
+ // IE has tacked on extra data to this header, strip it
+ $ifModifiedSince = substr($ifModifiedSince, 0, $semicolon);
+ }
+ if ($ifModifiedSince == self::gmtDate($this->_lmTime)) {
+ // Apache 2.2's behavior. If there was no ETag match, send the
+ // non-encoded version of the ETag value.
+ $this->_headers['ETag'] = $this->normalizeEtag($this->_etag);
+ return true;
+ }
+ return false;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php b/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php
new file mode 100644
index 000000000..66c26789c
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/HTTP/Encoder.php
@@ -0,0 +1,326 @@
+<?php
+/**
+ * Class HTTP_Encoder
+ * @package Minify
+ * @subpackage HTTP
+ */
+
+/**
+ * Encode and send gzipped/deflated content
+ *
+ * The "Vary: Accept-Encoding" header is sent. If the client allows encoding,
+ * Content-Encoding and Content-Length are added.
+ *
+ * <code>
+ * // Send a CSS file, compressed if possible
+ * $he = new HTTP_Encoder(array(
+ * 'content' => file_get_contents($cssFile)
+ * ,'type' => 'text/css'
+ * ));
+ * $he->encode();
+ * $he->sendAll();
+ * </code>
+ *
+ * <code>
+ * // Shortcut to encoding output
+ * header('Content-Type: text/css'); // needed if not HTML
+ * HTTP_Encoder::output($css);
+ * </code>
+ *
+ * <code>
+ * // Just sniff for the accepted encoding
+ * $encoding = HTTP_Encoder::getAcceptedEncoding();
+ * </code>
+ *
+ * For more control over headers, use getHeaders() and getData() and send your
+ * own output.
+ *
+ * Note: If you don't need header mgmt, use PHP's native gzencode, gzdeflate,
+ * and gzcompress functions for gzip, deflate, and compress-encoding
+ * respectively.
+ *
+ * @package Minify
+ * @subpackage HTTP
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class HTTP_Encoder {
+
+ /**
+ * Should the encoder allow HTTP encoding to IE6?
+ *
+ * If you have many IE6 users and the bandwidth savings is worth troubling
+ * some of them, set this to true.
+ *
+ * By default, encoding is only offered to IE7+. When this is true,
+ * getAcceptedEncoding() will return an encoding for IE6 if its user agent
+ * string contains "SV1". This has been documented in many places as "safe",
+ * but there seem to be remaining, intermittent encoding bugs in patched
+ * IE6 on the wild web.
+ *
+ * @var bool
+ */
+ public static $encodeToIe6 = false;
+
+
+ /**
+ * Default compression level for zlib operations
+ *
+ * This level is used if encode() is not given a $compressionLevel
+ *
+ * @var int
+ */
+ public static $compressionLevel = 6;
+
+
+ /**
+ * Get an HTTP Encoder object
+ *
+ * @param array $spec options
+ *
+ * 'content': (string required) content to be encoded
+ *
+ * 'type': (string) if set, the Content-Type header will have this value.
+ *
+ * 'method: (string) only set this if you are forcing a particular encoding
+ * method. If not set, the best method will be chosen by getAcceptedEncoding()
+ * The available methods are 'gzip', 'deflate', 'compress', and '' (no
+ * encoding)
+ *
+ * @return null
+ */
+ public function __construct($spec)
+ {
+ $this->_content = $spec['content'];
+ $this->_headers['Content-Length'] = (string)strlen($this->_content);
+ if (isset($spec['type'])) {
+ $this->_headers['Content-Type'] = $spec['type'];
+ }
+ if (isset($spec['method'])
+ && in_array($spec['method'], array('gzip', 'deflate', 'compress', '')))
+ {
+ $this->_encodeMethod = array($spec['method'], $spec['method']);
+ } else {
+ $this->_encodeMethod = self::getAcceptedEncoding();
+ }
+ }
+
+ /**
+ * Get content in current form
+ *
+ * Call after encode() for encoded content.
+ *
+ * return string
+ */
+ public function getContent()
+ {
+ return $this->_content;
+ }
+
+ /**
+ * Get array of output headers to be sent
+ *
+ * E.g.
+ * <code>
+ * array(
+ * 'Content-Length' => '615'
+ * ,'Content-Encoding' => 'x-gzip'
+ * ,'Vary' => 'Accept-Encoding'
+ * )
+ * </code>
+ *
+ * @return array
+ */
+ public function getHeaders()
+ {
+ return $this->_headers;
+ }
+
+ /**
+ * Send output headers
+ *
+ * You must call this before headers are sent and it probably cannot be
+ * used in conjunction with zlib output buffering / mod_gzip. Errors are
+ * not handled purposefully.
+ *
+ * @see getHeaders()
+ *
+ * @return null
+ */
+ public function sendHeaders()
+ {
+ foreach ($this->_headers as $name => $val) {
+ header($name . ': ' . $val);
+ }
+ }
+
+ /**
+ * Send output headers and content
+ *
+ * A shortcut for sendHeaders() and echo getContent()
+ *
+ * You must call this before headers are sent and it probably cannot be
+ * used in conjunction with zlib output buffering / mod_gzip. Errors are
+ * not handled purposefully.
+ *
+ * @return null
+ */
+ public function sendAll()
+ {
+ $this->sendHeaders();
+ echo $this->_content;
+ }
+
+ /**
+ * Determine the client's best encoding method from the HTTP Accept-Encoding
+ * header.
+ *
+ * If no Accept-Encoding header is set, or the browser is IE before v6 SP2,
+ * this will return ('', ''), the "identity" encoding.
+ *
+ * A syntax-aware scan is done of the Accept-Encoding, so the method must
+ * be non 0. The methods are favored in order of gzip, deflate, then
+ * compress. Deflate is always smallest and generally faster, but is
+ * rarely sent by servers, so client support could be buggier.
+ *
+ * @param bool $allowCompress allow the older compress encoding
+ *
+ * @param bool $allowDeflate allow the more recent deflate encoding
+ *
+ * @return array two values, 1st is the actual encoding method, 2nd is the
+ * alias of that method to use in the Content-Encoding header (some browsers
+ * call gzip "x-gzip" etc.)
+ */
+ public static function getAcceptedEncoding($allowCompress = true, $allowDeflate = true)
+ {
+ // @link http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
+
+ if (! isset($_SERVER['HTTP_ACCEPT_ENCODING'])
+ || self::_isBuggyIe())
+ {
+ return array('', '');
+ }
+ $ae = $_SERVER['HTTP_ACCEPT_ENCODING'];
+ // gzip checks (quick)
+ if (0 === strpos($ae, 'gzip,') // most browsers
+ || 0 === strpos($ae, 'deflate, gzip,') // opera
+ ) {
+ return array('gzip', 'gzip');
+ }
+ // gzip checks (slow)
+ if (preg_match(
+ '@(?:^|,)\\s*((?:x-)?gzip)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
+ ,$ae
+ ,$m)) {
+ return array('gzip', $m[1]);
+ }
+ if ($allowDeflate) {
+ // deflate checks
+ $aeRev = strrev($ae);
+ if (0 === strpos($aeRev, 'etalfed ,') // ie, webkit
+ || 0 === strpos($aeRev, 'etalfed,') // gecko
+ || 0 === strpos($ae, 'deflate,') // opera
+ // slow parsing
+ || preg_match(
+ '@(?:^|,)\\s*deflate\\s*(?:$|,|;\\s*q=(?:0\\.|1))@', $ae)) {
+ return array('deflate', 'deflate');
+ }
+ }
+ if ($allowCompress && preg_match(
+ '@(?:^|,)\\s*((?:x-)?compress)\\s*(?:$|,|;\\s*q=(?:0\\.|1))@'
+ ,$ae
+ ,$m)) {
+ return array('compress', $m[1]);
+ }
+ return array('', '');
+ }
+
+ /**
+ * Encode (compress) the content
+ *
+ * If the encode method is '' (none) or compression level is 0, or the 'zlib'
+ * extension isn't loaded, we return false.
+ *
+ * Then the appropriate gz_* function is called to compress the content. If
+ * this fails, false is returned.
+ *
+ * The header "Vary: Accept-Encoding" is added. If encoding is successful,
+ * the Content-Length header is updated, and Content-Encoding is also added.
+ *
+ * @param int $compressionLevel given to zlib functions. If not given, the
+ * class default will be used.
+ *
+ * @return bool success true if the content was actually compressed
+ */
+ public function encode($compressionLevel = null)
+ {
+ $this->_headers['Vary'] = 'Accept-Encoding';
+ if (null === $compressionLevel) {
+ $compressionLevel = self::$compressionLevel;
+ }
+ if ('' === $this->_encodeMethod[0]
+ || ($compressionLevel == 0)
+ || !extension_loaded('zlib'))
+ {
+ return false;
+ }
+ if ($this->_encodeMethod[0] === 'deflate') {
+ $encoded = gzdeflate($this->_content, $compressionLevel);
+ } elseif ($this->_encodeMethod[0] === 'gzip') {
+ $encoded = gzencode($this->_content, $compressionLevel);
+ } else {
+ $encoded = gzcompress($this->_content, $compressionLevel);
+ }
+ if (false === $encoded) {
+ return false;
+ }
+ $this->_headers['Content-Length'] = strlen($encoded);
+ $this->_headers['Content-Encoding'] = $this->_encodeMethod[1];
+ $this->_content = $encoded;
+ return true;
+ }
+
+ /**
+ * Encode and send appropriate headers and content
+ *
+ * This is a convenience method for common use of the class
+ *
+ * @param string $content
+ *
+ * @param int $compressionLevel given to zlib functions. If not given, the
+ * class default will be used.
+ *
+ * @return bool success true if the content was actually compressed
+ */
+ public static function output($content, $compressionLevel = null)
+ {
+ if (null === $compressionLevel) {
+ $compressionLevel = self::$compressionLevel;
+ }
+ $he = new HTTP_Encoder(array('content' => $content));
+ $ret = $he->encode($compressionLevel);
+ $he->sendAll();
+ return $ret;
+ }
+
+ protected $_content = '';
+ protected $_headers = array();
+ protected $_encodeMethod = array('', '');
+
+ /**
+ * Is the browser an IE version earlier than 6 SP2?
+ */
+ protected static function _isBuggyIe()
+ {
+ $ua = $_SERVER['HTTP_USER_AGENT'];
+ // quick escape for non-IEs
+ if (0 !== strpos($ua, 'Mozilla/4.0 (compatible; MSIE ')
+ || false !== strpos($ua, 'Opera')) {
+ return false;
+ }
+ // no regex = faaast
+ $version = (float)substr($ua, 30);
+ return self::$encodeToIe6
+ ? ($version < 6 || ($version == 6 && false === strpos($ua, 'SV1')))
+ : ($version < 7);
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/JSMin.php b/plugins/Minify/extlib/minify/min/lib/JSMin.php
new file mode 100644
index 000000000..770e1c610
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/JSMin.php
@@ -0,0 +1,314 @@
+<?php
+/**
+ * jsmin.php - PHP implementation of Douglas Crockford's JSMin.
+ *
+ * This is a direct port of jsmin.c to PHP with a few PHP performance tweaks and
+ * modifications to preserve some comments (see below). Also, rather than using
+ * stdin/stdout, JSMin::minify() accepts a string as input and returns another
+ * string as output.
+ *
+ * Comments containing IE conditional compilation are preserved, as are multi-line
+ * comments that begin with "/*!" (for documentation purposes). In the latter case
+ * newlines are inserted around the comment to enhance readability.
+ *
+ * PHP 5 or higher is required.
+ *
+ * Permission is hereby granted to use this version of the library under the
+ * same terms as jsmin.c, which has the following license:
+ *
+ * --
+ * Copyright (c) 2002 Douglas Crockford (www.crockford.com)
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy of
+ * this software and associated documentation files (the "Software"), to deal in
+ * the Software without restriction, including without limitation the rights to
+ * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+ * of the Software, and to permit persons to whom the Software is furnished to do
+ * so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * The Software shall be used for Good, not Evil.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ * --
+ *
+ * @package JSMin
+ * @author Ryan Grove <ryan@wonko.com> (PHP port)
+ * @author Steve Clay <steve@mrclay.org> (modifications + cleanup)
+ * @author Andrea Giammarchi <http://www.3site.eu> (spaceBeforeRegExp)
+ * @copyright 2002 Douglas Crockford <douglas@crockford.com> (jsmin.c)
+ * @copyright 2008 Ryan Grove <ryan@wonko.com> (PHP port)
+ * @license http://opensource.org/licenses/mit-license.php MIT License
+ * @link http://code.google.com/p/jsmin-php/
+ */
+
+class JSMin {
+ const ORD_LF = 10;
+ const ORD_SPACE = 32;
+ const ACTION_KEEP_A = 1;
+ const ACTION_DELETE_A = 2;
+ const ACTION_DELETE_A_B = 3;
+
+ protected $a = "\n";
+ protected $b = '';
+ protected $input = '';
+ protected $inputIndex = 0;
+ protected $inputLength = 0;
+ protected $lookAhead = null;
+ protected $output = '';
+
+ /**
+ * Minify Javascript
+ *
+ * @param string $js Javascript to be minified
+ * @return string
+ */
+ public static function minify($js)
+ {
+ $jsmin = new JSMin($js);
+ return $jsmin->min();
+ }
+
+ /**
+ * Setup process
+ */
+ public function __construct($input)
+ {
+ $this->input = str_replace("\r\n", "\n", $input);
+ $this->inputLength = strlen($this->input);
+ }
+
+ /**
+ * Perform minification, return result
+ */
+ public function min()
+ {
+ if ($this->output !== '') { // min already run
+ return $this->output;
+ }
+ $this->action(self::ACTION_DELETE_A_B);
+
+ while ($this->a !== null) {
+ // determine next command
+ $command = self::ACTION_KEEP_A; // default
+ if ($this->a === ' ') {
+ if (! $this->isAlphaNum($this->b)) {
+ $command = self::ACTION_DELETE_A;
+ }
+ } elseif ($this->a === "\n") {
+ if ($this->b === ' ') {
+ $command = self::ACTION_DELETE_A_B;
+ } elseif (false === strpos('{[(+-', $this->b)
+ && ! $this->isAlphaNum($this->b)) {
+ $command = self::ACTION_DELETE_A;
+ }
+ } elseif (! $this->isAlphaNum($this->a)) {
+ if ($this->b === ' '
+ || ($this->b === "\n"
+ && (false === strpos('}])+-"\'', $this->a)))) {
+ $command = self::ACTION_DELETE_A_B;
+ }
+ }
+ $this->action($command);
+ }
+ $this->output = trim($this->output);
+ return $this->output;
+ }
+
+ /**
+ * ACTION_KEEP_A = Output A. Copy B to A. Get the next B.
+ * ACTION_DELETE_A = Copy B to A. Get the next B.
+ * ACTION_DELETE_A_B = Get the next B.
+ */
+ protected function action($command)
+ {
+ switch ($command) {
+ case self::ACTION_KEEP_A:
+ $this->output .= $this->a;
+ // fallthrough
+ case self::ACTION_DELETE_A:
+ $this->a = $this->b;
+ if ($this->a === "'" || $this->a === '"') { // string literal
+ $str = $this->a; // in case needed for exception
+ while (true) {
+ $this->output .= $this->a;
+ $this->a = $this->get();
+ if ($this->a === $this->b) { // end quote
+ break;
+ }
+ if (ord($this->a) <= self::ORD_LF) {
+ throw new JSMin_UnterminatedStringException(
+ 'Unterminated String: ' . var_export($str, true));
+ }
+ $str .= $this->a;
+ if ($this->a === '\\') {
+ $this->output .= $this->a;
+ $this->a = $this->get();
+ $str .= $this->a;
+ }
+ }
+ }
+ // fallthrough
+ case self::ACTION_DELETE_A_B:
+ $this->b = $this->next();
+ if ($this->b === '/' && $this->isRegexpLiteral()) { // RegExp literal
+ $this->output .= $this->a . $this->b;
+ $pattern = '/'; // in case needed for exception
+ while (true) {
+ $this->a = $this->get();
+ $pattern .= $this->a;
+ if ($this->a === '/') { // end pattern
+ break; // while (true)
+ } elseif ($this->a === '\\') {
+ $this->output .= $this->a;
+ $this->a = $this->get();
+ $pattern .= $this->a;
+ } elseif (ord($this->a) <= self::ORD_LF) {
+ throw new JSMin_UnterminatedRegExpException(
+ 'Unterminated RegExp: '. var_export($pattern, true));
+ }
+ $this->output .= $this->a;
+ }
+ $this->b = $this->next();
+ }
+ // end case ACTION_DELETE_A_B
+ }
+ }
+
+ protected function isRegexpLiteral()
+ {
+ if (false !== strpos("\n{;(,=:[!&|?", $this->a)) { // we aren't dividing
+ return true;
+ }
+ if (' ' === $this->a) {
+ $length = strlen($this->output);
+ if ($length < 2) { // weird edge case
+ return true;
+ }
+ // you can't divide a keyword
+ if (preg_match('/(?:case|else|in|return|typeof)$/', $this->output, $m)) {
+ if ($this->output === $m[0]) { // odd but could happen
+ return true;
+ }
+ // make sure it's a keyword, not end of an identifier
+ $charBeforeKeyword = substr($this->output, $length - strlen($m[0]) - 1, 1);
+ if (! $this->isAlphaNum($charBeforeKeyword)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Get next char. Convert ctrl char to space.
+ */
+ protected function get()
+ {
+ $c = $this->lookAhead;
+ $this->lookAhead = null;
+ if ($c === null) {
+ if ($this->inputIndex < $this->inputLength) {
+ $c = $this->input[$this->inputIndex];
+ $this->inputIndex += 1;
+ } else {
+ return null;
+ }
+ }
+ if ($c === "\r" || $c === "\n") {
+ return "\n";
+ }
+ if (ord($c) < self::ORD_SPACE) { // control char
+ return ' ';
+ }
+ return $c;
+ }
+
+ /**
+ * Get next char. If is ctrl character, translate to a space or newline.
+ */
+ protected function peek()
+ {
+ $this->lookAhead = $this->get();
+ return $this->lookAhead;
+ }
+
+ /**
+ * Is $c a letter, digit, underscore, dollar sign, escape, or non-ASCII?
+ */
+ protected function isAlphaNum($c)
+ {
+ return (preg_match('/^[0-9a-zA-Z_\\$\\\\]$/', $c) || ord($c) > 126);
+ }
+
+ protected function singleLineComment()
+ {
+ $comment = '';
+ while (true) {
+ $get = $this->get();
+ $comment .= $get;
+ if (ord($get) <= self::ORD_LF) { // EOL reached
+ // if IE conditional comment
+ if (preg_match('/^\\/@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
+ return "/{$comment}";
+ }
+ return $get;
+ }
+ }
+ }
+
+ protected function multipleLineComment()
+ {
+ $this->get();
+ $comment = '';
+ while (true) {
+ $get = $this->get();
+ if ($get === '*') {
+ if ($this->peek() === '/') { // end of comment reached
+ $this->get();
+ // if comment preserved by YUI Compressor
+ if (0 === strpos($comment, '!')) {
+ return "\n/*" . substr($comment, 1) . "*/\n";
+ }
+ // if IE conditional comment
+ if (preg_match('/^@(?:cc_on|if|elif|else|end)\\b/', $comment)) {
+ return "/*{$comment}*/";
+ }
+ return ' ';
+ }
+ } elseif ($get === null) {
+ throw new JSMin_UnterminatedCommentException('Unterminated Comment: ' . var_export('/*' . $comment, true));
+ }
+ $comment .= $get;
+ }
+ }
+
+ /**
+ * Get the next character, skipping over comments.
+ * Some comments may be preserved.
+ */
+ protected function next()
+ {
+ $get = $this->get();
+ if ($get !== '/') {
+ return $get;
+ }
+ switch ($this->peek()) {
+ case '/': return $this->singleLineComment();
+ case '*': return $this->multipleLineComment();
+ default: return $get;
+ }
+ }
+}
+
+class JSMin_UnterminatedStringException extends Exception {}
+class JSMin_UnterminatedCommentException extends Exception {}
+class JSMin_UnterminatedRegExpException extends Exception {}
diff --git a/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php b/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php
new file mode 100644
index 000000000..31a1a5cb4
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/JSMinPlus.php
@@ -0,0 +1,1872 @@
+<?php
+
+/**
+ * JSMinPlus version 1.1
+ *
+ * Minifies a javascript file using a javascript parser
+ *
+ * This implements a PHP port of Brendan Eich's Narcissus open source javascript engine (in javascript)
+ * References: http://en.wikipedia.org/wiki/Narcissus_(JavaScript_engine)
+ * Narcissus sourcecode: http://mxr.mozilla.org/mozilla/source/js/narcissus/
+ * JSMinPlus weblog: http://crisp.tweakblogs.net/blog/cat/716
+ *
+ * Tino Zijdel <crisp@tweakers.net>
+ *
+ * Usage: $minified = JSMinPlus::minify($script [, $filename])
+ *
+ * Versionlog (see also changelog.txt):
+ * 12-04-2009 - some small bugfixes and performance improvements
+ * 09-04-2009 - initial open sourced version 1.0
+ *
+ * Latest version of this script: http://files.tweakers.net/jsminplus/jsminplus.zip
+ *
+ */
+
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Narcissus JavaScript engine.
+ *
+ * The Initial Developer of the Original Code is
+ * Brendan Eich <brendan@mozilla.org>.
+ * Portions created by the Initial Developer are Copyright (C) 2004
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s): Tino Zijdel <crisp@tweakers.net>
+ * PHP port, modifications and minifier routine are (C) 2009
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+define('TOKEN_END', 1);
+define('TOKEN_NUMBER', 2);
+define('TOKEN_IDENTIFIER', 3);
+define('TOKEN_STRING', 4);
+define('TOKEN_REGEXP', 5);
+define('TOKEN_NEWLINE', 6);
+define('TOKEN_CONDCOMMENT_MULTILINE', 7);
+
+define('JS_SCRIPT', 100);
+define('JS_BLOCK', 101);
+define('JS_LABEL', 102);
+define('JS_FOR_IN', 103);
+define('JS_CALL', 104);
+define('JS_NEW_WITH_ARGS', 105);
+define('JS_INDEX', 106);
+define('JS_ARRAY_INIT', 107);
+define('JS_OBJECT_INIT', 108);
+define('JS_PROPERTY_INIT', 109);
+define('JS_GETTER', 110);
+define('JS_SETTER', 111);
+define('JS_GROUP', 112);
+define('JS_LIST', 113);
+
+define('DECLARED_FORM', 0);
+define('EXPRESSED_FORM', 1);
+define('STATEMENT_FORM', 2);
+
+class JSMinPlus
+{
+ private $parser;
+ private $reserved = array(
+ 'break', 'case', 'catch', 'continue', 'default', 'delete', 'do',
+ 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof',
+ 'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var',
+ 'void', 'while', 'with',
+ // Words reserved for future use
+ 'abstract', 'boolean', 'byte', 'char', 'class', 'const', 'debugger',
+ 'double', 'enum', 'export', 'extends', 'final', 'float', 'goto',
+ 'implements', 'import', 'int', 'interface', 'long', 'native',
+ 'package', 'private', 'protected', 'public', 'short', 'static',
+ 'super', 'synchronized', 'throws', 'transient', 'volatile',
+ // These are not reserved, but should be taken into account
+ // in isValidIdentifier (See jslint source code)
+ 'arguments', 'eval', 'true', 'false', 'Infinity', 'NaN', 'null', 'undefined'
+ );
+
+ private function __construct()
+ {
+ $this->parser = new JSParser();
+ }
+
+ public static function minify($js, $filename='')
+ {
+ static $instance;
+
+ // this is a singleton
+ if(!$instance)
+ $instance = new JSMinPlus();
+
+ return $instance->min($js, $filename);
+ }
+
+ private function min($js, $filename)
+ {
+ try
+ {
+ $n = $this->parser->parse($js, $filename, 1);
+ return $this->parseTree($n);
+ }
+ catch(Exception $e)
+ {
+ echo $e->getMessage() . "\n";
+ }
+
+ return false;
+ }
+
+ private function parseTree($n, $noBlockGrouping = false)
+ {
+ $s = '';
+
+ switch ($n->type)
+ {
+ case KEYWORD_FUNCTION:
+ $s .= 'function' . ($n->name ? ' ' . $n->name : '') . '(';
+ $params = $n->params;
+ for ($i = 0, $j = count($params); $i < $j; $i++)
+ $s .= ($i ? ',' : '') . $params[$i];
+ $s .= '){' . $this->parseTree($n->body, true) . '}';
+ break;
+
+ case JS_SCRIPT:
+ // we do nothing with funDecls or varDecls
+ $noBlockGrouping = true;
+ // fall through
+ case JS_BLOCK:
+ $childs = $n->treeNodes;
+ for ($c = 0, $i = 0, $j = count($childs); $i < $j; $i++)
+ {
+ $t = $this->parseTree($childs[$i]);
+ if (strlen($t))
+ {
+ if ($c)
+ {
+ if ($childs[$i]->type == KEYWORD_FUNCTION && $childs[$i]->functionForm == DECLARED_FORM)
+ $s .= "\n"; // put declared functions on a new line
+ else
+ $s .= ';';
+ }
+
+ $s .= $t;
+
+ $c++;
+ }
+ }
+
+ if ($c > 1 && !$noBlockGrouping)
+ {
+ $s = '{' . $s . '}';
+ }
+ break;
+
+ case KEYWORD_IF:
+ $s = 'if(' . $this->parseTree($n->condition) . ')';
+ $thenPart = $this->parseTree($n->thenPart);
+ $elsePart = $n->elsePart ? $this->parseTree($n->elsePart) : null;
+
+ // quite a rancid hack to see if we should enclose the thenpart in brackets
+ if ($thenPart[0] != '{')
+ {
+ if (strpos($thenPart, 'if(') !== false)
+ $thenPart = '{' . $thenPart . '}';
+ elseif ($elsePart)
+ $thenPart .= ';';
+ }
+
+ $s .= $thenPart;
+
+ if ($elsePart)
+ {
+ $s .= 'else';
+
+ if ($elsePart[0] != '{')
+ $s .= ' ';
+
+ $s .= $elsePart;
+ }
+ break;
+
+ case KEYWORD_SWITCH:
+ $s = 'switch(' . $this->parseTree($n->discriminant) . '){';
+ $cases = $n->cases;
+ for ($i = 0, $j = count($cases); $i < $j; $i++)
+ {
+ $case = $cases[$i];
+ if ($case->type == KEYWORD_CASE)
+ $s .= 'case' . ($case->caseLabel->type != TOKEN_STRING ? ' ' : '') . $this->parseTree($case->caseLabel) . ':';
+ else
+ $s .= 'default:';
+
+ $statement = $this->parseTree($case->statements);
+ if ($statement)
+ $s .= $statement . ';';
+ }
+ $s = rtrim($s, ';') . '}';
+ break;
+
+ case KEYWORD_FOR:
+ $s = 'for(' . ($n->setup ? $this->parseTree($n->setup) : '')
+ . ';' . ($n->condition ? $this->parseTree($n->condition) : '')
+ . ';' . ($n->update ? $this->parseTree($n->update) : '') . ')'
+ . $this->parseTree($n->body);
+ break;
+
+ case KEYWORD_WHILE:
+ $s = 'while(' . $this->parseTree($n->condition) . ')' . $this->parseTree($n->body);
+ break;
+
+ case JS_FOR_IN:
+ $s = 'for(' . ($n->varDecl ? $this->parseTree($n->varDecl) : $this->parseTree($n->iterator)) . ' in ' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body);
+ break;
+
+ case KEYWORD_DO:
+ $s = 'do{' . $this->parseTree($n->body, true) . '}while(' . $this->parseTree($n->condition) . ')';
+ break;
+
+ case KEYWORD_BREAK:
+ case KEYWORD_CONTINUE:
+ $s = $n->value . ($n->label ? ' ' . $n->label : '');
+ break;
+
+ case KEYWORD_TRY:
+ $s = 'try{' . $this->parseTree($n->tryBlock, true) . '}';
+ $catchClauses = $n->catchClauses;
+ for ($i = 0, $j = count($catchClauses); $i < $j; $i++)
+ {
+ $t = $catchClauses[$i];
+ $s .= 'catch(' . $t->varName . ($t->guard ? ' if ' . $this->parseTree($t->guard) : '') . '){' . $this->parseTree($t->block, true) . '}';
+ }
+ if ($n->finallyBlock)
+ $s .= 'finally{' . $this->parseTree($n->finallyBlock, true) . '}';
+ break;
+
+ case KEYWORD_THROW:
+ $s = 'throw ' . $this->parseTree($n->exception);
+ break;
+
+ case KEYWORD_RETURN:
+ $s = 'return' . ($n->value ? ' ' . $this->parseTree($n->value) : '');
+ break;
+
+ case KEYWORD_WITH:
+ $s = 'with(' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body);
+ break;
+
+ case KEYWORD_VAR:
+ case KEYWORD_CONST:
+ $s = $n->value . ' ';
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ {
+ $t = $childs[$i];
+ $s .= ($i ? ',' : '') . $t->name;
+ $u = $t->initializer;
+ if ($u)
+ $s .= '=' . $this->parseTree($u);
+ }
+ break;
+
+ case KEYWORD_DEBUGGER:
+ throw new Exception('NOT IMPLEMENTED: DEBUGGER');
+ break;
+
+ case TOKEN_CONDCOMMENT_MULTILINE:
+ $s = $n->value . ' ';
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ $s .= $this->parseTree($childs[$i]);
+ break;
+
+ case OP_SEMICOLON:
+ if ($expression = $n->expression)
+ $s = $this->parseTree($expression);
+ break;
+
+ case JS_LABEL:
+ $s = $n->label . ':' . $this->parseTree($n->statement);
+ break;
+
+ case OP_COMMA:
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
+ break;
+
+ case OP_ASSIGN:
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value . $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case OP_HOOK:
+ $s = $this->parseTree($n->treeNodes[0]) . '?' . $this->parseTree($n->treeNodes[1]) . ':' . $this->parseTree($n->treeNodes[2]);
+ break;
+
+ case OP_OR: case OP_AND:
+ case OP_BITWISE_OR: case OP_BITWISE_XOR: case OP_BITWISE_AND:
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
+ case OP_LSH: case OP_RSH: case OP_URSH:
+ case OP_MUL: case OP_DIV: case OP_MOD:
+ $s = $this->parseTree($n->treeNodes[0]) . $n->type . $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case OP_PLUS:
+ case OP_MINUS:
+ $s = $this->parseTree($n->treeNodes[0]) . $n->type;
+ $nextTokenType = $n->treeNodes[1]->type;
+ if ( $nextTokenType == OP_PLUS || $nextTokenType == OP_MINUS ||
+ $nextTokenType == OP_INCREMENT || $nextTokenType == OP_DECREMENT ||
+ $nextTokenType == OP_UNARY_PLUS || $nextTokenType == OP_UNARY_MINUS
+ )
+ $s .= ' ';
+ $s .= $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case KEYWORD_IN:
+ $s = $this->parseTree($n->treeNodes[0]) . ' in ' . $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case KEYWORD_INSTANCEOF:
+ $s = $this->parseTree($n->treeNodes[0]) . ' instanceof ' . $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case KEYWORD_DELETE:
+ $s = 'delete ' . $this->parseTree($n->treeNodes[0]);
+ break;
+
+ case KEYWORD_VOID:
+ $s = 'void(' . $this->parseTree($n->treeNodes[0]) . ')';
+ break;
+
+ case KEYWORD_TYPEOF:
+ $s = 'typeof ' . $this->parseTree($n->treeNodes[0]);
+ break;
+
+ case OP_NOT:
+ case OP_BITWISE_NOT:
+ case OP_UNARY_PLUS:
+ case OP_UNARY_MINUS:
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
+ break;
+
+ case OP_INCREMENT:
+ case OP_DECREMENT:
+ if ($n->postfix)
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value;
+ else
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
+ break;
+
+ case OP_DOT:
+ $s = $this->parseTree($n->treeNodes[0]) . '.' . $this->parseTree($n->treeNodes[1]);
+ break;
+
+ case JS_INDEX:
+ $s = $this->parseTree($n->treeNodes[0]);
+ // See if we can replace named index with a dot saving 3 bytes
+ if ( $n->treeNodes[0]->type == TOKEN_IDENTIFIER &&
+ $n->treeNodes[1]->type == TOKEN_STRING &&
+ $this->isValidIdentifier(substr($n->treeNodes[1]->value, 1, -1))
+ )
+ $s .= '.' . substr($n->treeNodes[1]->value, 1, -1);
+ else
+ $s .= '[' . $this->parseTree($n->treeNodes[1]) . ']';
+ break;
+
+ case JS_LIST:
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
+ break;
+
+ case JS_CALL:
+ $s = $this->parseTree($n->treeNodes[0]) . '(' . $this->parseTree($n->treeNodes[1]) . ')';
+ break;
+
+ case KEYWORD_NEW:
+ case JS_NEW_WITH_ARGS:
+ $s = 'new ' . $this->parseTree($n->treeNodes[0]) . '(' . ($n->type == JS_NEW_WITH_ARGS ? $this->parseTree($n->treeNodes[1]) : '') . ')';
+ break;
+
+ case JS_ARRAY_INIT:
+ $s = '[';
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ {
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
+ }
+ $s .= ']';
+ break;
+
+ case JS_OBJECT_INIT:
+ $s = '{';
+ $childs = $n->treeNodes;
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
+ {
+ $t = $childs[$i];
+ if ($i)
+ $s .= ',';
+ if ($t->type == JS_PROPERTY_INIT)
+ {
+ // Ditch the quotes when the index is a valid identifier
+ if ( $t->treeNodes[0]->type == TOKEN_STRING &&
+ $this->isValidIdentifier(substr($t->treeNodes[0]->value, 1, -1))
+ )
+ $s .= substr($t->treeNodes[0]->value, 1, -1);
+ else
+ $s .= $t->treeNodes[0]->value;
+
+ $s .= ':' . $this->parseTree($t->treeNodes[1]);
+ }
+ else
+ {
+ $s .= $t->type == JS_GETTER ? 'get' : 'set';
+ $s .= ' ' . $t->name . '(';
+ $params = $t->params;
+ for ($i = 0, $j = count($params); $i < $j; $i++)
+ $s .= ($i ? ',' : '') . $params[$i];
+ $s .= '){' . $this->parseTree($t->body, true) . '}';
+ }
+ }
+ $s .= '}';
+ break;
+
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
+ case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP:
+ $s = $n->value;
+ break;
+
+ case JS_GROUP:
+ $s = '(' . $this->parseTree($n->treeNodes[0]) . ')';
+ break;
+
+ default:
+ throw new Exception('UNKNOWN TOKEN TYPE: ' . $n->type);
+ }
+
+ return $s;
+ }
+
+ private function isValidIdentifier($string)
+ {
+ return preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $string) && !in_array($string, $this->reserved);
+ }
+}
+
+class JSParser
+{
+ private $t;
+
+ private $opPrecedence = array(
+ ';' => 0,
+ ',' => 1,
+ '=' => 2, '?' => 2, ':' => 2,
+ // The above all have to have the same precedence, see bug 330975.
+ '||' => 4,
+ '&&' => 5,
+ '|' => 6,
+ '^' => 7,
+ '&' => 8,
+ '==' => 9, '!=' => 9, '===' => 9, '!==' => 9,
+ '<' => 10, '<=' => 10, '>=' => 10, '>' => 10, 'in' => 10, 'instanceof' => 10,
+ '<<' => 11, '>>' => 11, '>>>' => 11,
+ '+' => 12, '-' => 12,
+ '*' => 13, '/' => 13, '%' => 13,
+ 'delete' => 14, 'void' => 14, 'typeof' => 14,
+ '!' => 14, '~' => 14, 'U+' => 14, 'U-' => 14,
+ '++' => 15, '--' => 15,
+ 'new' => 16,
+ '.' => 17,
+ JS_NEW_WITH_ARGS => 0, JS_INDEX => 0, JS_CALL => 0,
+ JS_ARRAY_INIT => 0, JS_OBJECT_INIT => 0, JS_GROUP => 0
+ );
+
+ private $opArity = array(
+ ',' => -2,
+ '=' => 2,
+ '?' => 3,
+ '||' => 2,
+ '&&' => 2,
+ '|' => 2,
+ '^' => 2,
+ '&' => 2,
+ '==' => 2, '!=' => 2, '===' => 2, '!==' => 2,
+ '<' => 2, '<=' => 2, '>=' => 2, '>' => 2, 'in' => 2, 'instanceof' => 2,
+ '<<' => 2, '>>' => 2, '>>>' => 2,
+ '+' => 2, '-' => 2,
+ '*' => 2, '/' => 2, '%' => 2,
+ 'delete' => 1, 'void' => 1, 'typeof' => 1,
+ '!' => 1, '~' => 1, 'U+' => 1, 'U-' => 1,
+ '++' => 1, '--' => 1,
+ 'new' => 1,
+ '.' => 2,
+ JS_NEW_WITH_ARGS => 2, JS_INDEX => 2, JS_CALL => 2,
+ JS_ARRAY_INIT => 1, JS_OBJECT_INIT => 1, JS_GROUP => 1,
+ TOKEN_CONDCOMMENT_MULTILINE => 1
+ );
+
+ public function __construct()
+ {
+ $this->t = new JSTokenizer();
+ }
+
+ public function parse($s, $f, $l)
+ {
+ // initialize tokenizer
+ $this->t->init($s, $f, $l);
+
+ $x = new JSCompilerContext(false);
+ $n = $this->Script($x);
+ if (!$this->t->isDone())
+ throw $this->t->newSyntaxError('Syntax error');
+
+ return $n;
+ }
+
+ private function Script($x)
+ {
+ $n = $this->Statements($x);
+ $n->type = JS_SCRIPT;
+ $n->funDecls = $x->funDecls;
+ $n->varDecls = $x->varDecls;
+
+ return $n;
+ }
+
+ private function Statements($x)
+ {
+ $n = new JSNode($this->t, JS_BLOCK);
+ array_push($x->stmtStack, $n);
+
+ while (!$this->t->isDone() && $this->t->peek() != OP_RIGHT_CURLY)
+ $n->addNode($this->Statement($x));
+
+ array_pop($x->stmtStack);
+
+ return $n;
+ }
+
+ private function Block($x)
+ {
+ $this->t->mustMatch(OP_LEFT_CURLY);
+ $n = $this->Statements($x);
+ $this->t->mustMatch(OP_RIGHT_CURLY);
+
+ return $n;
+ }
+
+ private function Statement($x)
+ {
+ $tt = $this->t->get();
+ $n2 = null;
+
+ // Cases for statements ending in a right curly return early, avoiding the
+ // common semicolon insertion magic after this switch.
+ switch ($tt)
+ {
+ case KEYWORD_FUNCTION:
+ return $this->FunctionDefinition(
+ $x,
+ true,
+ count($x->stmtStack) > 1 ? STATEMENT_FORM : DECLARED_FORM
+ );
+ break;
+
+ case OP_LEFT_CURLY:
+ $n = $this->Statements($x);
+ $this->t->mustMatch(OP_RIGHT_CURLY);
+ return $n;
+
+ case KEYWORD_IF:
+ $n = new JSNode($this->t);
+ $n->condition = $this->ParenExpression($x);
+ array_push($x->stmtStack, $n);
+ $n->thenPart = $this->Statement($x);
+ $n->elsePart = $this->t->match(KEYWORD_ELSE) ? $this->Statement($x) : null;
+ array_pop($x->stmtStack);
+ return $n;
+
+ case KEYWORD_SWITCH:
+ $n = new JSNode($this->t);
+ $this->t->mustMatch(OP_LEFT_PAREN);
+ $n->discriminant = $this->Expression($x);
+ $this->t->mustMatch(OP_RIGHT_PAREN);
+ $n->cases = array();
+ $n->defaultIndex = -1;
+
+ array_push($x->stmtStack, $n);
+
+ $this->t->mustMatch(OP_LEFT_CURLY);
+
+ while (($tt = $this->t->get()) != OP_RIGHT_CURLY)
+ {
+ switch ($tt)
+ {
+ case KEYWORD_DEFAULT:
+ if ($n->defaultIndex >= 0)
+ throw $this->t->newSyntaxError('More than one switch default');
+ // FALL THROUGH
+ case KEYWORD_CASE:
+ $n2 = new JSNode($this->t);
+ if ($tt == KEYWORD_DEFAULT)
+ $n->defaultIndex = count($n->cases);
+ else
+ $n2->caseLabel = $this->Expression($x, OP_COLON);
+ break;
+ default:
+ throw $this->t->newSyntaxError('Invalid switch case');
+ }
+
+ $this->t->mustMatch(OP_COLON);
+ $n2->statements = new JSNode($this->t, JS_BLOCK);
+ while (($tt = $this->t->peek()) != KEYWORD_CASE && $tt != KEYWORD_DEFAULT && $tt != OP_RIGHT_CURLY)
+ $n2->statements->addNode($this->Statement($x));
+
+ array_push($n->cases, $n2);
+ }
+
+ array_pop($x->stmtStack);
+ return $n;
+
+ case KEYWORD_FOR:
+ $n = new JSNode($this->t);
+ $n->isLoop = true;
+ $this->t->mustMatch(OP_LEFT_PAREN);
+
+ if (($tt = $this->t->peek()) != OP_SEMICOLON)
+ {
+ $x->inForLoopInit = true;
+ if ($tt == KEYWORD_VAR || $tt == KEYWORD_CONST)
+ {
+ $this->t->get();
+ $n2 = $this->Variables($x);
+ }
+ else
+ {
+ $n2 = $this->Expression($x);
+ }
+ $x->inForLoopInit = false;
+ }
+
+ if ($n2 && $this->t->match(KEYWORD_IN))
+ {
+ $n->type = JS_FOR_IN;
+ if ($n2->type == KEYWORD_VAR)
+ {
+ if (count($n2->treeNodes) != 1)
+ {
+ throw $this->t->SyntaxError(
+ 'Invalid for..in left-hand side',
+ $this->t->filename,
+ $n2->lineno
+ );
+ }
+
+ // NB: n2[0].type == IDENTIFIER and n2[0].value == n2[0].name.
+ $n->iterator = $n2->treeNodes[0];
+ $n->varDecl = $n2;
+ }
+ else
+ {
+ $n->iterator = $n2;
+ $n->varDecl = null;
+ }
+
+ $n->object = $this->Expression($x);
+ }
+ else
+ {
+ $n->setup = $n2 ? $n2 : null;
+ $this->t->mustMatch(OP_SEMICOLON);
+ $n->condition = $this->t->peek() == OP_SEMICOLON ? null : $this->Expression($x);
+ $this->t->mustMatch(OP_SEMICOLON);
+ $n->update = $this->t->peek() == OP_RIGHT_PAREN ? null : $this->Expression($x);
+ }
+
+ $this->t->mustMatch(OP_RIGHT_PAREN);
+ $n->body = $this->nest($x, $n);
+ return $n;
+
+ case KEYWORD_WHILE:
+ $n = new JSNode($this->t);
+ $n->isLoop = true;
+ $n->condition = $this->ParenExpression($x);
+ $n->body = $this->nest($x, $n);
+ return $n;
+
+ case KEYWORD_DO:
+ $n = new JSNode($this->t);
+ $n->isLoop = true;
+ $n->body = $this->nest($x, $n, KEYWORD_WHILE);
+ $n->condition = $this->ParenExpression($x);
+ if (!$x->ecmaStrictMode)
+ {
+ // <script language="JavaScript"> (without version hints) may need
+ // automatic semicolon insertion without a newline after do-while.
+ // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945.
+ $this->t->match(OP_SEMICOLON);
+ return $n;
+ }
+ break;
+
+ case KEYWORD_BREAK:
+ case KEYWORD_CONTINUE:
+ $n = new JSNode($this->t);
+
+ if ($this->t->peekOnSameLine() == TOKEN_IDENTIFIER)
+ {
+ $this->t->get();
+ $n->label = $this->t->currentToken()->value;
+ }
+
+ $ss = $x->stmtStack;
+ $i = count($ss);
+ $label = $n->label;
+ if ($label)
+ {
+ do
+ {
+ if (--$i < 0)
+ throw $this->t->newSyntaxError('Label not found');
+ }
+ while ($ss[$i]->label != $label);
+ }
+ else
+ {
+ do
+ {
+ if (--$i < 0)
+ throw $this->t->newSyntaxError('Invalid ' . $tt);
+ }
+ while (!$ss[$i]->isLoop && ($tt != KEYWORD_BREAK || $ss[$i]->type != KEYWORD_SWITCH));
+ }
+
+ $n->target = $ss[$i];
+ break;
+
+ case KEYWORD_TRY:
+ $n = new JSNode($this->t);
+ $n->tryBlock = $this->Block($x);
+ $n->catchClauses = array();
+
+ while ($this->t->match(KEYWORD_CATCH))
+ {
+ $n2 = new JSNode($this->t);
+ $this->t->mustMatch(OP_LEFT_PAREN);
+ $n2->varName = $this->t->mustMatch(TOKEN_IDENTIFIER)->value;
+
+ if ($this->t->match(KEYWORD_IF))
+ {
+ if ($x->ecmaStrictMode)
+ throw $this->t->newSyntaxError('Illegal catch guard');
+
+ if (count($n->catchClauses) && !end($n->catchClauses)->guard)
+ throw $this->t->newSyntaxError('Guarded catch after unguarded');
+
+ $n2->guard = $this->Expression($x);
+ }
+ else
+ {
+ $n2->guard = null;
+ }
+
+ $this->t->mustMatch(OP_RIGHT_PAREN);
+ $n2->block = $this->Block($x);
+ array_push($n->catchClauses, $n2);
+ }
+
+ if ($this->t->match(KEYWORD_FINALLY))
+ $n->finallyBlock = $this->Block($x);
+
+ if (!count($n->catchClauses) && !$n->finallyBlock)
+ throw $this->t->newSyntaxError('Invalid try statement');
+ return $n;
+
+ case KEYWORD_CATCH:
+ case KEYWORD_FINALLY:
+ throw $this->t->newSyntaxError($tt + ' without preceding try');
+
+ case KEYWORD_THROW:
+ $n = new JSNode($this->t);
+ $n->exception = $this->Expression($x);
+ break;
+
+ case KEYWORD_RETURN:
+ if (!$x->inFunction)
+ throw $this->t->newSyntaxError('Invalid return');
+
+ $n = new JSNode($this->t);
+ $tt = $this->t->peekOnSameLine();
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
+ $n->value = $this->Expression($x);
+ else
+ $n->value = null;
+ break;
+
+ case KEYWORD_WITH:
+ $n = new JSNode($this->t);
+ $n->object = $this->ParenExpression($x);
+ $n->body = $this->nest($x, $n);
+ return $n;
+
+ case KEYWORD_VAR:
+ case KEYWORD_CONST:
+ $n = $this->Variables($x);
+ break;
+
+ case TOKEN_CONDCOMMENT_MULTILINE:
+ $n = new JSNode($this->t);
+ return $n;
+
+ case KEYWORD_DEBUGGER:
+ $n = new JSNode($this->t);
+ break;
+
+ case TOKEN_NEWLINE:
+ case OP_SEMICOLON:
+ $n = new JSNode($this->t, OP_SEMICOLON);
+ $n->expression = null;
+ return $n;
+
+ default:
+ if ($tt == TOKEN_IDENTIFIER)
+ {
+ $this->t->scanOperand = false;
+ $tt = $this->t->peek();
+ $this->t->scanOperand = true;
+ if ($tt == OP_COLON)
+ {
+ $label = $this->t->currentToken()->value;
+ $ss = $x->stmtStack;
+ for ($i = count($ss) - 1; $i >= 0; --$i)
+ {
+ if ($ss[$i]->label == $label)
+ throw $this->t->newSyntaxError('Duplicate label');
+ }
+
+ $this->t->get();
+ $n = new JSNode($this->t, JS_LABEL);
+ $n->label = $label;
+ $n->statement = $this->nest($x, $n);
+
+ return $n;
+ }
+ }
+
+ $n = new JSNode($this->t, OP_SEMICOLON);
+ $this->t->unget();
+ $n->expression = $this->Expression($x);
+ $n->end = $n->expression->end;
+ break;
+ }
+
+ if ($this->t->lineno == $this->t->currentToken()->lineno)
+ {
+ $tt = $this->t->peekOnSameLine();
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
+ throw $this->t->newSyntaxError('Missing ; before statement');
+ }
+
+ $this->t->match(OP_SEMICOLON);
+
+ return $n;
+ }
+
+ private function FunctionDefinition($x, $requireName, $functionForm)
+ {
+ $f = new JSNode($this->t);
+
+ if ($f->type != KEYWORD_FUNCTION)
+ $f->type = ($f->value == 'get') ? JS_GETTER : JS_SETTER;
+
+ if ($this->t->match(TOKEN_IDENTIFIER))
+ $f->name = $this->t->currentToken()->value;
+ elseif ($requireName)
+ throw $this->t->newSyntaxError('Missing function identifier');
+
+ $this->t->mustMatch(OP_LEFT_PAREN);
+ $f->params = array();
+
+ while (($tt = $this->t->get()) != OP_RIGHT_PAREN)
+ {
+ if ($tt != TOKEN_IDENTIFIER)
+ throw $this->t->newSyntaxError('Missing formal parameter');
+
+ array_push($f->params, $this->t->currentToken()->value);
+
+ if ($this->t->peek() != OP_RIGHT_PAREN)
+ $this->t->mustMatch(OP_COMMA);
+ }
+
+ $this->t->mustMatch(OP_LEFT_CURLY);
+
+ $x2 = new JSCompilerContext(true);
+ $f->body = $this->Script($x2);
+
+ $this->t->mustMatch(OP_RIGHT_CURLY);
+ $f->end = $this->t->currentToken()->end;
+
+ $f->functionForm = $functionForm;
+ if ($functionForm == DECLARED_FORM)
+ array_push($x->funDecls, $f);
+
+ return $f;
+ }
+
+ private function Variables($x)
+ {
+ $n = new JSNode($this->t);
+
+ do
+ {
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
+
+ $n2 = new JSNode($this->t);
+ $n2->name = $n2->value;
+
+ if ($this->t->match(OP_ASSIGN))
+ {
+ if ($this->t->currentToken()->assignOp)
+ throw $this->t->newSyntaxError('Invalid variable initialization');
+
+ $n2->initializer = $this->Expression($x, OP_COMMA);
+ }
+
+ $n2->readOnly = $n->type == KEYWORD_CONST;
+
+ $n->addNode($n2);
+ array_push($x->varDecls, $n2);
+ }
+ while ($this->t->match(OP_COMMA));
+
+ return $n;
+ }
+
+ private function Expression($x, $stop=false)
+ {
+ $operators = array();
+ $operands = array();
+ $n = false;
+
+ $bl = $x->bracketLevel;
+ $cl = $x->curlyLevel;
+ $pl = $x->parenLevel;
+ $hl = $x->hookLevel;
+
+ while (($tt = $this->t->get()) != TOKEN_END)
+ {
+ if ($tt == $stop &&
+ $x->bracketLevel == $bl &&
+ $x->curlyLevel == $cl &&
+ $x->parenLevel == $pl &&
+ $x->hookLevel == $hl
+ )
+ {
+ // Stop only if tt matches the optional stop parameter, and that
+ // token is not quoted by some kind of bracket.
+ break;
+ }
+
+ switch ($tt)
+ {
+ case OP_SEMICOLON:
+ // NB: cannot be empty, Statement handled that.
+ break 2;
+
+ case OP_ASSIGN:
+ case OP_HOOK:
+ case OP_COLON:
+ if ($this->t->scanOperand)
+ break 2;
+
+ // Use >, not >=, for right-associative ASSIGN and HOOK/COLON.
+ while ( !empty($operators) &&
+ ( $this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt] ||
+ ($tt == OP_COLON && end($operators)->type == OP_ASSIGN)
+ )
+ )
+ $this->reduce($operators, $operands);
+
+ if ($tt == OP_COLON)
+ {
+ $n = end($operators);
+ if ($n->type != OP_HOOK)
+ throw $this->t->newSyntaxError('Invalid label');
+
+ --$x->hookLevel;
+ }
+ else
+ {
+ array_push($operators, new JSNode($this->t));
+ if ($tt == OP_ASSIGN)
+ end($operands)->assignOp = $this->t->currentToken()->assignOp;
+ else
+ ++$x->hookLevel;
+ }
+
+ $this->t->scanOperand = true;
+ break;
+
+ case KEYWORD_IN:
+ // An in operator should not be parsed if we're parsing the head of
+ // a for (...) loop, unless it is in the then part of a conditional
+ // expression, or parenthesized somehow.
+ if ($x->inForLoopInit && !$x->hookLevel &&
+ !$x->bracketLevel && !$x->curlyLevel &&
+ !$x->parenLevel
+ )
+ {
+ break 2;
+ }
+ // FALL THROUGH
+ case OP_COMMA:
+ // Treat comma as left-associative so reduce can fold left-heavy
+ // COMMA trees into a single array.
+ // FALL THROUGH
+ case OP_OR:
+ case OP_AND:
+ case OP_BITWISE_OR:
+ case OP_BITWISE_XOR:
+ case OP_BITWISE_AND:
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
+ case KEYWORD_INSTANCEOF:
+ case OP_LSH: case OP_RSH: case OP_URSH:
+ case OP_PLUS: case OP_MINUS:
+ case OP_MUL: case OP_DIV: case OP_MOD:
+ case OP_DOT:
+ if ($this->t->scanOperand)
+ break 2;
+
+ while ( !empty($operators) &&
+ $this->opPrecedence[end($operators)->type] >= $this->opPrecedence[$tt]
+ )
+ $this->reduce($operators, $operands);
+
+ if ($tt == OP_DOT)
+ {
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
+ array_push($operands, new JSNode($this->t, OP_DOT, array_pop($operands), new JSNode($this->t)));
+ }
+ else
+ {
+ array_push($operators, new JSNode($this->t));
+ $this->t->scanOperand = true;
+ }
+ break;
+
+ case KEYWORD_DELETE: case KEYWORD_VOID: case KEYWORD_TYPEOF:
+ case OP_NOT: case OP_BITWISE_NOT: case OP_UNARY_PLUS: case OP_UNARY_MINUS:
+ case KEYWORD_NEW:
+ if (!$this->t->scanOperand)
+ break 2;
+
+ array_push($operators, new JSNode($this->t));
+ break;
+
+ case OP_INCREMENT: case OP_DECREMENT:
+ if ($this->t->scanOperand)
+ {
+ array_push($operators, new JSNode($this->t)); // prefix increment or decrement
+ }
+ else
+ {
+ // Don't cross a line boundary for postfix {in,de}crement.
+ $t = $this->t->tokens[($this->t->tokenIndex + $this->t->lookahead - 1) & 3];
+ if ($t && $t->lineno != $this->t->lineno)
+ break 2;
+
+ if (!empty($operators))
+ {
+ // Use >, not >=, so postfix has higher precedence than prefix.
+ while ($this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt])
+ $this->reduce($operators, $operands);
+ }
+
+ $n = new JSNode($this->t, $tt, array_pop($operands));
+ $n->postfix = true;
+ array_push($operands, $n);
+ }
+ break;
+
+ case KEYWORD_FUNCTION:
+ if (!$this->t->scanOperand)
+ break 2;
+
+ array_push($operands, $this->FunctionDefinition($x, false, EXPRESSED_FORM));
+ $this->t->scanOperand = false;
+ break;
+
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
+ case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP:
+ if (!$this->t->scanOperand)
+ break 2;
+
+ array_push($operands, new JSNode($this->t));
+ $this->t->scanOperand = false;
+ break;
+
+ case TOKEN_CONDCOMMENT_MULTILINE:
+ if ($this->t->scanOperand)
+ array_push($operators, new JSNode($this->t));
+ else
+ array_push($operands, new JSNode($this->t));
+ break;
+
+ case OP_LEFT_BRACKET:
+ if ($this->t->scanOperand)
+ {
+ // Array initialiser. Parse using recursive descent, as the
+ // sub-grammar here is not an operator grammar.
+ $n = new JSNode($this->t, JS_ARRAY_INIT);
+ while (($tt = $this->t->peek()) != OP_RIGHT_BRACKET)
+ {
+ if ($tt == OP_COMMA)
+ {
+ $this->t->get();
+ $n->addNode(null);
+ continue;
+ }
+
+ $n->addNode($this->Expression($x, OP_COMMA));
+ if (!$this->t->match(OP_COMMA))
+ break;
+ }
+
+ $this->t->mustMatch(OP_RIGHT_BRACKET);
+ array_push($operands, $n);
+ $this->t->scanOperand = false;
+ }
+ else
+ {
+ // Property indexing operator.
+ array_push($operators, new JSNode($this->t, JS_INDEX));
+ $this->t->scanOperand = true;
+ ++$x->bracketLevel;
+ }
+ break;
+
+ case OP_RIGHT_BRACKET:
+ if ($this->t->scanOperand || $x->bracketLevel == $bl)
+ break 2;
+
+ while ($this->reduce($operators, $operands)->type != JS_INDEX)
+ continue;
+
+ --$x->bracketLevel;
+ break;
+
+ case OP_LEFT_CURLY:
+ if (!$this->t->scanOperand)
+ break 2;
+
+ // Object initialiser. As for array initialisers (see above),
+ // parse using recursive descent.
+ ++$x->curlyLevel;
+ $n = new JSNode($this->t, JS_OBJECT_INIT);
+ while (!$this->t->match(OP_RIGHT_CURLY))
+ {
+ do
+ {
+ $tt = $this->t->get();
+ $tv = $this->t->currentToken()->value;
+ if (($tv == 'get' || $tv == 'set') && $this->t->peek() == TOKEN_IDENTIFIER)
+ {
+ if ($x->ecmaStrictMode)
+ throw $this->t->newSyntaxError('Illegal property accessor');
+
+ $n->addNode($this->FunctionDefinition($x, true, EXPRESSED_FORM));
+ }
+ else
+ {
+ switch ($tt)
+ {
+ case TOKEN_IDENTIFIER:
+ case TOKEN_NUMBER:
+ case TOKEN_STRING:
+ $id = new JSNode($this->t);
+ break;
+
+ case OP_RIGHT_CURLY:
+ if ($x->ecmaStrictMode)
+ throw $this->t->newSyntaxError('Illegal trailing ,');
+ break 3;
+
+ default:
+ throw $this->t->newSyntaxError('Invalid property name');
+ }
+
+ $this->t->mustMatch(OP_COLON);
+ $n->addNode(new JSNode($this->t, JS_PROPERTY_INIT, $id, $this->Expression($x, OP_COMMA)));
+ }
+ }
+ while ($this->t->match(OP_COMMA));
+
+ $this->t->mustMatch(OP_RIGHT_CURLY);
+ break;
+ }
+
+ array_push($operands, $n);
+ $this->t->scanOperand = false;
+ --$x->curlyLevel;
+ break;
+
+ case OP_RIGHT_CURLY:
+ if (!$this->t->scanOperand && $x->curlyLevel != $cl)
+ throw new Exception('PANIC: right curly botch');
+ break 2;
+
+ case OP_LEFT_PAREN:
+ if ($this->t->scanOperand)
+ {
+ array_push($operators, new JSNode($this->t, JS_GROUP));
+ }
+ else
+ {
+ while ( !empty($operators) &&
+ $this->opPrecedence[end($operators)->type] > $this->opPrecedence[KEYWORD_NEW]
+ )
+ $this->reduce($operators, $operands);
+
+ // Handle () now, to regularize the n-ary case for n > 0.
+ // We must set scanOperand in case there are arguments and
+ // the first one is a regexp or unary+/-.
+ $n = end($operators);
+ $this->t->scanOperand = true;
+ if ($this->t->match(OP_RIGHT_PAREN))
+ {
+ if ($n && $n->type == KEYWORD_NEW)
+ {
+ array_pop($operators);
+ $n->addNode(array_pop($operands));
+ }
+ else
+ {
+ $n = new JSNode($this->t, JS_CALL, array_pop($operands), new JSNode($this->t, JS_LIST));
+ }
+
+ array_push($operands, $n);
+ $this->t->scanOperand = false;
+ break;
+ }
+
+ if ($n && $n->type == KEYWORD_NEW)
+ $n->type = JS_NEW_WITH_ARGS;
+ else
+ array_push($operators, new JSNode($this->t, JS_CALL));
+ }
+
+ ++$x->parenLevel;
+ break;
+
+ case OP_RIGHT_PAREN:
+ if ($this->t->scanOperand || $x->parenLevel == $pl)
+ break 2;
+
+ while (($tt = $this->reduce($operators, $operands)->type) != JS_GROUP &&
+ $tt != JS_CALL && $tt != JS_NEW_WITH_ARGS
+ )
+ {
+ continue;
+ }
+
+ if ($tt != JS_GROUP)
+ {
+ $n = end($operands);
+ if ($n->treeNodes[1]->type != OP_COMMA)
+ $n->treeNodes[1] = new JSNode($this->t, JS_LIST, $n->treeNodes[1]);
+ else
+ $n->treeNodes[1]->type = JS_LIST;
+ }
+
+ --$x->parenLevel;
+ break;
+
+ // Automatic semicolon insertion means we may scan across a newline
+ // and into the beginning of another statement. If so, break out of
+ // the while loop and let the t.scanOperand logic handle errors.
+ default:
+ break 2;
+ }
+ }
+
+ if ($x->hookLevel != $hl)
+ throw $this->t->newSyntaxError('Missing : after ?');
+
+ if ($x->parenLevel != $pl)
+ throw $this->t->newSyntaxError('Missing ) in parenthetical');
+
+ if ($x->bracketLevel != $bl)
+ throw $this->t->newSyntaxError('Missing ] in index expression');
+
+ if ($this->t->scanOperand)
+ throw $this->t->newSyntaxError('Missing operand');
+
+ // Resume default mode, scanning for operands, not operators.
+ $this->t->scanOperand = true;
+ $this->t->unget();
+
+ while (count($operators))
+ $this->reduce($operators, $operands);
+
+ return array_pop($operands);
+ }
+
+ private function ParenExpression($x)
+ {
+ $this->t->mustMatch(OP_LEFT_PAREN);
+ $n = $this->Expression($x);
+ $this->t->mustMatch(OP_RIGHT_PAREN);
+
+ return $n;
+ }
+
+ // Statement stack and nested statement handler.
+ private function nest($x, $node, $end = false)
+ {
+ array_push($x->stmtStack, $node);
+ $n = $this->statement($x);
+ array_pop($x->stmtStack);
+
+ if ($end)
+ $this->t->mustMatch($end);
+
+ return $n;
+ }
+
+ private function reduce(&$operators, &$operands)
+ {
+ $n = array_pop($operators);
+ $op = $n->type;
+ $arity = $this->opArity[$op];
+ $c = count($operands);
+ if ($arity == -2)
+ {
+ // Flatten left-associative trees
+ if ($c >= 2)
+ {
+ $left = $operands[$c - 2];
+ if ($left->type == $op)
+ {
+ $right = array_pop($operands);
+ $left->addNode($right);
+ return $left;
+ }
+ }
+ $arity = 2;
+ }
+
+ // Always use push to add operands to n, to update start and end
+ $a = array_splice($operands, $c - $arity);
+ for ($i = 0; $i < $arity; $i++)
+ $n->addNode($a[$i]);
+
+ // Include closing bracket or postfix operator in [start,end]
+ $te = $this->t->currentToken()->end;
+ if ($n->end < $te)
+ $n->end = $te;
+
+ array_push($operands, $n);
+
+ return $n;
+ }
+}
+
+class JSCompilerContext
+{
+ public $inFunction = false;
+ public $inForLoopInit = false;
+ public $ecmaStrictMode = false;
+ public $bracketLevel = 0;
+ public $curlyLevel = 0;
+ public $parenLevel = 0;
+ public $hookLevel = 0;
+
+ public $stmtStack = array();
+ public $funDecls = array();
+ public $varDecls = array();
+
+ public function __construct($inFunction)
+ {
+ $this->inFunction = $inFunction;
+ }
+}
+
+class JSNode
+{
+ private $type;
+ private $value;
+ private $lineno;
+ private $start;
+ private $end;
+
+ public $treeNodes = array();
+ public $funDecls = array();
+ public $varDecls = array();
+
+ public function __construct($t, $type=0)
+ {
+ if ($token = $t->currentToken())
+ {
+ $this->type = $type ? $type : $token->type;
+ $this->value = $token->value;
+ $this->lineno = $token->lineno;
+ $this->start = $token->start;
+ $this->end = $token->end;
+ }
+ else
+ {
+ $this->type = $type;
+ $this->lineno = $t->lineno;
+ }
+
+ if (($numargs = func_num_args()) > 2)
+ {
+ $args = func_get_args();;
+ for ($i = 2; $i < $numargs; $i++)
+ $this->addNode($args[$i]);
+ }
+ }
+
+ // we don't want to bloat our object with all kind of specific properties, so we use overloading
+ public function __set($name, $value)
+ {
+ $this->$name = $value;
+ }
+
+ public function __get($name)
+ {
+ if (isset($this->$name))
+ return $this->$name;
+
+ return null;
+ }
+
+ public function addNode($node)
+ {
+ $this->treeNodes[] = $node;
+ }
+}
+
+class JSTokenizer
+{
+ private $cursor = 0;
+ private $source;
+
+ public $tokens = array();
+ public $tokenIndex = 0;
+ public $lookahead = 0;
+ public $scanNewlines = false;
+ public $scanOperand = true;
+
+ public $filename;
+ public $lineno;
+
+ private $keywords = array(
+ 'break',
+ 'case', 'catch', 'const', 'continue',
+ 'debugger', 'default', 'delete', 'do',
+ 'else', 'enum',
+ 'false', 'finally', 'for', 'function',
+ 'if', 'in', 'instanceof',
+ 'new', 'null',
+ 'return',
+ 'switch',
+ 'this', 'throw', 'true', 'try', 'typeof',
+ 'var', 'void',
+ 'while', 'with'
+ );
+
+ private $opTypeNames = array(
+ ';' => 'SEMICOLON',
+ ',' => 'COMMA',
+ '?' => 'HOOK',
+ ':' => 'COLON',
+ '||' => 'OR',
+ '&&' => 'AND',
+ '|' => 'BITWISE_OR',
+ '^' => 'BITWISE_XOR',
+ '&' => 'BITWISE_AND',
+ '===' => 'STRICT_EQ',
+ '==' => 'EQ',
+ '=' => 'ASSIGN',
+ '!==' => 'STRICT_NE',
+ '!=' => 'NE',
+ '<<' => 'LSH',
+ '<=' => 'LE',
+ '<' => 'LT',
+ '>>>' => 'URSH',
+ '>>' => 'RSH',
+ '>=' => 'GE',
+ '>' => 'GT',
+ '++' => 'INCREMENT',
+ '--' => 'DECREMENT',
+ '+' => 'PLUS',
+ '-' => 'MINUS',
+ '*' => 'MUL',
+ '/' => 'DIV',
+ '%' => 'MOD',
+ '!' => 'NOT',
+ '~' => 'BITWISE_NOT',
+ '.' => 'DOT',
+ '[' => 'LEFT_BRACKET',
+ ']' => 'RIGHT_BRACKET',
+ '{' => 'LEFT_CURLY',
+ '}' => 'RIGHT_CURLY',
+ '(' => 'LEFT_PAREN',
+ ')' => 'RIGHT_PAREN',
+ '@*/' => 'CONDCOMMENT_END'
+ );
+
+ private $assignOps = array('|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%');
+ private $opRegExp;
+
+ public function __construct()
+ {
+ $this->opRegExp = '#^(' . implode('|', array_map('preg_quote', array_keys($this->opTypeNames))) . ')#';
+
+ // this is quite a hidden yet convenient place to create the defines for operators and keywords
+ foreach ($this->opTypeNames as $operand => $name)
+ define('OP_' . $name, $operand);
+
+ define('OP_UNARY_PLUS', 'U+');
+ define('OP_UNARY_MINUS', 'U-');
+
+ foreach ($this->keywords as $keyword)
+ define('KEYWORD_' . strtoupper($keyword), $keyword);
+ }
+
+ public function init($source, $filename = '', $lineno = 1)
+ {
+ $this->source = $source;
+ $this->filename = $filename ? $filename : '[inline]';
+ $this->lineno = $lineno;
+
+ $this->cursor = 0;
+ $this->tokens = array();
+ $this->tokenIndex = 0;
+ $this->lookahead = 0;
+ $this->scanNewlines = false;
+ $this->scanOperand = true;
+ }
+
+ public function getInput($chunksize)
+ {
+ if ($chunksize)
+ return substr($this->source, $this->cursor, $chunksize);
+
+ return substr($this->source, $this->cursor);
+ }
+
+ public function isDone()
+ {
+ return $this->peek() == TOKEN_END;
+ }
+
+ public function match($tt)
+ {
+ return $this->get() == $tt || $this->unget();
+ }
+
+ public function mustMatch($tt)
+ {
+ if (!$this->match($tt))
+ throw $this->newSyntaxError('Unexpected token; token ' . $tt . ' expected');
+
+ return $this->currentToken();
+ }
+
+ public function peek()
+ {
+ if ($this->lookahead)
+ {
+ $next = $this->tokens[($this->tokenIndex + $this->lookahead) & 3];
+ if ($this->scanNewlines && $next->lineno != $this->lineno)
+ $tt = TOKEN_NEWLINE;
+ else
+ $tt = $next->type;
+ }
+ else
+ {
+ $tt = $this->get();
+ $this->unget();
+ }
+
+ return $tt;
+ }
+
+ public function peekOnSameLine()
+ {
+ $this->scanNewlines = true;
+ $tt = $this->peek();
+ $this->scanNewlines = false;
+
+ return $tt;
+ }
+
+ public function currentToken()
+ {
+ if (!empty($this->tokens))
+ return $this->tokens[$this->tokenIndex];
+ }
+
+ public function get($chunksize = 1000)
+ {
+ while($this->lookahead)
+ {
+ $this->lookahead--;
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
+ $token = $this->tokens[$this->tokenIndex];
+ if ($token->type != TOKEN_NEWLINE || $this->scanNewlines)
+ return $token->type;
+ }
+
+ $conditional_comment = false;
+
+ // strip whitespace and comments
+ while(true)
+ {
+ $input = $this->getInput($chunksize);
+
+ // whitespace handling; gobble up \r as well (effectively we don't have support for MAC newlines!)
+ $re = $this->scanNewlines ? '/^[ \r\t]+/' : '/^\s+/';
+ if (preg_match($re, $input, $match))
+ {
+ $spaces = $match[0];
+ $spacelen = strlen($spaces);
+ $this->cursor += $spacelen;
+ if (!$this->scanNewlines)
+ $this->lineno += substr_count($spaces, "\n");
+
+ if ($spacelen == $chunksize)
+ continue; // complete chunk contained whitespace
+
+ $input = $this->getInput($chunksize);
+ if ($input == '' || $input[0] != '/')
+ break;
+ }
+
+ // Comments
+ if (!preg_match('/^\/(?:\*(@(?:cc_on|if|elif|else|end))?(?:.|\n)*?\*\/|\/.*)/', $input, $match))
+ {
+ if (!$chunksize)
+ break;
+
+ // retry with a full chunk fetch; this also prevents breakage of long regular expressions (which will never match a comment)
+ $chunksize = null;
+ continue;
+ }
+
+ // check if this is a conditional (JScript) comment
+ if (!empty($match[1]))
+ {
+ //$match[0] = '/*' . $match[1];
+ $conditional_comment = true;
+ break;
+ }
+ else
+ {
+ $this->cursor += strlen($match[0]);
+ $this->lineno += substr_count($match[0], "\n");
+ }
+ }
+
+ if ($input == '')
+ {
+ $tt = TOKEN_END;
+ $match = array('');
+ }
+ elseif ($conditional_comment)
+ {
+ $tt = TOKEN_CONDCOMMENT_MULTILINE;
+ }
+ else
+ {
+ switch ($input[0])
+ {
+ case '0': case '1': case '2': case '3': case '4':
+ case '5': case '6': case '7': case '8': case '9':
+ if (preg_match('/^\d+\.\d*(?:[eE][-+]?\d+)?|^\d+(?:\.\d*)?[eE][-+]?\d+/', $input, $match))
+ {
+ $tt = TOKEN_NUMBER;
+ }
+ elseif (preg_match('/^0[xX][\da-fA-F]+|^0[0-7]*|^\d+/', $input, $match))
+ {
+ // this should always match because of \d+
+ $tt = TOKEN_NUMBER;
+ }
+ break;
+
+ case '"':
+ case "'":
+ if (preg_match('/^"(?:\\\\(?:.|\r?\n)|[^\\\\"\r\n])*"|^\'(?:\\\\(?:.|\r?\n)|[^\\\\\'\r\n])*\'/', $input, $match))
+ {
+ $tt = TOKEN_STRING;
+ }
+ else
+ {
+ if ($chunksize)
+ return $this->get(null); // retry with a full chunk fetch
+
+ throw $this->newSyntaxError('Unterminated string literal');
+ }
+ break;
+
+ case '/':
+ if ($this->scanOperand && preg_match('/^\/((?:\\\\.|\[(?:\\\\.|[^\]])*\]|[^\/])+)\/([gimy]*)/', $input, $match))
+ {
+ $tt = TOKEN_REGEXP;
+ break;
+ }
+ // fall through
+
+ case '|':
+ case '^':
+ case '&':
+ case '<':
+ case '>':
+ case '+':
+ case '-':
+ case '*':
+ case '%':
+ case '=':
+ case '!':
+ // should always match
+ preg_match($this->opRegExp, $input, $match);
+ $op = $match[0];
+ if (in_array($op, $this->assignOps) && $input[strlen($op)] == '=')
+ {
+ $tt = OP_ASSIGN;
+ $match[0] .= '=';
+ }
+ else
+ {
+ $tt = $op;
+ if ($this->scanOperand)
+ {
+ if ($op == OP_PLUS)
+ $tt = OP_UNARY_PLUS;
+ elseif ($op == OP_MINUS)
+ $tt = OP_UNARY_MINUS;
+ }
+ $op = null;
+ }
+ break;
+
+ case '.':
+ if (preg_match('/^\.\d+(?:[eE][-+]?\d+)?/', $input, $match))
+ {
+ $tt = TOKEN_NUMBER;
+ break;
+ }
+ // fall through
+
+ case ';':
+ case ',':
+ case '?':
+ case ':':
+ case '~':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '(':
+ case ')':
+ // these are all single
+ $match = array($input[0]);
+ $tt = $input[0];
+ break;
+
+ case '@':
+ throw $this->newSyntaxError('Illegal token');
+ break;
+
+ case "\n":
+ if ($this->scanNewlines)
+ {
+ $match = array("\n");
+ $tt = TOKEN_NEWLINE;
+ }
+ else
+ throw $this->newSyntaxError('Illegal token');
+ break;
+
+ default:
+ // FIXME: add support for unicode and unicode escape sequence \uHHHH
+ if (preg_match('/^[$\w]+/', $input, $match))
+ {
+ $tt = in_array($match[0], $this->keywords) ? $match[0] : TOKEN_IDENTIFIER;
+ }
+ else
+ throw $this->newSyntaxError('Illegal token');
+ }
+ }
+
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
+
+ if (!isset($this->tokens[$this->tokenIndex]))
+ $this->tokens[$this->tokenIndex] = new JSToken();
+
+ $token = $this->tokens[$this->tokenIndex];
+ $token->type = $tt;
+
+ if ($tt == OP_ASSIGN)
+ $token->assignOp = $op;
+
+ $token->start = $this->cursor;
+
+ $token->value = $match[0];
+ $this->cursor += strlen($match[0]);
+
+ $token->end = $this->cursor;
+ $token->lineno = $this->lineno;
+
+ return $tt;
+ }
+
+ public function unget()
+ {
+ if (++$this->lookahead == 4)
+ throw $this->newSyntaxError('PANIC: too much lookahead!');
+
+ $this->tokenIndex = ($this->tokenIndex - 1) & 3;
+ }
+
+ public function newSyntaxError($m)
+ {
+ return new Exception('Parse error: ' . $m . ' in file \'' . $this->filename . '\' on line ' . $this->lineno);
+ }
+}
+
+class JSToken
+{
+ public $type;
+ public $value;
+ public $start;
+ public $end;
+ public $lineno;
+ public $assignOp;
+}
+
+?> \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify.php b/plugins/Minify/extlib/minify/min/lib/Minify.php
new file mode 100644
index 000000000..2c0ca346c
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify.php
@@ -0,0 +1,532 @@
+<?php
+/**
+ * Class Minify
+ * @package Minify
+ */
+
+/**
+ * Minify_Source
+ */
+require_once 'Minify/Source.php';
+
+/**
+ * Minify - Combines, minifies, and caches JavaScript and CSS files on demand.
+ *
+ * See README for usage instructions (for now).
+ *
+ * This library was inspired by {@link mailto:flashkot@mail.ru jscsscomp by Maxim Martynyuk}
+ * and by the article {@link http://www.hunlock.com/blogs/Supercharged_Javascript "Supercharged JavaScript" by Patrick Hunlock}.
+ *
+ * Requires PHP 5.1.0.
+ * Tested on PHP 5.1.6.
+ *
+ * @package Minify
+ * @author Ryan Grove <ryan@wonko.com>
+ * @author Stephen Clay <steve@mrclay.org>
+ * @copyright 2008 Ryan Grove, Stephen Clay. All rights reserved.
+ * @license http://opensource.org/licenses/bsd-license.php New BSD License
+ * @link http://code.google.com/p/minify/
+ */
+class Minify {
+
+ const VERSION = '2.1.3';
+ const TYPE_CSS = 'text/css';
+ const TYPE_HTML = 'text/html';
+ // there is some debate over the ideal JS Content-Type, but this is the
+ // Apache default and what Yahoo! uses..
+ const TYPE_JS = 'application/x-javascript';
+
+ /**
+ * How many hours behind are the file modification times of uploaded files?
+ *
+ * If you upload files from Windows to a non-Windows server, Windows may report
+ * incorrect mtimes for the files. Immediately after modifying and uploading a
+ * file, use the touch command to update the mtime on the server. If the mtime
+ * jumps ahead by a number of hours, set this variable to that number. If the mtime
+ * moves back, this should not be needed.
+ *
+ * @var int $uploaderHoursBehind
+ */
+ public static $uploaderHoursBehind = 0;
+
+ /**
+ * If this string is not empty AND the serve() option 'bubbleCssImports' is
+ * NOT set, then serve() will check CSS files for @import declarations that
+ * appear too late in the combined stylesheet. If found, serve() will prepend
+ * the output with this warning.
+ *
+ * @var string $importWarning
+ */
+ public static $importWarning = "/* See http://code.google.com/p/minify/wiki/CommonProblems#@imports_can_appear_in_invalid_locations_in_combined_CSS_files */\n";
+
+ /**
+ * Specify a cache object (with identical interface as Minify_Cache_File) or
+ * a path to use with Minify_Cache_File.
+ *
+ * If not called, Minify will not use a cache and, for each 200 response, will
+ * need to recombine files, minify and encode the output.
+ *
+ * @param mixed $cache object with identical interface as Minify_Cache_File or
+ * a directory path, or null to disable caching. (default = '')
+ *
+ * @param bool $fileLocking (default = true) This only applies if the first
+ * parameter is a string.
+ *
+ * @return null
+ */
+ public static function setCache($cache = '', $fileLocking = true)
+ {
+ if (is_string($cache)) {
+ require_once 'Minify/Cache/File.php';
+ self::$_cache = new Minify_Cache_File($cache, $fileLocking);
+ } else {
+ self::$_cache = $cache;
+ }
+ }
+
+ /**
+ * Serve a request for a minified file.
+ *
+ * Here are the available options and defaults in the base controller:
+ *
+ * 'isPublic' : send "public" instead of "private" in Cache-Control
+ * headers, allowing shared caches to cache the output. (default true)
+ *
+ * 'quiet' : set to true to have serve() return an array rather than sending
+ * any headers/output (default false)
+ *
+ * 'encodeOutput' : set to false to disable content encoding, and not send
+ * the Vary header (default true)
+ *
+ * 'encodeMethod' : generally you should let this be determined by
+ * HTTP_Encoder (leave null), but you can force a particular encoding
+ * to be returned, by setting this to 'gzip' or '' (no encoding)
+ *
+ * 'encodeLevel' : level of encoding compression (0 to 9, default 9)
+ *
+ * 'contentTypeCharset' : appended to the Content-Type header sent. Set to a falsey
+ * value to remove. (default 'utf-8')
+ *
+ * 'maxAge' : set this to the number of seconds the client should use its cache
+ * before revalidating with the server. This sets Cache-Control: max-age and the
+ * Expires header. Unlike the old 'setExpires' setting, this setting will NOT
+ * prevent conditional GETs. Note this has nothing to do with server-side caching.
+ *
+ * 'rewriteCssUris' : If true, serve() will automatically set the 'currentDir'
+ * minifier option to enable URI rewriting in CSS files (default true)
+ *
+ * 'bubbleCssImports' : If true, all @import declarations in combined CSS
+ * files will be move to the top. Note this may alter effective CSS values
+ * due to a change in order. (default false)
+ *
+ * 'debug' : set to true to minify all sources with the 'Lines' controller, which
+ * eases the debugging of combined files. This also prevents 304 responses.
+ * @see Minify_Lines::minify()
+ *
+ * 'minifiers' : to override Minify's default choice of minifier function for
+ * a particular content-type, specify your callback under the key of the
+ * content-type:
+ * <code>
+ * // call customCssMinifier($css) for all CSS minification
+ * $options['minifiers'][Minify::TYPE_CSS] = 'customCssMinifier';
+ *
+ * // don't minify Javascript at all
+ * $options['minifiers'][Minify::TYPE_JS] = '';
+ * </code>
+ *
+ * 'minifierOptions' : to send options to the minifier function, specify your options
+ * under the key of the content-type. E.g. To send the CSS minifier an option:
+ * <code>
+ * // give CSS minifier array('optionName' => 'optionValue') as 2nd argument
+ * $options['minifierOptions'][Minify::TYPE_CSS]['optionName'] = 'optionValue';
+ * </code>
+ *
+ * 'contentType' : (optional) this is only needed if your file extension is not
+ * js/css/html. The given content-type will be sent regardless of source file
+ * extension, so this should not be used in a Groups config with other
+ * Javascript/CSS files.
+ *
+ * Any controller options are documented in that controller's setupSources() method.
+ *
+ * @param mixed instance of subclass of Minify_Controller_Base or string name of
+ * controller. E.g. 'Files'
+ *
+ * @param array $options controller/serve options
+ *
+ * @return mixed null, or, if the 'quiet' option is set to true, an array
+ * with keys "success" (bool), "statusCode" (int), "content" (string), and
+ * "headers" (array).
+ */
+ public static function serve($controller, $options = array())
+ {
+ if (is_string($controller)) {
+ // make $controller into object
+ $class = 'Minify_Controller_' . $controller;
+ if (! class_exists($class, false)) {
+ require_once "Minify/Controller/"
+ . str_replace('_', '/', $controller) . ".php";
+ }
+ $controller = new $class();
+ }
+
+ // set up controller sources and mix remaining options with
+ // controller defaults
+ $options = $controller->setupSources($options);
+ $options = $controller->analyzeSources($options);
+ self::$_options = $controller->mixInDefaultOptions($options);
+
+ // check request validity
+ if (! $controller->sources) {
+ // invalid request!
+ if (! self::$_options['quiet']) {
+ header(self::$_options['badRequestHeader']);
+ echo self::$_options['badRequestHeader'];
+ return;
+ } else {
+ list(,$statusCode) = explode(' ', self::$_options['badRequestHeader']);
+ return array(
+ 'success' => false
+ ,'statusCode' => (int)$statusCode
+ ,'content' => ''
+ ,'headers' => array()
+ );
+ }
+ }
+
+ self::$_controller = $controller;
+
+ if (self::$_options['debug']) {
+ self::_setupDebug($controller->sources);
+ self::$_options['maxAge'] = 0;
+ }
+
+ // determine encoding
+ if (self::$_options['encodeOutput']) {
+ if (self::$_options['encodeMethod'] !== null) {
+ // controller specifically requested this
+ $contentEncoding = self::$_options['encodeMethod'];
+ } else {
+ // sniff request header
+ require_once 'HTTP/Encoder.php';
+ // depending on what the client accepts, $contentEncoding may be
+ // 'x-gzip' while our internal encodeMethod is 'gzip'. Calling
+ // getAcceptedEncoding(false, false) leaves out compress and deflate as options.
+ list(self::$_options['encodeMethod'], $contentEncoding) = HTTP_Encoder::getAcceptedEncoding(false, false);
+ }
+ } else {
+ self::$_options['encodeMethod'] = ''; // identity (no encoding)
+ }
+
+ // check client cache
+ require_once 'HTTP/ConditionalGet.php';
+ $cgOptions = array(
+ 'lastModifiedTime' => self::$_options['lastModifiedTime']
+ ,'isPublic' => self::$_options['isPublic']
+ ,'encoding' => self::$_options['encodeMethod']
+ );
+ if (self::$_options['maxAge'] > 0) {
+ $cgOptions['maxAge'] = self::$_options['maxAge'];
+ }
+ $cg = new HTTP_ConditionalGet($cgOptions);
+ if ($cg->cacheIsValid) {
+ // client's cache is valid
+ if (! self::$_options['quiet']) {
+ $cg->sendHeaders();
+ return;
+ } else {
+ return array(
+ 'success' => true
+ ,'statusCode' => 304
+ ,'content' => ''
+ ,'headers' => $cg->getHeaders()
+ );
+ }
+ } else {
+ // client will need output
+ $headers = $cg->getHeaders();
+ unset($cg);
+ }
+
+ if (self::$_options['contentType'] === self::TYPE_CSS
+ && self::$_options['rewriteCssUris']) {
+ reset($controller->sources);
+ while (list($key, $source) = each($controller->sources)) {
+ if ($source->filepath
+ && !isset($source->minifyOptions['currentDir'])
+ && !isset($source->minifyOptions['prependRelativePath'])
+ ) {
+ $source->minifyOptions['currentDir'] = dirname($source->filepath);
+ }
+ }
+ }
+
+ // check server cache
+ if (null !== self::$_cache) {
+ // using cache
+ // the goal is to use only the cache methods to sniff the length and
+ // output the content, as they do not require ever loading the file into
+ // memory.
+ $cacheId = 'minify_' . self::_getCacheId();
+ $fullCacheId = (self::$_options['encodeMethod'])
+ ? $cacheId . '.gz'
+ : $cacheId;
+ // check cache for valid entry
+ $cacheIsReady = self::$_cache->isValid($fullCacheId, self::$_options['lastModifiedTime']);
+ if ($cacheIsReady) {
+ $cacheContentLength = self::$_cache->getSize($fullCacheId);
+ } else {
+ // generate & cache content
+ $content = self::_combineMinify();
+ self::$_cache->store($cacheId, $content);
+ if (function_exists('gzencode')) {
+ self::$_cache->store($cacheId . '.gz', gzencode($content, self::$_options['encodeLevel']));
+ }
+ }
+ } else {
+ // no cache
+ $cacheIsReady = false;
+ $content = self::_combineMinify();
+ }
+ if (! $cacheIsReady && self::$_options['encodeMethod']) {
+ // still need to encode
+ $content = gzencode($content, self::$_options['encodeLevel']);
+ }
+
+ // add headers
+ $headers['Content-Length'] = $cacheIsReady
+ ? $cacheContentLength
+ : strlen($content);
+ $headers['Content-Type'] = self::$_options['contentTypeCharset']
+ ? self::$_options['contentType'] . '; charset=' . self::$_options['contentTypeCharset']
+ : self::$_options['contentType'];
+ if (self::$_options['encodeMethod'] !== '') {
+ $headers['Content-Encoding'] = $contentEncoding;
+ }
+ if (self::$_options['encodeOutput']) {
+ $headers['Vary'] = 'Accept-Encoding';
+ }
+
+ if (! self::$_options['quiet']) {
+ // output headers & content
+ foreach ($headers as $name => $val) {
+ header($name . ': ' . $val);
+ }
+ if ($cacheIsReady) {
+ self::$_cache->display($fullCacheId);
+ } else {
+ echo $content;
+ }
+ } else {
+ return array(
+ 'success' => true
+ ,'statusCode' => 200
+ ,'content' => $cacheIsReady
+ ? self::$_cache->fetch($fullCacheId)
+ : $content
+ ,'headers' => $headers
+ );
+ }
+ }
+
+ /**
+ * Return combined minified content for a set of sources
+ *
+ * No internal caching will be used and the content will not be HTTP encoded.
+ *
+ * @param array $sources array of filepaths and/or Minify_Source objects
+ *
+ * @param array $options (optional) array of options for serve. By default
+ * these are already set: quiet = true, encodeMethod = '', lastModifiedTime = 0.
+ *
+ * @return string
+ */
+ public static function combine($sources, $options = array())
+ {
+ $cache = self::$_cache;
+ self::$_cache = null;
+ $options = array_merge(array(
+ 'files' => (array)$sources
+ ,'quiet' => true
+ ,'encodeMethod' => ''
+ ,'lastModifiedTime' => 0
+ ), $options);
+ $out = self::serve('Files', $options);
+ self::$_cache = $cache;
+ return $out['content'];
+ }
+
+ /**
+ * On IIS, create $_SERVER['DOCUMENT_ROOT']
+ *
+ * @param bool $unsetPathInfo (default false) if true, $_SERVER['PATH_INFO']
+ * will be unset (it is inconsistent with Apache's setting)
+ *
+ * @return null
+ */
+ public static function setDocRoot($unsetPathInfo = false)
+ {
+ if (isset($_SERVER['SERVER_SOFTWARE'])
+ && 0 === strpos($_SERVER['SERVER_SOFTWARE'], 'Microsoft-IIS/')
+ ) {
+ $_SERVER['DOCUMENT_ROOT'] = rtrim(substr(
+ $_SERVER['PATH_TRANSLATED']
+ ,0
+ ,strlen($_SERVER['PATH_TRANSLATED']) - strlen($_SERVER['SCRIPT_NAME'])
+ ), '\\');
+ if ($unsetPathInfo) {
+ unset($_SERVER['PATH_INFO']);
+ }
+ require_once 'Minify/Logger.php';
+ Minify_Logger::log("setDocRoot() set DOCUMENT_ROOT to \"{$_SERVER['DOCUMENT_ROOT']}\"");
+ }
+ }
+
+ /**
+ * @var mixed Minify_Cache_* object or null (i.e. no server cache is used)
+ */
+ private static $_cache = null;
+
+ /**
+ * @var Minify_Controller active controller for current request
+ */
+ protected static $_controller = null;
+
+ /**
+ * @var array options for current request
+ */
+ protected static $_options = null;
+
+ /**
+ * Set up sources to use Minify_Lines
+ *
+ * @param array $sources Minify_Source instances
+ *
+ * @return null
+ */
+ protected static function _setupDebug($sources)
+ {
+ foreach ($sources as $source) {
+ $source->minifier = array('Minify_Lines', 'minify');
+ $id = $source->getId();
+ $source->minifyOptions = array(
+ 'id' => (is_file($id) ? basename($id) : $id)
+ );
+ }
+ }
+
+ /**
+ * Combines sources and minifies the result.
+ *
+ * @return string
+ */
+ protected static function _combineMinify()
+ {
+ $type = self::$_options['contentType']; // ease readability
+
+ // when combining scripts, make sure all statements separated and
+ // trailing single line comment is terminated
+ $implodeSeparator = ($type === self::TYPE_JS)
+ ? "\n;"
+ : '';
+ // allow the user to pass a particular array of options to each
+ // minifier (designated by type). source objects may still override
+ // these
+ $defaultOptions = isset(self::$_options['minifierOptions'][$type])
+ ? self::$_options['minifierOptions'][$type]
+ : array();
+ // if minifier not set, default is no minification. source objects
+ // may still override this
+ $defaultMinifier = isset(self::$_options['minifiers'][$type])
+ ? self::$_options['minifiers'][$type]
+ : false;
+
+ if (Minify_Source::haveNoMinifyPrefs(self::$_controller->sources)) {
+ // all source have same options/minifier, better performance
+ // to combine, then minify once
+ foreach (self::$_controller->sources as $source) {
+ $pieces[] = $source->getContent();
+ }
+ $content = implode($implodeSeparator, $pieces);
+ if ($defaultMinifier) {
+ self::$_controller->loadMinifier($defaultMinifier);
+ $content = call_user_func($defaultMinifier, $content, $defaultOptions);
+ }
+ } else {
+ // minify each source with its own options and minifier, then combine
+ foreach (self::$_controller->sources as $source) {
+ // allow the source to override our minifier and options
+ $minifier = (null !== $source->minifier)
+ ? $source->minifier
+ : $defaultMinifier;
+ $options = (null !== $source->minifyOptions)
+ ? array_merge($defaultOptions, $source->minifyOptions)
+ : $defaultOptions;
+ if ($minifier) {
+ self::$_controller->loadMinifier($minifier);
+ // get source content and minify it
+ $pieces[] = call_user_func($minifier, $source->getContent(), $options);
+ } else {
+ $pieces[] = $source->getContent();
+ }
+ }
+ $content = implode($implodeSeparator, $pieces);
+ }
+
+ if ($type === self::TYPE_CSS && false !== strpos($content, '@import')) {
+ $content = self::_handleCssImports($content);
+ }
+
+ // do any post-processing (esp. for editing build URIs)
+ if (self::$_options['postprocessorRequire']) {
+ require_once self::$_options['postprocessorRequire'];
+ }
+ if (self::$_options['postprocessor']) {
+ $content = call_user_func(self::$_options['postprocessor'], $content, $type);
+ }
+ return $content;
+ }
+
+ /**
+ * Make a unique cache id for for this request.
+ *
+ * Any settings that could affect output are taken into consideration
+ *
+ * @return string
+ */
+ protected static function _getCacheId()
+ {
+ return md5(serialize(array(
+ Minify_Source::getDigest(self::$_controller->sources)
+ ,self::$_options['minifiers']
+ ,self::$_options['minifierOptions']
+ ,self::$_options['postprocessor']
+ ,self::$_options['bubbleCssImports']
+ )));
+ }
+
+ /**
+ * Bubble CSS @imports to the top or prepend a warning if an
+ * @import is detected not at the top.
+ */
+ protected static function _handleCssImports($css)
+ {
+ if (self::$_options['bubbleCssImports']) {
+ // bubble CSS imports
+ preg_match_all('/@import.*?;/', $css, $imports);
+ $css = implode('', $imports[0]) . preg_replace('/@import.*?;/', '', $css);
+ } else if ('' !== self::$importWarning) {
+ // remove comments so we don't mistake { in a comment as a block
+ $noCommentCss = preg_replace('@/\\*[\\s\\S]*?\\*/@', '', $css);
+ $lastImportPos = strrpos($noCommentCss, '@import');
+ $firstBlockPos = strpos($noCommentCss, '{');
+ if (false !== $lastImportPos
+ && false !== $firstBlockPos
+ && $firstBlockPos < $lastImportPos
+ ) {
+ // { appears before @import : prepend warning
+ $css = self::$importWarning . $css;
+ }
+ }
+ return $css;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Build.php b/plugins/Minify/extlib/minify/min/lib/Minify/Build.php
new file mode 100644
index 000000000..e625165e5
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Build.php
@@ -0,0 +1,103 @@
+<?php
+/**
+ * Class Minify_Build
+ * @package Minify
+ */
+
+require_once 'Minify/Source.php';
+
+/**
+ * Maintain a single last modification time for a group of Minify sources to
+ * allow use of far off Expires headers in Minify.
+ *
+ * <code>
+ * // in config file
+ * $groupSources = array(
+ * 'js' => array('file1.js', 'file2.js')
+ * ,'css' => array('file1.css', 'file2.css', 'file3.css')
+ * )
+ *
+ * // during HTML generation
+ * $jsBuild = new Minify_Build($groupSources['js']);
+ * $cssBuild = new Minify_Build($groupSources['css']);
+ *
+ * $script = "<script type='text/javascript' src='"
+ * . $jsBuild->uri('/min.php/js') . "'></script>";
+ * $link = "<link rel='stylesheet' type='text/css' href='"
+ * . $cssBuild->uri('/min.php/css') . "'>";
+ *
+ * // in min.php
+ * Minify::serve('Groups', array(
+ * 'groups' => $groupSources
+ * ,'setExpires' => (time() + 86400 * 365)
+ * ));
+ * </code>
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Build {
+
+ /**
+ * Last modification time of all files in the build
+ *
+ * @var int
+ */
+ public $lastModified = 0;
+
+ /**
+ * String to use as ampersand in uri(). Set this to '&' if
+ * you are not HTML-escaping URIs.
+ *
+ * @var string
+ */
+ public static $ampersand = '&amp;';
+
+ /**
+ * Get a time-stamped URI
+ *
+ * <code>
+ * echo $b->uri('/site.js');
+ * // outputs "/site.js?1678242"
+ *
+ * echo $b->uri('/scriptaculous.js?load=effects');
+ * // outputs "/scriptaculous.js?load=effects&amp1678242"
+ * </code>
+ *
+ * @param string $uri
+ * @param boolean $forceAmpersand (default = false) Force the use of ampersand to
+ * append the timestamp to the URI.
+ * @return string
+ */
+ public function uri($uri, $forceAmpersand = false) {
+ $sep = ($forceAmpersand || strpos($uri, '?') !== false)
+ ? self::$ampersand
+ : '?';
+ return "{$uri}{$sep}{$this->lastModified}";
+ }
+
+ /**
+ * Create a build object
+ *
+ * @param array $sources array of Minify_Source objects and/or file paths
+ *
+ * @return null
+ */
+ public function __construct($sources)
+ {
+ $max = 0;
+ foreach ((array)$sources as $source) {
+ if ($source instanceof Minify_Source) {
+ $max = max($max, $source->lastModified);
+ } elseif (is_string($source)) {
+ if (0 === strpos($source, '//')) {
+ $source = $_SERVER['DOCUMENT_ROOT'] . substr($source, 1);
+ }
+ if (is_file($source)) {
+ $max = max($max, filemtime($source));
+ }
+ }
+ }
+ $this->lastModified = $max;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php
new file mode 100644
index 000000000..2220cf221
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Class Minify_CSS
+ * @package Minify
+ */
+
+/**
+ * Minify CSS
+ *
+ * This class uses Minify_CSS_Compressor and Minify_CSS_UriRewriter to
+ * minify CSS and rewrite relative URIs.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ * @author http://code.google.com/u/1stvamp/ (Issue 64 patch)
+ */
+class Minify_CSS {
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @param array $options available options:
+ *
+ * 'preserveComments': (default true) multi-line comments that begin
+ * with "/*!" will be preserved with newlines before and after to
+ * enhance readability.
+ *
+ * 'prependRelativePath': (default null) if given, this string will be
+ * prepended to all relative URIs in import/url declarations
+ *
+ * 'currentDir': (default null) if given, this is assumed to be the
+ * directory of the current CSS file. Using this, minify will rewrite
+ * all relative URIs in import/url declarations to correctly point to
+ * the desired files. For this to work, the files *must* exist and be
+ * visible by the PHP process.
+ *
+ * 'symlinks': (default = array()) If the CSS file is stored in
+ * a symlink-ed directory, provide an array of link paths to
+ * target paths, where the link paths are within the document root. Because
+ * paths need to be normalized for this to work, use "//" to substitute
+ * the doc root in the link paths (the array keys). E.g.:
+ * <code>
+ * array('//symlink' => '/real/target/path') // unix
+ * array('//static' => 'D:\\staticStorage') // Windows
+ * </code>
+ *
+ * @return string
+ */
+ public static function minify($css, $options = array())
+ {
+ require_once 'Minify/CSS/Compressor.php';
+ if (isset($options['preserveComments'])
+ && !$options['preserveComments']) {
+ $css = Minify_CSS_Compressor::process($css, $options);
+ } else {
+ require_once 'Minify/CommentPreserver.php';
+ $css = Minify_CommentPreserver::process(
+ $css
+ ,array('Minify_CSS_Compressor', 'process')
+ ,array($options)
+ );
+ }
+ if (! isset($options['currentDir']) && ! isset($options['prependRelativePath'])) {
+ return $css;
+ }
+ require_once 'Minify/CSS/UriRewriter.php';
+ if (isset($options['currentDir'])) {
+ return Minify_CSS_UriRewriter::rewrite(
+ $css
+ ,$options['currentDir']
+ ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']
+ ,isset($options['symlinks']) ? $options['symlinks'] : array()
+ );
+ } else {
+ return Minify_CSS_UriRewriter::prepend(
+ $css
+ ,$options['prependRelativePath']
+ );
+ }
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php
new file mode 100644
index 000000000..a34828681
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/Compressor.php
@@ -0,0 +1,250 @@
+<?php
+/**
+ * Class Minify_CSS_Compressor
+ * @package Minify
+ */
+
+/**
+ * Compress CSS
+ *
+ * This is a heavy regex-based removal of whitespace, unnecessary
+ * comments and tokens, and some CSS value minimization, where practical.
+ * Many steps have been taken to avoid breaking comment-based hacks,
+ * including the ie5/mac filter (and its inversion), but expect tricky
+ * hacks involving comment tokens in 'content' value strings to break
+ * minimization badly. A test suite is available.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ * @author http://code.google.com/u/1stvamp/ (Issue 64 patch)
+ */
+class Minify_CSS_Compressor {
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @param array $options (currently ignored)
+ *
+ * @return string
+ */
+ public static function process($css, $options = array())
+ {
+ $obj = new Minify_CSS_Compressor($options);
+ return $obj->_process($css);
+ }
+
+ /**
+ * @var array options
+ */
+ protected $_options = null;
+
+ /**
+ * @var bool Are we "in" a hack?
+ *
+ * I.e. are some browsers targetted until the next comment?
+ */
+ protected $_inHack = false;
+
+
+ /**
+ * Constructor
+ *
+ * @param array $options (currently ignored)
+ *
+ * @return null
+ */
+ private function __construct($options) {
+ $this->_options = $options;
+ }
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @return string
+ */
+ protected function _process($css)
+ {
+ $css = str_replace("\r\n", "\n", $css);
+
+ // preserve empty comment after '>'
+ // http://www.webdevout.net/css-hacks#in_css-selectors
+ $css = preg_replace('@>/\\*\\s*\\*/@', '>/*keep*/', $css);
+
+ // preserve empty comment between property and value
+ // http://css-discuss.incutio.com/?page=BoxModelHack
+ $css = preg_replace('@/\\*\\s*\\*/\\s*:@', '/*keep*/:', $css);
+ $css = preg_replace('@:\\s*/\\*\\s*\\*/@', ':/*keep*/', $css);
+
+ // apply callback to all valid comments (and strip out surrounding ws
+ $css = preg_replace_callback('@\\s*/\\*([\\s\\S]*?)\\*/\\s*@'
+ ,array($this, '_commentCB'), $css);
+
+ // remove ws around { } and last semicolon in declaration block
+ $css = preg_replace('/\\s*{\\s*/', '{', $css);
+ $css = preg_replace('/;?\\s*}\\s*/', '}', $css);
+
+ // remove ws surrounding semicolons
+ $css = preg_replace('/\\s*;\\s*/', ';', $css);
+
+ // remove ws around urls
+ $css = preg_replace('/
+ url\\( # url(
+ \\s*
+ ([^\\)]+?) # 1 = the URL (really just a bunch of non right parenthesis)
+ \\s*
+ \\) # )
+ /x', 'url($1)', $css);
+
+ // remove ws between rules and colons
+ $css = preg_replace('/
+ \\s*
+ ([{;]) # 1 = beginning of block or rule separator
+ \\s*
+ ([\\*_]?[\\w\\-]+) # 2 = property (and maybe IE filter)
+ \\s*
+ :
+ \\s*
+ (\\b|[#\'"]) # 3 = first character of a value
+ /x', '$1$2:$3', $css);
+
+ // remove ws in selectors
+ $css = preg_replace_callback('/
+ (?: # non-capture
+ \\s*
+ [^~>+,\\s]+ # selector part
+ \\s*
+ [,>+~] # combinators
+ )+
+ \\s*
+ [^~>+,\\s]+ # selector part
+ { # open declaration block
+ /x'
+ ,array($this, '_selectorsCB'), $css);
+
+ // minimize hex colors
+ $css = preg_replace('/([^=])#([a-f\\d])\\2([a-f\\d])\\3([a-f\\d])\\4([\\s;\\}])/i'
+ , '$1#$2$3$4$5', $css);
+
+ // remove spaces between font families
+ $css = preg_replace_callback('/font-family:([^;}]+)([;}])/'
+ ,array($this, '_fontFamilyCB'), $css);
+
+ $css = preg_replace('/@import\\s+url/', '@import url', $css);
+
+ // replace any ws involving newlines with a single newline
+ $css = preg_replace('/[ \\t]*\\n+\\s*/', "\n", $css);
+
+ // separate common descendent selectors w/ newlines (to limit line lengths)
+ $css = preg_replace('/([\\w#\\.\\*]+)\\s+([\\w#\\.\\*]+){/', "$1\n$2{", $css);
+
+ // Use newline after 1st numeric value (to limit line lengths).
+ $css = preg_replace('/
+ ((?:padding|margin|border|outline):\\d+(?:px|em)?) # 1 = prop : 1st numeric value
+ \\s+
+ /x'
+ ,"$1\n", $css);
+
+ // prevent triggering IE6 bug: http://www.crankygeek.com/ie6pebug/
+ $css = preg_replace('/:first-l(etter|ine)\\{/', ':first-l$1 {', $css);
+
+ return trim($css);
+ }
+
+ /**
+ * Replace what looks like a set of selectors
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _selectorsCB($m)
+ {
+ // remove ws around the combinators
+ return preg_replace('/\\s*([,>+~])\\s*/', '$1', $m[0]);
+ }
+
+ /**
+ * Process a comment and return a replacement
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _commentCB($m)
+ {
+ $hasSurroundingWs = (trim($m[0]) !== $m[1]);
+ $m = $m[1];
+ // $m is the comment content w/o the surrounding tokens,
+ // but the return value will replace the entire comment.
+ if ($m === 'keep') {
+ return '/**/';
+ }
+ if ($m === '" "') {
+ // component of http://tantek.com/CSS/Examples/midpass.html
+ return '/*" "*/';
+ }
+ if (preg_match('@";\\}\\s*\\}/\\*\\s+@', $m)) {
+ // component of http://tantek.com/CSS/Examples/midpass.html
+ return '/*";}}/* */';
+ }
+ if ($this->_inHack) {
+ // inversion: feeding only to one browser
+ if (preg_match('@
+ ^/ # comment started like /*/
+ \\s*
+ (\\S[\\s\\S]+?) # has at least some non-ws content
+ \\s*
+ /\\* # ends like /*/ or /**/
+ @x', $m, $n)) {
+ // end hack mode after this comment, but preserve the hack and comment content
+ $this->_inHack = false;
+ return "/*/{$n[1]}/**/";
+ }
+ }
+ if (substr($m, -1) === '\\') { // comment ends like \*/
+ // begin hack mode and preserve hack
+ $this->_inHack = true;
+ return '/*\\*/';
+ }
+ if ($m !== '' && $m[0] === '/') { // comment looks like /*/ foo */
+ // begin hack mode and preserve hack
+ $this->_inHack = true;
+ return '/*/*/';
+ }
+ if ($this->_inHack) {
+ // a regular comment ends hack mode but should be preserved
+ $this->_inHack = false;
+ return '/**/';
+ }
+ // Issue 107: if there's any surrounding whitespace, it may be important, so
+ // replace the comment with a single space
+ return $hasSurroundingWs // remove all other comments
+ ? ' '
+ : '';
+ }
+
+ /**
+ * Process a font-family listing and return a replacement
+ *
+ * @param array $m regex matches
+ *
+ * @return string
+ */
+ protected function _fontFamilyCB($m)
+ {
+ $m[1] = preg_replace('/
+ \\s*
+ (
+ "[^"]+" # 1 = family in double qutoes
+ |\'[^\']+\' # or 1 = family in single quotes
+ |[\\w\\-]+ # or 1 = unquoted family
+ )
+ \\s*
+ /x', '$1', $m[1]);
+ return 'font-family:' . $m[1] . $m[2];
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php
new file mode 100644
index 000000000..824c6bb2a
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/CSS/UriRewriter.php
@@ -0,0 +1,270 @@
+<?php
+/**
+ * Class Minify_CSS_UriRewriter
+ * @package Minify
+ */
+
+/**
+ * Rewrite file-relative URIs as root-relative in CSS files
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_CSS_UriRewriter {
+
+ /**
+ * Defines which class to call as part of callbacks, change this
+ * if you extend Minify_CSS_UriRewriter
+ * @var string
+ */
+ protected static $className = 'Minify_CSS_UriRewriter';
+
+ /**
+ * rewrite() and rewriteRelative() append debugging information here
+ * @var string
+ */
+ public static $debugText = '';
+
+ /**
+ * Rewrite file relative URIs as root relative in CSS files
+ *
+ * @param string $css
+ *
+ * @param string $currentDir The directory of the current CSS file.
+ *
+ * @param string $docRoot The document root of the web site in which
+ * the CSS file resides (default = $_SERVER['DOCUMENT_ROOT']).
+ *
+ * @param array $symlinks (default = array()) If the CSS file is stored in
+ * a symlink-ed directory, provide an array of link paths to
+ * target paths, where the link paths are within the document root. Because
+ * paths need to be normalized for this to work, use "//" to substitute
+ * the doc root in the link paths (the array keys). E.g.:
+ * <code>
+ * array('//symlink' => '/real/target/path') // unix
+ * array('//static' => 'D:\\staticStorage') // Windows
+ * </code>
+ *
+ * @return string
+ */
+ public static function rewrite($css, $currentDir, $docRoot = null, $symlinks = array())
+ {
+ self::$_docRoot = self::_realpath(
+ $docRoot ? $docRoot : $_SERVER['DOCUMENT_ROOT']
+ );
+ self::$_currentDir = self::_realpath($currentDir);
+ self::$_symlinks = array();
+
+ // normalize symlinks
+ foreach ($symlinks as $link => $target) {
+ $link = ($link === '//')
+ ? self::$_docRoot
+ : str_replace('//', self::$_docRoot . '/', $link);
+ $link = strtr($link, '/', DIRECTORY_SEPARATOR);
+ self::$_symlinks[$link] = self::_realpath($target);
+ }
+
+ self::$debugText .= "docRoot : " . self::$_docRoot . "\n"
+ . "currentDir : " . self::$_currentDir . "\n";
+ if (self::$_symlinks) {
+ self::$debugText .= "symlinks : " . var_export(self::$_symlinks, 1) . "\n";
+ }
+ self::$debugText .= "\n";
+
+ $css = self::_trimUrls($css);
+
+ // rewrite
+ $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/'
+ ,array(self::$className, '_processUriCB'), $css);
+ $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
+ ,array(self::$className, '_processUriCB'), $css);
+
+ return $css;
+ }
+
+ /**
+ * Prepend a path to relative URIs in CSS files
+ *
+ * @param string $css
+ *
+ * @param string $path The path to prepend.
+ *
+ * @return string
+ */
+ public static function prepend($css, $path)
+ {
+ self::$_prependPath = $path;
+
+ $css = self::_trimUrls($css);
+
+ // append
+ $css = preg_replace_callback('/@import\\s+([\'"])(.*?)[\'"]/'
+ ,array(self::$className, '_processUriCB'), $css);
+ $css = preg_replace_callback('/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
+ ,array(self::$className, '_processUriCB'), $css);
+
+ self::$_prependPath = null;
+ return $css;
+ }
+
+
+ /**
+ * @var string directory of this stylesheet
+ */
+ private static $_currentDir = '';
+
+ /**
+ * @var string DOC_ROOT
+ */
+ private static $_docRoot = '';
+
+ /**
+ * @var array directory replacements to map symlink targets back to their
+ * source (within the document root) E.g. '/var/www/symlink' => '/var/realpath'
+ */
+ private static $_symlinks = array();
+
+ /**
+ * @var string path to prepend
+ */
+ private static $_prependPath = null;
+
+ private static function _trimUrls($css)
+ {
+ return preg_replace('/
+ url\\( # url(
+ \\s*
+ ([^\\)]+?) # 1 = URI (assuming does not contain ")")
+ \\s*
+ \\) # )
+ /x', 'url($1)', $css);
+ }
+
+ private static function _processUriCB($m)
+ {
+ // $m matched either '/@import\\s+([\'"])(.*?)[\'"]/' or '/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
+ $isImport = ($m[0][0] === '@');
+ // determine URI and the quote character (if any)
+ if ($isImport) {
+ $quoteChar = $m[1];
+ $uri = $m[2];
+ } else {
+ // $m[1] is either quoted or not
+ $quoteChar = ($m[1][0] === "'" || $m[1][0] === '"')
+ ? $m[1][0]
+ : '';
+ $uri = ($quoteChar === '')
+ ? $m[1]
+ : substr($m[1], 1, strlen($m[1]) - 2);
+ }
+ // analyze URI
+ if ('/' !== $uri[0] // root-relative
+ && false === strpos($uri, '//') // protocol (non-data)
+ && 0 !== strpos($uri, 'data:') // data protocol
+ ) {
+ // URI is file-relative: rewrite depending on options
+ $uri = (self::$_prependPath !== null)
+ ? (self::$_prependPath . $uri)
+ : self::rewriteRelative($uri, self::$_currentDir, self::$_docRoot, self::$_symlinks);
+ }
+ return $isImport
+ ? "@import {$quoteChar}{$uri}{$quoteChar}"
+ : "url({$quoteChar}{$uri}{$quoteChar})";
+ }
+
+ /**
+ * Rewrite a file relative URI as root relative
+ *
+ * <code>
+ * Minify_CSS_UriRewriter::rewriteRelative(
+ * '../img/hello.gif'
+ * , '/home/user/www/css' // path of CSS file
+ * , '/home/user/www' // doc root
+ * );
+ * // returns '/img/hello.gif'
+ *
+ * // example where static files are stored in a symlinked directory
+ * Minify_CSS_UriRewriter::rewriteRelative(
+ * 'hello.gif'
+ * , '/var/staticFiles/theme'
+ * , '/home/user/www'
+ * , array('/home/user/www/static' => '/var/staticFiles')
+ * );
+ * // returns '/static/theme/hello.gif'
+ * </code>
+ *
+ * @param string $uri file relative URI
+ *
+ * @param string $realCurrentDir realpath of the current file's directory.
+ *
+ * @param string $realDocRoot realpath of the site document root.
+ *
+ * @param array $symlinks (default = array()) If the file is stored in
+ * a symlink-ed directory, provide an array of link paths to
+ * real target paths, where the link paths "appear" to be within the document
+ * root. E.g.:
+ * <code>
+ * array('/home/foo/www/not/real/path' => '/real/target/path') // unix
+ * array('C:\\htdocs\\not\\real' => 'D:\\real\\target\\path') // Windows
+ * </code>
+ *
+ * @return string
+ */
+ public static function rewriteRelative($uri, $realCurrentDir, $realDocRoot, $symlinks = array())
+ {
+ // prepend path with current dir separator (OS-independent)
+ $path = strtr($realCurrentDir, '/', DIRECTORY_SEPARATOR)
+ . DIRECTORY_SEPARATOR . strtr($uri, '/', DIRECTORY_SEPARATOR);
+
+ self::$debugText .= "file-relative URI : {$uri}\n"
+ . "path prepended : {$path}\n";
+
+ // "unresolve" a symlink back to doc root
+ foreach ($symlinks as $link => $target) {
+ if (0 === strpos($path, $target)) {
+ // replace $target with $link
+ $path = $link . substr($path, strlen($target));
+
+ self::$debugText .= "symlink unresolved : {$path}\n";
+
+ break;
+ }
+ }
+ // strip doc root
+ $path = substr($path, strlen($realDocRoot));
+
+ self::$debugText .= "docroot stripped : {$path}\n";
+
+ // fix to root-relative URI
+
+ $uri = strtr($path, '/\\', '//');
+
+ // remove /./ and /../ where possible
+ $uri = str_replace('/./', '/', $uri);
+ // inspired by patch from Oleg Cherniy
+ do {
+ $uri = preg_replace('@/[^/]+/\\.\\./@', '/', $uri, 1, $changed);
+ } while ($changed);
+
+ self::$debugText .= "traversals removed : {$uri}\n\n";
+
+ return $uri;
+ }
+
+ /**
+ * Get realpath with any trailing slash removed. If realpath() fails,
+ * just remove the trailing slash.
+ *
+ * @param string $path
+ *
+ * @return mixed path with no trailing slash
+ */
+ protected static function _realpath($path)
+ {
+ $realPath = realpath($path);
+ if ($realPath !== false) {
+ $path = $realPath;
+ }
+ return rtrim($path, '/\\');
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php
new file mode 100644
index 000000000..ca84d2998
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/APC.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Class Minify_Cache_APC
+ * @package Minify
+ */
+
+/**
+ * APC-based cache class for Minify
+ *
+ * <code>
+ * Minify::setCache(new Minify_Cache_APC());
+ * </code>
+ *
+ * @package Minify
+ * @author Chris Edwards
+ **/
+class Minify_Cache_APC {
+
+ /**
+ * Create a Minify_Cache_APC object, to be passed to
+ * Minify::setCache().
+ *
+ *
+ * @param int $expire seconds until expiration (default = 0
+ * meaning the item will not get an expiration date)
+ *
+ * @return null
+ */
+ public function __construct($expire = 0)
+ {
+ $this->_exp = $expire;
+ }
+
+ /**
+ * Write data to cache.
+ *
+ * @param string $id cache id
+ *
+ * @param string $data
+ *
+ * @return bool success
+ */
+ public function store($id, $data)
+ {
+ return apc_store($id, "{$_SERVER['REQUEST_TIME']}|{$data}", $this->_exp);
+ }
+
+ /**
+ * Get the size of a cache entry
+ *
+ * @param string $id cache id
+ *
+ * @return int size in bytes
+ */
+ public function getSize($id)
+ {
+ return $this->_fetch($id)
+ ? strlen($this->_data)
+ : false;
+ }
+
+ /**
+ * Does a valid cache entry exist?
+ *
+ * @param string $id cache id
+ *
+ * @param int $srcMtime mtime of the original source file(s)
+ *
+ * @return bool exists
+ */
+ public function isValid($id, $srcMtime)
+ {
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
+ }
+
+ /**
+ * Send the cached content to output
+ *
+ * @param string $id cache id
+ */
+ public function display($id)
+ {
+ echo $this->_fetch($id)
+ ? $this->_data
+ : '';
+ }
+
+ /**
+ * Fetch the cached content
+ *
+ * @param string $id cache id
+ *
+ * @return string
+ */
+ public function fetch($id)
+ {
+ return $this->_fetch($id)
+ ? $this->_data
+ : '';
+ }
+
+ private $_exp = null;
+
+ // cache of most recently fetched id
+ private $_lm = null;
+ private $_data = null;
+ private $_id = null;
+
+ /**
+ * Fetch data and timestamp from apc, store in instance
+ *
+ * @param string $id
+ *
+ * @return bool success
+ */
+ private function _fetch($id)
+ {
+ if ($this->_id === $id) {
+ return true;
+ }
+ $ret = apc_fetch($id);
+ if (false === $ret) {
+ $this->_id = null;
+ return false;
+ }
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
+ $this->_id = $id;
+ return true;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php
new file mode 100644
index 000000000..8744a7e04
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/File.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Class Minify_Cache_File
+ * @package Minify
+ */
+
+class Minify_Cache_File {
+
+ public function __construct($path = '', $fileLocking = false)
+ {
+ if (! $path) {
+ require_once 'Solar/Dir.php';
+ $path = rtrim(Solar_Dir::tmp(), DIRECTORY_SEPARATOR);
+ }
+ $this->_locking = $fileLocking;
+ $this->_path = $path;
+ }
+
+ /**
+ * Write data to cache.
+ *
+ * @param string $id cache id (e.g. a filename)
+ *
+ * @param string $data
+ *
+ * @return bool success
+ */
+ public function store($id, $data)
+ {
+ $flag = $this->_locking
+ ? LOCK_EX
+ : null;
+ if (is_file($this->_path . '/' . $id)) {
+ @unlink($this->_path . '/' . $id);
+ }
+ if (! @file_put_contents($this->_path . '/' . $id, $data, $flag)) {
+ return false;
+ }
+ // write control
+ if ($data !== $this->fetch($id)) {
+ @unlink($file);
+ return false;
+ }
+ return true;
+ }
+
+ /**
+ * Get the size of a cache entry
+ *
+ * @param string $id cache id (e.g. a filename)
+ *
+ * @return int size in bytes
+ */
+ public function getSize($id)
+ {
+ return filesize($this->_path . '/' . $id);
+ }
+
+ /**
+ * Does a valid cache entry exist?
+ *
+ * @param string $id cache id (e.g. a filename)
+ *
+ * @param int $srcMtime mtime of the original source file(s)
+ *
+ * @return bool exists
+ */
+ public function isValid($id, $srcMtime)
+ {
+ $file = $this->_path . '/' . $id;
+ return (is_file($file) && (filemtime($file) >= $srcMtime));
+ }
+
+ /**
+ * Send the cached content to output
+ *
+ * @param string $id cache id (e.g. a filename)
+ */
+ public function display($id)
+ {
+ if ($this->_locking) {
+ $fp = fopen($this->_path . '/' . $id, 'rb');
+ flock($fp, LOCK_SH);
+ fpassthru($fp);
+ flock($fp, LOCK_UN);
+ fclose($fp);
+ } else {
+ readfile($this->_path . '/' . $id);
+ }
+ }
+
+ /**
+ * Fetch the cached content
+ *
+ * @param string $id cache id (e.g. a filename)
+ *
+ * @return string
+ */
+ public function fetch($id)
+ {
+ if ($this->_locking) {
+ $fp = fopen($this->_path . '/' . $id, 'rb');
+ flock($fp, LOCK_SH);
+ $ret = stream_get_contents($fp);
+ flock($fp, LOCK_UN);
+ fclose($fp);
+ return $ret;
+ } else {
+ return file_get_contents($this->_path . '/' . $id);
+ }
+ }
+
+ /**
+ * Fetch the cache path used
+ *
+ * @return string
+ */
+ public function getPath()
+ {
+ return $this->_path;
+ }
+
+ private $_path = null;
+ private $_locking = null;
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php
new file mode 100644
index 000000000..2b81e7a32
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Cache/Memcache.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * Class Minify_Cache_Memcache
+ * @package Minify
+ */
+
+/**
+ * Memcache-based cache class for Minify
+ *
+ * <code>
+ * // fall back to disk caching if memcache can't connect
+ * $memcache = new Memcache;
+ * if ($memcache->connect('localhost', 11211)) {
+ * Minify::setCache(new Minify_Cache_Memcache($memcache));
+ * } else {
+ * Minify::setCache();
+ * }
+ * </code>
+ **/
+class Minify_Cache_Memcache {
+
+ /**
+ * Create a Minify_Cache_Memcache object, to be passed to
+ * Minify::setCache().
+ *
+ * @param Memcache $memcache already-connected instance
+ *
+ * @param int $expire seconds until expiration (default = 0
+ * meaning the item will not get an expiration date)
+ *
+ * @return null
+ */
+ public function __construct($memcache, $expire = 0)
+ {
+ $this->_mc = $memcache;
+ $this->_exp = $expire;
+ }
+
+ /**
+ * Write data to cache.
+ *
+ * @param string $id cache id
+ *
+ * @param string $data
+ *
+ * @return bool success
+ */
+ public function store($id, $data)
+ {
+ return $this->_mc->set($id, "{$_SERVER['REQUEST_TIME']}|{$data}", 0, $this->_exp);
+ }
+
+
+ /**
+ * Get the size of a cache entry
+ *
+ * @param string $id cache id
+ *
+ * @return int size in bytes
+ */
+ public function getSize($id)
+ {
+ return $this->_fetch($id)
+ ? strlen($this->_data)
+ : false;
+ }
+
+ /**
+ * Does a valid cache entry exist?
+ *
+ * @param string $id cache id
+ *
+ * @param int $srcMtime mtime of the original source file(s)
+ *
+ * @return bool exists
+ */
+ public function isValid($id, $srcMtime)
+ {
+ return ($this->_fetch($id) && ($this->_lm >= $srcMtime));
+ }
+
+ /**
+ * Send the cached content to output
+ *
+ * @param string $id cache id
+ */
+ public function display($id)
+ {
+ echo $this->_fetch($id)
+ ? $this->_data
+ : '';
+ }
+
+ /**
+ * Fetch the cached content
+ *
+ * @param string $id cache id
+ *
+ * @return string
+ */
+ public function fetch($id)
+ {
+ return $this->_fetch($id)
+ ? $this->_data
+ : '';
+ }
+
+ private $_mc = null;
+ private $_exp = null;
+
+ // cache of most recently fetched id
+ private $_lm = null;
+ private $_data = null;
+ private $_id = null;
+
+ /**
+ * Fetch data and timestamp from memcache, store in instance
+ *
+ * @param string $id
+ *
+ * @return bool success
+ */
+ private function _fetch($id)
+ {
+ if ($this->_id === $id) {
+ return true;
+ }
+ $ret = $this->_mc->get($id);
+ if (false === $ret) {
+ $this->_id = null;
+ return false;
+ }
+ list($this->_lm, $this->_data) = explode('|', $ret, 2);
+ $this->_id = $id;
+ return true;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php b/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php
new file mode 100644
index 000000000..f56eb3461
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/CommentPreserver.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Class Minify_CommentPreserver
+ * @package Minify
+ */
+
+/**
+ * Process a string in pieces preserving C-style comments that begin with "/*!"
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_CommentPreserver {
+
+ /**
+ * String to be prepended to each preserved comment
+ *
+ * @var string
+ */
+ public static $prepend = "\n";
+
+ /**
+ * String to be appended to each preserved comment
+ *
+ * @var string
+ */
+ public static $append = "\n";
+
+ /**
+ * Process a string outside of C-style comments that begin with "/*!"
+ *
+ * On each non-empty string outside these comments, the given processor
+ * function will be called. The first "!" will be removed from the
+ * preserved comments, and the comments will be surrounded by
+ * Minify_CommentPreserver::$preprend and Minify_CommentPreserver::$append.
+ *
+ * @param string $content
+ * @param callback $processor function
+ * @param array $args array of extra arguments to pass to the processor
+ * function (default = array())
+ * @return string
+ */
+ public static function process($content, $processor, $args = array())
+ {
+ $ret = '';
+ while (true) {
+ list($beforeComment, $comment, $afterComment) = self::_nextComment($content);
+ if ('' !== $beforeComment) {
+ $callArgs = $args;
+ array_unshift($callArgs, $beforeComment);
+ $ret .= call_user_func_array($processor, $callArgs);
+ }
+ if (false === $comment) {
+ break;
+ }
+ $ret .= $comment;
+ $content = $afterComment;
+ }
+ return $ret;
+ }
+
+ /**
+ * Extract comments that YUI Compressor preserves.
+ *
+ * @param string $in input
+ *
+ * @return array 3 elements are returned. If a YUI comment is found, the
+ * 2nd element is the comment and the 1st and 2nd are the surrounding
+ * strings. If no comment is found, the entire string is returned as the
+ * 1st element and the other two are false.
+ */
+ private static function _nextComment($in)
+ {
+ if (
+ false === ($start = strpos($in, '/*!'))
+ || false === ($end = strpos($in, '*/', $start + 3))
+ ) {
+ return array($in, false, false);
+ }
+ $ret = array(
+ substr($in, 0, $start)
+ ,self::$prepend . '/*' . substr($in, $start + 3, $end - $start - 1) . self::$append
+ );
+ $endChars = (strlen($in) - $end - 2);
+ $ret[] = (0 === $endChars)
+ ? ''
+ : substr($in, -$endChars);
+ return $ret;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php
new file mode 100644
index 000000000..84889b3f0
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Base.php
@@ -0,0 +1,202 @@
+<?php
+/**
+ * Class Minify_Controller_Base
+ * @package Minify
+ */
+
+/**
+ * Base class for Minify controller
+ *
+ * The controller class validates a request and uses it to create sources
+ * for minification and set options like contentType. It's also responsible
+ * for loading minifier code upon request.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+abstract class Minify_Controller_Base {
+
+ /**
+ * Setup controller sources and set an needed options for Minify::source
+ *
+ * You must override this method in your subclass controller to set
+ * $this->sources. If the request is NOT valid, make sure $this->sources
+ * is left an empty array. Then strip any controller-specific options from
+ * $options and return it. To serve files, $this->sources must be an array of
+ * Minify_Source objects.
+ *
+ * @param array $options controller and Minify options
+ *
+ * return array $options Minify::serve options
+ */
+ abstract public function setupSources($options);
+
+ /**
+ * Get default Minify options for this controller.
+ *
+ * Override in subclass to change defaults
+ *
+ * @return array options for Minify
+ */
+ public function getDefaultMinifyOptions() {
+ return array(
+ 'isPublic' => true
+ ,'encodeOutput' => function_exists('gzdeflate')
+ ,'encodeMethod' => null // determine later
+ ,'encodeLevel' => 9
+ ,'minifierOptions' => array() // no minifier options
+ ,'contentTypeCharset' => 'utf-8'
+ ,'maxAge' => 1800 // 30 minutes
+ ,'rewriteCssUris' => true
+ ,'bubbleCssImports' => false
+ ,'quiet' => false // serve() will send headers and output
+ ,'debug' => false
+
+ // if you override this, the response code MUST be directly after
+ // the first space.
+ ,'badRequestHeader' => 'HTTP/1.0 400 Bad Request'
+
+ // callback function to see/modify content of all sources
+ ,'postprocessor' => null
+ // file to require to load preprocessor
+ ,'postprocessorRequire' => null
+ );
+ }
+
+ /**
+ * Get default minifiers for this controller.
+ *
+ * Override in subclass to change defaults
+ *
+ * @return array minifier callbacks for common types
+ */
+ public function getDefaultMinifers() {
+ $ret[Minify::TYPE_JS] = array('JSMin', 'minify');
+ $ret[Minify::TYPE_CSS] = array('Minify_CSS', 'minify');
+ $ret[Minify::TYPE_HTML] = array('Minify_HTML', 'minify');
+ return $ret;
+ }
+
+ /**
+ * Load any code necessary to execute the given minifier callback.
+ *
+ * The controller is responsible for loading minification code on demand
+ * via this method. This built-in function will only load classes for
+ * static method callbacks where the class isn't already defined. It uses
+ * the PEAR convention, so, given array('Jimmy_Minifier', 'minCss'), this
+ * function will include 'Jimmy/Minifier.php'.
+ *
+ * If you need code loaded on demand and this doesn't suit you, you'll need
+ * to override this function in your subclass.
+ * @see Minify_Controller_Page::loadMinifier()
+ *
+ * @param callback $minifierCallback callback of minifier function
+ *
+ * @return null
+ */
+ public function loadMinifier($minifierCallback)
+ {
+ if (is_array($minifierCallback)
+ && is_string($minifierCallback[0])
+ && !class_exists($minifierCallback[0], false)) {
+
+ require str_replace('_', '/', $minifierCallback[0]) . '.php';
+ }
+ }
+
+ /**
+ * Is a user-given file within an allowable directory, existing,
+ * and having an extension js/css/html/txt ?
+ *
+ * This is a convenience function for controllers that have to accept
+ * user-given paths
+ *
+ * @param string $file full file path (already processed by realpath())
+ *
+ * @param array $safeDirs directories where files are safe to serve. Files can also
+ * be in subdirectories of these directories.
+ *
+ * @return bool file is safe
+ */
+ public static function _fileIsSafe($file, $safeDirs)
+ {
+ $pathOk = false;
+ foreach ((array)$safeDirs as $safeDir) {
+ if (strpos($file, $safeDir) === 0) {
+ $pathOk = true;
+ break;
+ }
+ }
+ $base = basename($file);
+ if (! $pathOk || ! is_file($file) || $base[0] === '.') {
+ return false;
+ }
+ list($revExt) = explode('.', strrev($base));
+ return in_array(strrev($revExt), array('js', 'css', 'html', 'txt'));
+ }
+
+ /**
+ * @var array instances of Minify_Source, which provide content and
+ * any individual minification needs.
+ *
+ * @see Minify_Source
+ */
+ public $sources = array();
+
+ /**
+ * Mix in default controller options with user-given options
+ *
+ * @param array $options user options
+ *
+ * @return array mixed options
+ */
+ public final function mixInDefaultOptions($options)
+ {
+ $ret = array_merge(
+ $this->getDefaultMinifyOptions(), $options
+ );
+ if (! isset($options['minifiers'])) {
+ $options['minifiers'] = array();
+ }
+ $ret['minifiers'] = array_merge(
+ $this->getDefaultMinifers(), $options['minifiers']
+ );
+ return $ret;
+ }
+
+ /**
+ * Analyze sources (if there are any) and set $options 'contentType'
+ * and 'lastModifiedTime' if they already aren't.
+ *
+ * @param array $options options for Minify
+ *
+ * @return array options for Minify
+ */
+ public final function analyzeSources($options = array())
+ {
+ if ($this->sources) {
+ if (! isset($options['contentType'])) {
+ $options['contentType'] = Minify_Source::getContentType($this->sources);
+ }
+ // last modified is needed for caching, even if setExpires is set
+ if (! isset($options['lastModifiedTime'])) {
+ $max = 0;
+ foreach ($this->sources as $source) {
+ $max = max($source->lastModified, $max);
+ }
+ $options['lastModifiedTime'] = $max;
+ }
+ }
+ return $options;
+ }
+
+ /**
+ * Send message to the Minify logger
+ * @param string $msg
+ * @return null
+ */
+ protected function log($msg) {
+ require_once 'Minify/Logger.php';
+ Minify_Logger::log($msg);
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php
new file mode 100644
index 000000000..83f028adf
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Files.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Class Minify_Controller_Files
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for minifying a set of files
+ *
+ * E.g. the following would serve the minified Javascript for a site
+ * <code>
+ * Minify::serve('Files', array(
+ * 'files' => array(
+ * '//js/jquery.js'
+ * ,'//js/plugins.js'
+ * ,'/home/username/file.js'
+ * )
+ * ));
+ * </code>
+ *
+ * As a shortcut, the controller will replace "//" at the beginning
+ * of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_Files extends Minify_Controller_Base {
+
+ /**
+ * Set up file sources
+ *
+ * @param array $options controller and Minify options
+ * @return array Minify options
+ *
+ * Controller options:
+ *
+ * 'files': (required) array of complete file paths, or a single path
+ */
+ public function setupSources($options) {
+ // strip controller options
+
+ $files = $options['files'];
+ // if $files is a single object, casting will break it
+ if (is_object($files)) {
+ $files = array($files);
+ } elseif (! is_array($files)) {
+ $files = (array)$files;
+ }
+ unset($options['files']);
+
+ $sources = array();
+ foreach ($files as $file) {
+ if ($file instanceof Minify_Source) {
+ $sources[] = $file;
+ continue;
+ }
+ if (0 === strpos($file, '//')) {
+ $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1);
+ }
+ $realPath = realpath($file);
+ if (is_file($realPath)) {
+ $sources[] = new Minify_Source(array(
+ 'filepath' => $realPath
+ ));
+ } else {
+ $this->log("The path \"{$file}\" could not be found (or was not a file)");
+ return $options;
+ }
+ }
+ if ($sources) {
+ $this->sources = $sources;
+ }
+ return $options;
+ }
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php
new file mode 100644
index 000000000..1ac57703a
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Groups.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Class Minify_Controller_Groups
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for serving predetermined groups of minimized sets, selected
+ * by PATH_INFO
+ *
+ * <code>
+ * Minify::serve('Groups', array(
+ * 'groups' => array(
+ * 'css' => array('//css/type.css', '//css/layout.css')
+ * ,'js' => array('//js/jquery.js', '//js/site.js')
+ * )
+ * ));
+ * </code>
+ *
+ * If the above code were placed in /serve.php, it would enable the URLs
+ * /serve.php/js and /serve.php/css
+ *
+ * As a shortcut, the controller will replace "//" at the beginning
+ * of a filename with $_SERVER['DOCUMENT_ROOT'] . '/'.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_Groups extends Minify_Controller_Base {
+
+ /**
+ * Set up groups of files as sources
+ *
+ * @param array $options controller and Minify options
+ * @return array Minify options
+ *
+ * Controller options:
+ *
+ * 'groups': (required) array mapping PATH_INFO strings to arrays
+ * of complete file paths. @see Minify_Controller_Groups
+ */
+ public function setupSources($options) {
+ // strip controller options
+ $groups = $options['groups'];
+ unset($options['groups']);
+
+ // mod_fcgid places PATH_INFO in ORIG_PATH_INFO
+ $pi = isset($_SERVER['ORIG_PATH_INFO'])
+ ? substr($_SERVER['ORIG_PATH_INFO'], 1)
+ : (isset($_SERVER['PATH_INFO'])
+ ? substr($_SERVER['PATH_INFO'], 1)
+ : false
+ );
+ if (false === $pi || ! isset($groups[$pi])) {
+ // no PATH_INFO or not a valid group
+ $this->log("Missing PATH_INFO or no group set for \"$pi\"");
+ return $options;
+ }
+ $sources = array();
+
+ $files = $groups[$pi];
+ // if $files is a single object, casting will break it
+ if (is_object($files)) {
+ $files = array($files);
+ } elseif (! is_array($files)) {
+ $files = (array)$files;
+ }
+ foreach ($files as $file) {
+ if ($file instanceof Minify_Source) {
+ $sources[] = $file;
+ continue;
+ }
+ if (0 === strpos($file, '//')) {
+ $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1);
+ }
+ $realPath = realpath($file);
+ if (is_file($realPath)) {
+ $sources[] = new Minify_Source(array(
+ 'filepath' => $realPath
+ ));
+ } else {
+ $this->log("The path \"{$file}\" could not be found (or was not a file)");
+ return $options;
+ }
+ }
+ if ($sources) {
+ $this->sources = $sources;
+ }
+ return $options;
+ }
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php
new file mode 100644
index 000000000..9582d292c
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/MinApp.php
@@ -0,0 +1,132 @@
+<?php
+/**
+ * Class Minify_Controller_MinApp
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for requests to /min/index.php
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_MinApp extends Minify_Controller_Base {
+
+ /**
+ * Set up groups of files as sources
+ *
+ * @param array $options controller and Minify options
+ * @return array Minify options
+ *
+ */
+ public function setupSources($options) {
+ // filter controller options
+ $cOptions = array_merge(
+ array(
+ 'allowDirs' => '//'
+ ,'groupsOnly' => false
+ ,'groups' => array()
+ ,'maxFiles' => 10
+ )
+ ,(isset($options['minApp']) ? $options['minApp'] : array())
+ );
+ unset($options['minApp']);
+ $sources = array();
+ if (isset($_GET['g'])) {
+ // try groups
+ if (! isset($cOptions['groups'][$_GET['g']])) {
+ $this->log("A group configuration for \"{$_GET['g']}\" was not set");
+ return $options;
+ }
+
+ $files = $cOptions['groups'][$_GET['g']];
+ // if $files is a single object, casting will break it
+ if (is_object($files)) {
+ $files = array($files);
+ } elseif (! is_array($files)) {
+ $files = (array)$files;
+ }
+ foreach ($files as $file) {
+ if ($file instanceof Minify_Source) {
+ $sources[] = $file;
+ continue;
+ }
+ if (0 === strpos($file, '//')) {
+ $file = $_SERVER['DOCUMENT_ROOT'] . substr($file, 1);
+ }
+ $file = realpath($file);
+ if (is_file($file)) {
+ $sources[] = new Minify_Source(array(
+ 'filepath' => $file
+ ));
+ } else {
+ $this->log("The path \"{$file}\" could not be found (or was not a file)");
+ return $options;
+ }
+ }
+ } elseif (! $cOptions['groupsOnly'] && isset($_GET['f'])) {
+ // try user files
+ // The following restrictions are to limit the URLs that minify will
+ // respond to. Ideally there should be only one way to reference a file.
+ if (// verify at least one file, files are single comma separated,
+ // and are all same extension
+ ! preg_match('/^[^,]+\\.(css|js)(?:,[^,]+\\.\\1)*$/', $_GET['f'])
+ // no "//"
+ || strpos($_GET['f'], '//') !== false
+ // no "\"
+ || strpos($_GET['f'], '\\') !== false
+ // no "./"
+ || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['f'])
+ ) {
+ $this->log("GET param 'f' invalid (see MinApp.php line 63)");
+ return $options;
+ }
+ $files = explode(',', $_GET['f']);
+ if (count($files) > $cOptions['maxFiles'] || $files != array_unique($files)) {
+ $this->log("Too many or duplicate files specified");
+ return $options;
+ }
+ if (isset($_GET['b'])) {
+ // check for validity
+ if (preg_match('@^[^/]+(?:/[^/]+)*$@', $_GET['b'])
+ && false === strpos($_GET['b'], '..')
+ && $_GET['b'] !== '.') {
+ // valid base
+ $base = "/{$_GET['b']}/";
+ } else {
+ $this->log("GET param 'b' invalid (see MinApp.php line 84)");
+ return $options;
+ }
+ } else {
+ $base = '/';
+ }
+ $allowDirs = array();
+ foreach ((array)$cOptions['allowDirs'] as $allowDir) {
+ $allowDirs[] = realpath(str_replace('//', $_SERVER['DOCUMENT_ROOT'] . '/', $allowDir));
+ }
+ foreach ($files as $file) {
+ $path = $_SERVER['DOCUMENT_ROOT'] . $base . $file;
+ $file = realpath($path);
+ if (false === $file) {
+ $this->log("Path \"{$path}\" failed realpath()");
+ return $options;
+ } elseif (! parent::_fileIsSafe($file, $allowDirs)) {
+ $this->log("Path \"{$path}\" failed Minify_Controller_Base::_fileIsSafe()");
+ return $options;
+ } else {
+ $sources[] = new Minify_Source(array(
+ 'filepath' => $file
+ ));
+ }
+ }
+ }
+ if ($sources) {
+ $this->sources = $sources;
+ } else {
+ $this->log("No sources to serve");
+ }
+ return $options;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php
new file mode 100644
index 000000000..fa4599abd
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Page.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Class Minify_Controller_Page
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for serving a single HTML page
+ *
+ * @link http://code.google.com/p/minify/source/browse/trunk/web/examples/1/index.php#59
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_Page extends Minify_Controller_Base {
+
+ /**
+ * Set up source of HTML content
+ *
+ * @param array $options controller and Minify options
+ * @return array Minify options
+ *
+ * Controller options:
+ *
+ * 'content': (required) HTML markup
+ *
+ * 'id': (required) id of page (string for use in server-side caching)
+ *
+ * 'lastModifiedTime': timestamp of when this content changed. This
+ * is recommended to allow both server and client-side caching.
+ *
+ * 'minifyAll': should all CSS and Javascript blocks be individually
+ * minified? (default false)
+ *
+ * @todo Add 'file' option to read HTML file.
+ */
+ public function setupSources($options) {
+ if (isset($options['file'])) {
+ $sourceSpec = array(
+ 'filepath' => $options['file']
+ );
+ } else {
+ // strip controller options
+ $sourceSpec = array(
+ 'content' => $options['content']
+ ,'id' => $options['id']
+ );
+ unset($options['content'], $options['id']);
+ }
+ if (isset($options['minifyAll'])) {
+ // this will be the 2nd argument passed to Minify_HTML::minify()
+ $sourceSpec['minifyOptions'] = array(
+ 'cssMinifier' => array('Minify_CSS', 'minify')
+ ,'jsMinifier' => array('JSMin', 'minify')
+ );
+ $this->_loadCssJsMinifiers = true;
+ unset($options['minifyAll']);
+ }
+ $this->sources[] = new Minify_Source($sourceSpec);
+
+ $options['contentType'] = Minify::TYPE_HTML;
+ return $options;
+ }
+
+ protected $_loadCssJsMinifiers = false;
+
+ /**
+ * @see Minify_Controller_Base::loadMinifier()
+ */
+ public function loadMinifier($minifierCallback)
+ {
+ if ($this->_loadCssJsMinifiers) {
+ // Minify will not call for these so we must manually load
+ // them when Minify/HTML.php is called for.
+ require_once 'Minify/CSS.php';
+ require_once 'JSMin.php';
+ }
+ parent::loadMinifier($minifierCallback); // load Minify/HTML.php
+ }
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php
new file mode 100644
index 000000000..1861aabc1
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Controller/Version1.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * Class Minify_Controller_Version1
+ * @package Minify
+ */
+
+require_once 'Minify/Controller/Base.php';
+
+/**
+ * Controller class for emulating version 1 of minify.php
+ *
+ * <code>
+ * Minify::serve('Version1');
+ * </code>
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Controller_Version1 extends Minify_Controller_Base {
+
+ /**
+ * Set up groups of files as sources
+ *
+ * @param array $options controller and Minify options
+ * @return array Minify options
+ *
+ */
+ public function setupSources($options) {
+ self::_setupDefines();
+ if (MINIFY_USE_CACHE) {
+ $cacheDir = defined('MINIFY_CACHE_DIR')
+ ? MINIFY_CACHE_DIR
+ : '';
+ Minify::setCache($cacheDir);
+ }
+ $options['badRequestHeader'] = 'HTTP/1.0 404 Not Found';
+ $options['contentTypeCharset'] = MINIFY_ENCODING;
+
+ // The following restrictions are to limit the URLs that minify will
+ // respond to. Ideally there should be only one way to reference a file.
+ if (! isset($_GET['files'])
+ // verify at least one file, files are single comma separated,
+ // and are all same extension
+ || ! preg_match('/^[^,]+\\.(css|js)(,[^,]+\\.\\1)*$/', $_GET['files'], $m)
+ // no "//" (makes URL rewriting easier)
+ || strpos($_GET['files'], '//') !== false
+ // no "\"
+ || strpos($_GET['files'], '\\') !== false
+ // no "./"
+ || preg_match('/(?:^|[^\\.])\\.\\//', $_GET['files'])
+ ) {
+ return $options;
+ }
+ $extension = $m[1];
+
+ $files = explode(',', $_GET['files']);
+ if (count($files) > MINIFY_MAX_FILES) {
+ return $options;
+ }
+
+ // strings for prepending to relative/absolute paths
+ $prependRelPaths = dirname($_SERVER['SCRIPT_FILENAME'])
+ . DIRECTORY_SEPARATOR;
+ $prependAbsPaths = $_SERVER['DOCUMENT_ROOT'];
+
+ $sources = array();
+ $goodFiles = array();
+ $hasBadSource = false;
+
+ $allowDirs = isset($options['allowDirs'])
+ ? $options['allowDirs']
+ : MINIFY_BASE_DIR;
+
+ foreach ($files as $file) {
+ // prepend appropriate string for abs/rel paths
+ $file = ($file[0] === '/' ? $prependAbsPaths : $prependRelPaths) . $file;
+ // make sure a real file!
+ $file = realpath($file);
+ // don't allow unsafe or duplicate files
+ if (parent::_fileIsSafe($file, $allowDirs)
+ && !in_array($file, $goodFiles))
+ {
+ $goodFiles[] = $file;
+ $srcOptions = array(
+ 'filepath' => $file
+ );
+ $this->sources[] = new Minify_Source($srcOptions);
+ } else {
+ $hasBadSource = true;
+ break;
+ }
+ }
+ if ($hasBadSource) {
+ $this->sources = array();
+ }
+ if (! MINIFY_REWRITE_CSS_URLS) {
+ $options['rewriteCssUris'] = false;
+ }
+ return $options;
+ }
+
+ private static function _setupDefines()
+ {
+ $defaults = array(
+ 'MINIFY_BASE_DIR' => realpath($_SERVER['DOCUMENT_ROOT'])
+ ,'MINIFY_ENCODING' => 'utf-8'
+ ,'MINIFY_MAX_FILES' => 16
+ ,'MINIFY_REWRITE_CSS_URLS' => true
+ ,'MINIFY_USE_CACHE' => true
+ );
+ foreach ($defaults as $const => $val) {
+ if (! defined($const)) {
+ define($const, $val);
+ }
+ }
+ }
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php b/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php
new file mode 100644
index 000000000..fb5c1e982
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/HTML.php
@@ -0,0 +1,245 @@
+<?php
+/**
+ * Class Minify_HTML
+ * @package Minify
+ */
+
+/**
+ * Compress HTML
+ *
+ * This is a heavy regex-based removal of whitespace, unnecessary comments and
+ * tokens. IE conditional comments are preserved. There are also options to have
+ * STYLE and SCRIPT blocks compressed by callback functions.
+ *
+ * A test suite is available.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_HTML {
+
+ /**
+ * "Minify" an HTML page
+ *
+ * @param string $html
+ *
+ * @param array $options
+ *
+ * 'cssMinifier' : (optional) callback function to process content of STYLE
+ * elements.
+ *
+ * 'jsMinifier' : (optional) callback function to process content of SCRIPT
+ * elements. Note: the type attribute is ignored.
+ *
+ * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
+ * unset, minify will sniff for an XHTML doctype.
+ *
+ * @return string
+ */
+ public static function minify($html, $options = array()) {
+ $min = new Minify_HTML($html, $options);
+ return $min->process();
+ }
+
+
+ /**
+ * Create a minifier object
+ *
+ * @param string $html
+ *
+ * @param array $options
+ *
+ * 'cssMinifier' : (optional) callback function to process content of STYLE
+ * elements.
+ *
+ * 'jsMinifier' : (optional) callback function to process content of SCRIPT
+ * elements. Note: the type attribute is ignored.
+ *
+ * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If
+ * unset, minify will sniff for an XHTML doctype.
+ *
+ * @return null
+ */
+ public function __construct($html, $options = array())
+ {
+ $this->_html = str_replace("\r\n", "\n", trim($html));
+ if (isset($options['xhtml'])) {
+ $this->_isXhtml = (bool)$options['xhtml'];
+ }
+ if (isset($options['cssMinifier'])) {
+ $this->_cssMinifier = $options['cssMinifier'];
+ }
+ if (isset($options['jsMinifier'])) {
+ $this->_jsMinifier = $options['jsMinifier'];
+ }
+ }
+
+
+ /**
+ * Minify the markeup given in the constructor
+ *
+ * @return string
+ */
+ public function process()
+ {
+ if ($this->_isXhtml === null) {
+ $this->_isXhtml = (false !== strpos($this->_html, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML'));
+ }
+
+ $this->_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']);
+ $this->_placeholders = array();
+
+ // replace SCRIPTs (and minify) with placeholders
+ $this->_html = preg_replace_callback(
+ '/(\\s*)(<script\\b[^>]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i'
+ ,array($this, '_removeScriptCB')
+ ,$this->_html);
+
+ // replace STYLEs (and minify) with placeholders
+ $this->_html = preg_replace_callback(
+ '/\\s*(<style\\b[^>]*?>)([\\s\\S]*?)<\\/style>\\s*/i'
+ ,array($this, '_removeStyleCB')
+ ,$this->_html);
+
+ // remove HTML comments (not containing IE conditional comments).
+ $this->_html = preg_replace_callback(
+ '/<!--([\\s\\S]*?)-->/'
+ ,array($this, '_commentCB')
+ ,$this->_html);
+
+ // replace PREs with placeholders
+ $this->_html = preg_replace_callback('/\\s*(<pre\\b[^>]*?>[\\s\\S]*?<\\/pre>)\\s*/i'
+ ,array($this, '_removePreCB')
+ ,$this->_html);
+
+ // replace TEXTAREAs with placeholders
+ $this->_html = preg_replace_callback(
+ '/\\s*(<textarea\\b[^>]*?>[\\s\\S]*?<\\/textarea>)\\s*/i'
+ ,array($this, '_removeTextareaCB')
+ ,$this->_html);
+
+ // trim each line.
+ // @todo take into account attribute values that span multiple lines.
+ $this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html);
+
+ // remove ws around block/undisplayed elements
+ $this->_html = preg_replace('/\\s+(<\\/?(?:area|base(?:font)?|blockquote|body'
+ .'|caption|center|cite|col(?:group)?|dd|dir|div|dl|dt|fieldset|form'
+ .'|frame(?:set)?|h[1-6]|head|hr|html|legend|li|link|map|menu|meta'
+ .'|ol|opt(?:group|ion)|p|param|t(?:able|body|head|d|h||r|foot|itle)'
+ .'|ul)\\b[^>]*>)/i', '$1', $this->_html);
+
+ // remove ws outside of all elements
+ $this->_html = preg_replace_callback(
+ '/>([^<]+)</'
+ ,array($this, '_outsideTagCB')
+ ,$this->_html);
+
+ // use newlines before 1st attribute in open tags (to limit line lengths)
+ $this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html);
+
+ // fill placeholders
+ $this->_html = str_replace(
+ array_keys($this->_placeholders)
+ ,array_values($this->_placeholders)
+ ,$this->_html
+ );
+ return $this->_html;
+ }
+
+ protected function _commentCB($m)
+ {
+ return (0 === strpos($m[1], '[') || false !== strpos($m[1], '<!['))
+ ? $m[0]
+ : '';
+ }
+
+ protected function _reservePlace($content)
+ {
+ $placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%';
+ $this->_placeholders[$placeholder] = $content;
+ return $placeholder;
+ }
+
+ protected $_isXhtml = null;
+ protected $_replacementHash = null;
+ protected $_placeholders = array();
+ protected $_cssMinifier = null;
+ protected $_jsMinifier = null;
+
+ protected function _outsideTagCB($m)
+ {
+ return '>' . preg_replace('/^\\s+|\\s+$/', ' ', $m[1]) . '<';
+ }
+
+ protected function _removePreCB($m)
+ {
+ return $this->_reservePlace($m[1]);
+ }
+
+ protected function _removeTextareaCB($m)
+ {
+ return $this->_reservePlace($m[1]);
+ }
+
+ protected function _removeStyleCB($m)
+ {
+ $openStyle = $m[1];
+ $css = $m[2];
+ // remove HTML comments
+ $css = preg_replace('/(?:^\\s*<!--|-->\\s*$)/', '', $css);
+
+ // remove CDATA section markers
+ $css = $this->_removeCdata($css);
+
+ // minify
+ $minifier = $this->_cssMinifier
+ ? $this->_cssMinifier
+ : 'trim';
+ $css = call_user_func($minifier, $css);
+
+ return $this->_reservePlace($this->_needsCdata($css)
+ ? "{$openStyle}/*<![CDATA[*/{$css}/*]]>*/</style>"
+ : "{$openStyle}{$css}</style>"
+ );
+ }
+
+ protected function _removeScriptCB($m)
+ {
+ $openScript = $m[2];
+ $js = $m[3];
+
+ // whitespace surrounding? preserve at least one space
+ $ws1 = ($m[1] === '') ? '' : ' ';
+ $ws2 = ($m[4] === '') ? '' : ' ';
+
+ // remove HTML comments (and ending "//" if present)
+ $js = preg_replace('/(?:^\\s*<!--\\s*|\\s*(?:\\/\\/)?\\s*-->\\s*$)/', '', $js);
+
+ // remove CDATA section markers
+ $js = $this->_removeCdata($js);
+
+ // minify
+ $minifier = $this->_jsMinifier
+ ? $this->_jsMinifier
+ : 'trim';
+ $js = call_user_func($minifier, $js);
+
+ return $this->_reservePlace($this->_needsCdata($js)
+ ? "{$ws1}{$openScript}/*<![CDATA[*/{$js}/*]]>*/</script>{$ws2}"
+ : "{$ws1}{$openScript}{$js}</script>{$ws2}"
+ );
+ }
+
+ protected function _removeCdata($str)
+ {
+ return (false !== strpos($str, '<![CDATA['))
+ ? str_replace(array('<![CDATA[', ']]>'), '', $str)
+ : $str;
+ }
+
+ protected function _needsCdata($str)
+ {
+ return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str));
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php b/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php
new file mode 100644
index 000000000..0d6d90a81
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/ImportProcessor.php
@@ -0,0 +1,157 @@
+<?php
+/**
+ * Class Minify_ImportProcessor
+ * @package Minify
+ */
+
+/**
+ * Linearize a CSS/JS file by including content specified by CSS import
+ * declarations. In CSS files, relative URIs are fixed.
+ *
+ * @imports will be processed regardless of where they appear in the source
+ * files; i.e. @imports commented out or in string content will still be
+ * processed!
+ *
+ * This has a unit test but should be considered "experimental".
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_ImportProcessor {
+
+ public static $filesIncluded = array();
+
+ public static function process($file)
+ {
+ self::$filesIncluded = array();
+ self::$_isCss = (strtolower(substr($file, -4)) === '.css');
+ $obj = new Minify_ImportProcessor(dirname($file));
+ return $obj->_getContent($file);
+ }
+
+ // allows callback funcs to know the current directory
+ private $_currentDir = null;
+
+ // allows _importCB to write the fetched content back to the obj
+ private $_importedContent = '';
+
+ private static $_isCss = null;
+
+ private function __construct($currentDir)
+ {
+ $this->_currentDir = $currentDir;
+ }
+
+ private function _getContent($file)
+ {
+ $file = realpath($file);
+ if (! $file
+ || in_array($file, self::$filesIncluded)
+ || false === ($content = @file_get_contents($file))
+ ) {
+ // file missing, already included, or failed read
+ return '';
+ }
+ self::$filesIncluded[] = realpath($file);
+ $this->_currentDir = dirname($file);
+
+ // remove UTF-8 BOM if present
+ if (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3)) {
+ $content = substr($content, 3);
+ }
+ // ensure uniform EOLs
+ $content = str_replace("\r\n", "\n", $content);
+
+ // process @imports
+ $content = preg_replace_callback(
+ '/
+ @import\\s+
+ (?:url\\(\\s*)? # maybe url(
+ [\'"]? # maybe quote
+ (.*?) # 1 = URI
+ [\'"]? # maybe end quote
+ (?:\\s*\\))? # maybe )
+ ([a-zA-Z,\\s]*)? # 2 = media list
+ ; # end token
+ /x'
+ ,array($this, '_importCB')
+ ,$content
+ );
+
+ if (self::$_isCss) {
+ // rewrite remaining relative URIs
+ $content = preg_replace_callback(
+ '/url\\(\\s*([^\\)\\s]+)\\s*\\)/'
+ ,array($this, '_urlCB')
+ ,$content
+ );
+ }
+
+ return $this->_importedContent . $content;
+ }
+
+ private function _importCB($m)
+ {
+ $url = $m[1];
+ $mediaList = preg_replace('/\\s+/', '', $m[2]);
+
+ if (strpos($url, '://') > 0) {
+ // protocol, leave in place for CSS, comment for JS
+ return self::$_isCss
+ ? $m[0]
+ : "/* Minify_ImportProcessor will not include remote content */";
+ }
+ if ('/' === $url[0]) {
+ // protocol-relative or root path
+ $url = ltrim($url, '/');
+ $file = realpath($_SERVER['DOCUMENT_ROOT']) . DIRECTORY_SEPARATOR
+ . strtr($url, '/', DIRECTORY_SEPARATOR);
+ } else {
+ // relative to current path
+ $file = $this->_currentDir . DIRECTORY_SEPARATOR
+ . strtr($url, '/', DIRECTORY_SEPARATOR);
+ }
+ $obj = new Minify_ImportProcessor(dirname($file));
+ $content = $obj->_getContent($file);
+ if ('' === $content) {
+ // failed. leave in place for CSS, comment for JS
+ return self::$_isCss
+ ? $m[0]
+ : "/* Minify_ImportProcessor could not fetch '{$file}' */";;
+ }
+ return (!self::$_isCss || preg_match('@(?:^$|\\ball\\b)@', $mediaList))
+ ? $content
+ : "@media {$mediaList} {\n{$content}\n}\n";
+ }
+
+ private function _urlCB($m)
+ {
+ // $m[1] is either quoted or not
+ $quote = ($m[1][0] === "'" || $m[1][0] === '"')
+ ? $m[1][0]
+ : '';
+ $url = ($quote === '')
+ ? $m[1]
+ : substr($m[1], 1, strlen($m[1]) - 2);
+ if ('/' !== $url[0]) {
+ if (strpos($url, '//') > 0) {
+ // probably starts with protocol, do not alter
+ } else {
+ // prepend path with current dir separator (OS-independent)
+ $path = $this->_currentDir
+ . DIRECTORY_SEPARATOR . strtr($url, '/', DIRECTORY_SEPARATOR);
+ // strip doc root
+ $path = substr($path, strlen(realpath($_SERVER['DOCUMENT_ROOT'])));
+ // fix to absolute URL
+ $url = strtr($path, '/\\', '//');
+ // remove /./ and /../ where possible
+ $url = str_replace('/./', '/', $url);
+ // inspired by patch from Oleg Cherniy
+ do {
+ $url = preg_replace('@/[^/]+/\\.\\./@', '/', $url, 1, $changed);
+ } while ($changed);
+ }
+ }
+ return "url({$quote}{$url}{$quote})";
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php b/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php
new file mode 100644
index 000000000..6f94fb63c
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Lines.php
@@ -0,0 +1,131 @@
+<?php
+/**
+ * Class Minify_Lines
+ * @package Minify
+ */
+
+/**
+ * Add line numbers in C-style comments for easier debugging of combined content
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ * @author Adam Pedersen (Issue 55 fix)
+ */
+class Minify_Lines {
+
+ /**
+ * Add line numbers in C-style comments
+ *
+ * This uses a very basic parser easily fooled by comment tokens inside
+ * strings or regexes, but, otherwise, generally clean code will not be
+ * mangled. URI rewriting can also be performed.
+ *
+ * @param string $content
+ *
+ * @param array $options available options:
+ *
+ * 'id': (optional) string to identify file. E.g. file name/path
+ *
+ * 'currentDir': (default null) if given, this is assumed to be the
+ * directory of the current CSS file. Using this, minify will rewrite
+ * all relative URIs in import/url declarations to correctly point to
+ * the desired files, and prepend a comment with debugging information about
+ * this process.
+ *
+ * @return string
+ */
+ public static function minify($content, $options = array())
+ {
+ $id = (isset($options['id']) && $options['id'])
+ ? $options['id']
+ : '';
+ $content = str_replace("\r\n", "\n", $content);
+ $lines = explode("\n", $content);
+ $numLines = count($lines);
+ // determine left padding
+ $padTo = strlen($numLines);
+ $inComment = false;
+ $i = 0;
+ $newLines = array();
+ while (null !== ($line = array_shift($lines))) {
+ if (('' !== $id) && (0 == $i % 50)) {
+ array_push($newLines, '', "/* {$id} */", '');
+ }
+ ++$i;
+ $newLines[] = self::_addNote($line, $i, $inComment, $padTo);
+ $inComment = self::_eolInComment($line, $inComment);
+ }
+ $content = implode("\n", $newLines) . "\n";
+
+ // check for desired URI rewriting
+ if (isset($options['currentDir'])) {
+ require_once 'Minify/CSS/UriRewriter.php';
+ Minify_CSS_UriRewriter::$debugText = '';
+ $content = Minify_CSS_UriRewriter::rewrite(
+ $content
+ ,$options['currentDir']
+ ,isset($options['docRoot']) ? $options['docRoot'] : $_SERVER['DOCUMENT_ROOT']
+ ,isset($options['symlinks']) ? $options['symlinks'] : array()
+ );
+ $content = "/* Minify_CSS_UriRewriter::\$debugText\n\n"
+ . Minify_CSS_UriRewriter::$debugText . "*/\n"
+ . $content;
+ }
+
+ return $content;
+ }
+
+ /**
+ * Is the parser within a C-style comment at the end of this line?
+ *
+ * @param string $line current line of code
+ *
+ * @param bool $inComment was the parser in a comment at the
+ * beginning of the line?
+ *
+ * @return bool
+ */
+ private static function _eolInComment($line, $inComment)
+ {
+ while (strlen($line)) {
+ $search = $inComment
+ ? '*/'
+ : '/*';
+ $pos = strpos($line, $search);
+ if (false === $pos) {
+ return $inComment;
+ } else {
+ if ($pos == 0
+ || ($inComment
+ ? substr($line, $pos, 3)
+ : substr($line, $pos-1, 3)) != '*/*')
+ {
+ $inComment = ! $inComment;
+ }
+ $line = substr($line, $pos + 2);
+ }
+ }
+ return $inComment;
+ }
+
+ /**
+ * Prepend a comment (or note) to the given line
+ *
+ * @param string $line current line of code
+ *
+ * @param string $note content of note/comment
+ *
+ * @param bool $inComment was the parser in a comment at the
+ * beginning of the line?
+ *
+ * @param int $padTo minimum width of comment
+ *
+ * @return string
+ */
+ private static function _addNote($line, $note, $inComment, $padTo)
+ {
+ return $inComment
+ ? '/* ' . str_pad($note, $padTo, ' ', STR_PAD_RIGHT) . ' *| ' . $line
+ : '/* ' . str_pad($note, $padTo, ' ', STR_PAD_RIGHT) . ' */ ' . $line;
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php b/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php
new file mode 100644
index 000000000..7844eea35
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Logger.php
@@ -0,0 +1,45 @@
+<?php
+/**
+ * Class Minify_Logger
+ * @package Minify
+ */
+
+/**
+ * Message logging class
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Logger {
+
+ /**
+ * Set logger object.
+ *
+ * The object should have a method "log" that accepts a value as 1st argument and
+ * an optional string label as the 2nd.
+ *
+ * @param mixed $obj or a "falsey" value to disable
+ * @return null
+ */
+ public static function setLogger($obj = null) {
+ self::$_logger = $obj
+ ? $obj
+ : null;
+ }
+
+ /**
+ * Pass a message to the logger (if set)
+ *
+ * @param string $msg message to log
+ * @return null
+ */
+ public static function log($msg, $label = 'Minify') {
+ if (! self::$_logger) return;
+ self::$_logger->log($msg, $label);
+ }
+
+ /**
+ * @var mixed logger object (like FirePHP) or null (i.e. no logger available)
+ */
+ private static $_logger = null;
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php b/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php
new file mode 100644
index 000000000..949c3eef0
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Packer.php
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Class Minify_Packer
+ *
+ * To use this class you must first download the PHP port of Packer
+ * and place the file "class.JavaScriptPacker.php" in /lib (or your
+ * include_path).
+ * @link http://joliclic.free.fr/php/javascript-packer/en/
+ *
+ * Be aware that, as long as HTTP encoding is used, scripts minified with JSMin
+ * will provide better client-side performance, as they need not be unpacked in
+ * client-side code.
+ *
+ * @package Minify
+ */
+
+if (false === (@include 'class.JavaScriptPacker.php')) {
+ trigger_error(
+ 'The script "class.JavaScriptPacker.php" is required. Please see: http:'
+ .'//code.google.com/p/minify/source/browse/trunk/min/lib/Minify/Packer.php'
+ ,E_USER_ERROR
+ );
+}
+
+/**
+ * Minify Javascript using Dean Edward's Packer
+ *
+ * @package Minify
+ */
+class Minify_Packer {
+ public static function minify($code, $options = array())
+ {
+ // @todo: set encoding options based on $options :)
+ $packer = new JavascriptPacker($code, 'Normal', true, false);
+ return trim($packer->pack());
+ }
+}
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/Source.php b/plugins/Minify/extlib/minify/min/lib/Minify/Source.php
new file mode 100644
index 000000000..5a85d10d0
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/Source.php
@@ -0,0 +1,187 @@
+<?php
+/**
+ * Class Minify_Source
+ * @package Minify
+ */
+
+/**
+ * A content source to be minified by Minify.
+ *
+ * This allows per-source minification options and the mixing of files with
+ * content from other sources.
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_Source {
+
+ /**
+ * @var int time of last modification
+ */
+ public $lastModified = null;
+
+ /**
+ * @var callback minifier function specifically for this source.
+ */
+ public $minifier = null;
+
+ /**
+ * @var array minification options specific to this source.
+ */
+ public $minifyOptions = null;
+
+ /**
+ * @var string full path of file
+ */
+ public $filepath = null;
+
+ /**
+ * @var string HTTP Content Type (Minify requires one of the constants Minify::TYPE_*)
+ */
+ public $contentType = null;
+
+ /**
+ * Create a Minify_Source
+ *
+ * In the $spec array(), you can either provide a 'filepath' to an existing
+ * file (existence will not be checked!) or give 'id' (unique string for
+ * the content), 'content' (the string content) and 'lastModified'
+ * (unixtime of last update).
+ *
+ * As a shortcut, the controller will replace "//" at the beginning
+ * of a filepath with $_SERVER['DOCUMENT_ROOT'] . '/'.
+ *
+ * @param array $spec options
+ */
+ public function __construct($spec)
+ {
+ if (isset($spec['filepath'])) {
+ if (0 === strpos($spec['filepath'], '//')) {
+ $spec['filepath'] = $_SERVER['DOCUMENT_ROOT'] . substr($spec['filepath'], 1);
+ }
+ $segments = explode('.', $spec['filepath']);
+ $ext = strtolower(array_pop($segments));
+ switch ($ext) {
+ case 'js' : $this->contentType = 'application/x-javascript';
+ break;
+ case 'css' : $this->contentType = 'text/css';
+ break;
+ case 'htm' : // fallthrough
+ case 'html' : $this->contentType = 'text/html';
+ break;
+ }
+ $this->filepath = $spec['filepath'];
+ $this->_id = $spec['filepath'];
+ $this->lastModified = filemtime($spec['filepath'])
+ // offset for Windows uploaders with out of sync clocks
+ + round(Minify::$uploaderHoursBehind * 3600);
+ } elseif (isset($spec['id'])) {
+ $this->_id = 'id::' . $spec['id'];
+ if (isset($spec['content'])) {
+ $this->_content = $spec['content'];
+ } else {
+ $this->_getContentFunc = $spec['getContentFunc'];
+ }
+ $this->lastModified = isset($spec['lastModified'])
+ ? $spec['lastModified']
+ : time();
+ }
+ if (isset($spec['contentType'])) {
+ $this->contentType = $spec['contentType'];
+ }
+ if (isset($spec['minifier'])) {
+ $this->minifier = $spec['minifier'];
+ }
+ if (isset($spec['minifyOptions'])) {
+ $this->minifyOptions = $spec['minifyOptions'];
+ }
+ }
+
+ /**
+ * Get content
+ *
+ * @return string
+ */
+ public function getContent()
+ {
+ $content = (null !== $this->filepath)
+ ? file_get_contents($this->filepath)
+ : ((null !== $this->_content)
+ ? $this->_content
+ : call_user_func($this->_getContentFunc, $this->_id)
+ );
+ // remove UTF-8 BOM if present
+ return (pack("CCC",0xef,0xbb,0xbf) === substr($content, 0, 3))
+ ? substr($content, 3)
+ : $content;
+ }
+
+ /**
+ * Get id
+ *
+ * @return string
+ */
+ public function getId()
+ {
+ return $this->_id;
+ }
+
+ /**
+ * Verifies a single minification call can handle all sources
+ *
+ * @param array $sources Minify_Source instances
+ *
+ * @return bool true iff there no sources with specific minifier preferences.
+ */
+ public static function haveNoMinifyPrefs($sources)
+ {
+ foreach ($sources as $source) {
+ if (null !== $source->minifier
+ || null !== $source->minifyOptions) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Get unique string for a set of sources
+ *
+ * @param array $sources Minify_Source instances
+ *
+ * @return string
+ */
+ public static function getDigest($sources)
+ {
+ foreach ($sources as $source) {
+ $info[] = array(
+ $source->_id, $source->minifier, $source->minifyOptions
+ );
+ }
+ return md5(serialize($info));
+ }
+
+ /**
+ * Get content type from a group of sources
+ *
+ * This is called if the user doesn't pass in a 'contentType' options
+ *
+ * @param array $sources Minify_Source instances
+ *
+ * @return string content type. e.g. 'text/css'
+ */
+ public static function getContentType($sources)
+ {
+ foreach ($sources as $source) {
+ if ($source->contentType !== null) {
+ return $source->contentType;
+ }
+ }
+ return 'text/plain';
+ }
+
+ protected $_content = null;
+ protected $_getContentFunc = null;
+ protected $_id = null;
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php b/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php
new file mode 100644
index 000000000..7cb61adbe
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Minify/YUICompressor.php
@@ -0,0 +1,139 @@
+<?php
+/**
+ * Class Minify_YUICompressor
+ * @package Minify
+ */
+
+/**
+ * Compress Javascript/CSS using the YUI Compressor
+ *
+ * You must set $jarFile and $tempDir before calling the minify functions.
+ * Also, depending on your shell's environment, you may need to specify
+ * the full path to java in $javaExecutable or use putenv() to setup the
+ * Java environment.
+ *
+ * <code>
+ * Minify_YUICompressor::$jarFile = '/path/to/yuicompressor-2.3.5.jar';
+ * Minify_YUICompressor::$tempDir = '/tmp';
+ * $code = Minify_YUICompressor::minifyJs(
+ * $code
+ * ,array('nomunge' => true, 'line-break' => 1000)
+ * );
+ * </code>
+ *
+ * @todo unit tests, $options docs
+ *
+ * @package Minify
+ * @author Stephen Clay <steve@mrclay.org>
+ */
+class Minify_YUICompressor {
+
+ /**
+ * Filepath of the YUI Compressor jar file. This must be set before
+ * calling minifyJs() or minifyCss().
+ *
+ * @var string
+ */
+ public static $jarFile = null;
+
+ /**
+ * Writable temp directory. This must be set before calling minifyJs()
+ * or minifyCss().
+ *
+ * @var string
+ */
+ public static $tempDir = null;
+
+ /**
+ * Filepath of "java" executable (may be needed if not in shell's PATH)
+ *
+ * @var string
+ */
+ public static $javaExecutable = 'java';
+
+ /**
+ * Minify a Javascript string
+ *
+ * @param string $js
+ *
+ * @param array $options (verbose is ignored)
+ *
+ * @see http://www.julienlecomte.net/yuicompressor/README
+ *
+ * @return string
+ */
+ public static function minifyJs($js, $options = array())
+ {
+ return self::_minify('js', $js, $options);
+ }
+
+ /**
+ * Minify a CSS string
+ *
+ * @param string $css
+ *
+ * @param array $options (verbose is ignored)
+ *
+ * @see http://www.julienlecomte.net/yuicompressor/README
+ *
+ * @return string
+ */
+ public static function minifyCss($css, $options = array())
+ {
+ return self::_minify('css', $css, $options);
+ }
+
+ private static function _minify($type, $content, $options)
+ {
+ self::_prepare();
+ if (! ($tmpFile = tempnam(self::$tempDir, 'yuic_'))) {
+ throw new Exception('Minify_YUICompressor : could not create temp file.');
+ }
+ file_put_contents($tmpFile, $content);
+ exec(self::_getCmd($options, $type, $tmpFile), $output);
+ unlink($tmpFile);
+ return implode("\n", $output);
+ }
+
+ private static function _getCmd($userOptions, $type, $tmpFile)
+ {
+ $o = array_merge(
+ array(
+ 'charset' => ''
+ ,'line-break' => 5000
+ ,'type' => $type
+ ,'nomunge' => false
+ ,'preserve-semi' => false
+ ,'disable-optimizations' => false
+ )
+ ,$userOptions
+ );
+ $cmd = self::$javaExecutable . ' -jar ' . escapeshellarg(self::$jarFile)
+ . " --type {$type}"
+ . (preg_match('/^[a-zA-Z\\-]+$/', $o['charset'])
+ ? " --charset {$o['charset']}"
+ : '')
+ . (is_numeric($o['line-break']) && $o['line-break'] >= 0
+ ? ' --line-break ' . (int)$o['line-break']
+ : '');
+ if ($type === 'js') {
+ foreach (array('nomunge', 'preserve-semi', 'disable-optimizations') as $opt) {
+ $cmd .= $o[$opt]
+ ? " --{$opt}"
+ : '';
+ }
+ }
+ return $cmd . ' ' . escapeshellarg($tmpFile);
+ }
+
+ private static function _prepare()
+ {
+ if (! is_file(self::$jarFile)
+ || ! is_dir(self::$tempDir)
+ || ! is_writable(self::$tempDir)
+ ) {
+ throw new Exception('Minify_YUICompressor : $jarFile and $tempDir must be set.');
+ }
+ }
+}
+
diff --git a/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php b/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php
new file mode 100644
index 000000000..37f716962
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/lib/Solar/Dir.php
@@ -0,0 +1,199 @@
+<?php
+/**
+ *
+ * Utility class for static directory methods.
+ *
+ * @category Solar
+ *
+ * @package Solar
+ *
+ * @author Paul M. Jones <pmjones@solarphp.com>
+ *
+ * @license http://opensource.org/licenses/bsd-license.php BSD
+ *
+ * @version $Id: Dir.php 2926 2007-11-09 16:25:44Z pmjones $
+ *
+ */
+class Solar_Dir {
+
+ /**
+ *
+ * The OS-specific temporary directory location.
+ *
+ * @var string
+ *
+ */
+ protected static $_tmp;
+
+ /**
+ *
+ * Hack for [[php::is_dir() | ]] that checks the include_path.
+ *
+ * Use this to see if a directory exists anywhere in the include_path.
+ *
+ * {{code: php
+ * $dir = Solar_Dir::exists('path/to/dir')
+ * if ($dir) {
+ * $files = scandir($dir);
+ * } else {
+ * echo "Not found in the include-path.";
+ * }
+ * }}
+ *
+ * @param string $dir Check for this directory in the include_path.
+ *
+ * @return mixed If the directory exists in the include_path, returns the
+ * absolute path; if not, returns boolean false.
+ *
+ */
+ public static function exists($dir)
+ {
+ // no file requested?
+ $dir = trim($dir);
+ if (! $dir) {
+ return false;
+ }
+
+ // using an absolute path for the file?
+ // dual check for Unix '/' and Windows '\',
+ // or Windows drive letter and a ':'.
+ $abs = ($dir[0] == '/' || $dir[0] == '\\' || $dir[1] == ':');
+ if ($abs && is_dir($dir)) {
+ return $dir;
+ }
+
+ // using a relative path on the file
+ $path = explode(PATH_SEPARATOR, ini_get('include_path'));
+ foreach ($path as $base) {
+ // strip Unix '/' and Windows '\'
+ $target = rtrim($base, '\\/') . DIRECTORY_SEPARATOR . $dir;
+ if (is_dir($target)) {
+ return $target;
+ }
+ }
+
+ // never found it
+ return false;
+ }
+
+ /**
+ *
+ * "Fixes" a directory string for the operating system.
+ *
+ * Use slashes anywhere you need a directory separator. Then run the
+ * string through fixdir() and the slashes will be converted to the
+ * proper separator (for example '\' on Windows).
+ *
+ * Always adds a final trailing separator.
+ *
+ * @param string $dir The directory string to 'fix'.
+ *
+ * @return string The "fixed" directory string.
+ *
+ */
+ public static function fix($dir)
+ {
+ $dir = str_replace('/', DIRECTORY_SEPARATOR, $dir);
+ return rtrim($dir, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
+ }
+
+ /**
+ *
+ * Convenience method for dirname() and higher-level directories.
+ *
+ * @param string $file Get the dirname() of this file.
+ *
+ * @param int $up Move up in the directory structure this many
+ * times, default 0.
+ *
+ * @return string The dirname() of the file.
+ *
+ */
+ public static function name($file, $up = 0)
+ {
+ $dir = dirname($file);
+ while ($up --) {
+ $dir = dirname($dir);
+ }
+ return $dir;
+ }
+
+ /**
+ *
+ * Returns the OS-specific directory for temporary files.
+ *
+ * @param string $sub Add this subdirectory to the returned temporary
+ * directory name.
+ *
+ * @return string The temporary directory path.
+ *
+ */
+ public static function tmp($sub = '')
+ {
+ // find the tmp dir if needed
+ if (! Solar_Dir::$_tmp) {
+
+ // use the system if we can
+ if (function_exists('sys_get_temp_dir')) {
+ $tmp = sys_get_temp_dir();
+ } else {
+ $tmp = Solar_Dir::_tmp();
+ }
+
+ // remove trailing separator and save
+ Solar_Dir::$_tmp = rtrim($tmp, DIRECTORY_SEPARATOR);
+ }
+
+ // do we have a subdirectory request?
+ $sub = trim($sub);
+ if ($sub) {
+ // remove leading and trailing separators, and force exactly
+ // one trailing separator
+ $sub = trim($sub, DIRECTORY_SEPARATOR)
+ . DIRECTORY_SEPARATOR;
+ }
+
+ return Solar_Dir::$_tmp . DIRECTORY_SEPARATOR . $sub;
+ }
+
+ /**
+ *
+ * Returns the OS-specific temporary directory location.
+ *
+ * @return string The temp directory path.
+ *
+ */
+ protected static function _tmp()
+ {
+ // non-Windows system?
+ if (strtolower(substr(PHP_OS, 0, 3)) != 'win') {
+ $tmp = empty($_ENV['TMPDIR']) ? getenv('TMPDIR') : $_ENV['TMPDIR'];
+ if ($tmp) {
+ return $tmp;
+ } else {
+ return '/tmp';
+ }
+ }
+
+ // Windows 'TEMP'
+ $tmp = empty($_ENV['TEMP']) ? getenv('TEMP') : $_ENV['TEMP'];
+ if ($tmp) {
+ return $tmp;
+ }
+
+ // Windows 'TMP'
+ $tmp = empty($_ENV['TMP']) ? getenv('TMP') : $_ENV['TMP'];
+ if ($tmp) {
+ return $tmp;
+ }
+
+ // Windows 'windir'
+ $tmp = empty($_ENV['windir']) ? getenv('windir') : $_ENV['windir'];
+ if ($tmp) {
+ return $tmp;
+ }
+
+ // final fallback for Windows
+ return getenv('SystemRoot') . '\\temp';
+ }
+} \ No newline at end of file
diff --git a/plugins/Minify/extlib/minify/min/utils.php b/plugins/Minify/extlib/minify/min/utils.php
new file mode 100644
index 000000000..c73594152
--- /dev/null
+++ b/plugins/Minify/extlib/minify/min/utils.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Utility functions for generating group URIs in HTML files
+ *
+ * Before including this file, /min/lib must be in your include_path.
+ *
+ * @package Minify
+ */
+
+require_once 'Minify/Build.php';
+
+
+/**
+ * Get a timestamped URI to a minified resource using the default Minify install
+ *
+ * <code>
+ * <link rel="stylesheet" type="text/css" href="<?php echo Minify_groupUri('css'); ?>" />
+ * <script type="text/javascript" src="<?php echo Minify_groupUri('js'); ?>"></script>
+ * </code>
+ *
+ * If you do not want ampersands as HTML entities, set Minify_Build::$ampersand = "&"
+ * before using this function.
+ *
+ * @param string $group a key from groupsConfig.php
+ * @param boolean $forceAmpersand (default false) Set to true if the RewriteRule
+ * directives in .htaccess are functional. This will remove the "?" from URIs, making them
+ * more cacheable by proxies.
+ * @return string
+ */
+function Minify_groupUri($group, $forceAmpersand = false)
+{
+ $path = $forceAmpersand
+ ? "/g={$group}"
+ : "/?g={$group}";
+ return _Minify_getBuild($group)->uri(
+ '/' . basename(dirname(__FILE__)) . $path
+ ,$forceAmpersand
+ );
+}
+
+
+/**
+ * Get the last modification time of the source js/css files used by Minify to
+ * build the page.
+ *
+ * If you're caching the output of Minify_groupUri(), you'll want to rebuild
+ * the cache if it's older than this timestamp.
+ *
+ * <code>
+ * // simplistic HTML cache system
+ * $file = '/path/to/cache/file';
+ * if (! file_exists($file) || filemtime($file) < Minify_groupsMtime(array('js', 'css'))) {
+ * // (re)build cache
+ * $page = buildPage(); // this calls Minify_groupUri() for js and css
+ * file_put_contents($file, $page);
+ * echo $page;
+ * exit();
+ * }
+ * readfile($file);
+ * </code>
+ *
+ * @param array $groups an array of keys from groupsConfig.php
+ * @return int Unix timestamp of the latest modification
+ */
+function Minify_groupsMtime($groups)
+{
+ $max = 0;
+ foreach ((array)$groups as $group) {
+ $max = max($max, _Minify_getBuild($group)->lastModified);
+ }
+ return $max;
+}
+
+/**
+ * @param string $group a key from groupsConfig.php
+ * @return Minify_Build
+ * @private
+ */
+function _Minify_getBuild($group)
+{
+ static $builds = array();
+ static $gc = false;
+ if (false === $gc) {
+ $gc = (require dirname(__FILE__) . '/groupsConfig.php');
+ }
+ if (! isset($builds[$group])) {
+ $builds[$group] = new Minify_Build($gc[$group]);
+ }
+ return $builds[$group];
+}
diff --git a/plugins/Minify/minify.php b/plugins/Minify/minify.php
new file mode 100644
index 000000000..64727f5e7
--- /dev/null
+++ b/plugins/Minify/minify.php
@@ -0,0 +1,117 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
+
+class MinifyAction extends Action
+{
+ const TYPE_CSS = 'text/css';
+ const TYPE_HTML = 'text/html';
+ // there is some debate over the ideal JS Content-Type, but this is the
+ // Apache default and what Yahoo! uses..
+ const TYPE_JS = 'application/x-javascript';
+
+ var $file;
+ var $v;
+
+ function isReadOnly($args)
+ {
+ return true;
+ }
+
+ function prepare($args)
+ {
+ parent::prepare($args);
+ $this->v = $args['v'];
+
+ $f = $this->arg('f');
+ if(isset($f)) {
+ $this->file = INSTALLDIR.'/'.$f;
+ if(file_exists($this->file)) {
+ return true;
+ } else {
+ $this->clientError(_('f parameter is not a valid path'),404);
+ return false;
+ }
+ }else{
+ $this->clientError(_('f parameter is required'),500);
+ return false;
+ }
+ }
+
+ function etag()
+ {
+ if(isset($this->v)) {
+ return "\"" . crc32($this->file . $this->v) . "\"";
+ }else{
+ $stat = stat($this->file);
+ return '"' . $stat['ino'] . '-' . $stat['size'] . '-' . $stat['mtime'] . '"';
+ }
+ }
+
+ function lastModified()
+ {
+ return filemtime($this->file);
+ }
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ $c = common_memcache();
+ if (!empty($c)) {
+ $cacheKey = common_cache_key(MinifyPlugin::cacheKey . ':' . $this->file . '?v=' . empty($this->v)?'':$this->v);
+ $out = $c->get($cacheKey);
+ }
+ if(empty($out)) {
+ $out = $this->minify($this->file);
+ }
+ if (!empty($c)) {
+ $c->set($cacheKey, $out);
+ }
+
+ $sec = session_cache_expire() * 60;
+ header('Cache-Control: public, max-age=' . $sec);
+ header('Pragma: public');
+ $this->raw($out);
+ }
+
+ function minify($file)
+ {
+ $info = pathinfo($file);
+ switch(strtolower($info['extension'])){
+ case 'js':
+ $out = MinifyPlugin::minifyJs(file_get_contents($file));
+ header('Content-Type: ' . self::TYPE_JS);
+ break;
+ case 'css':
+ $options = array();
+ $options['currentDir'] = dirname($file);
+ $options['docRoot'] = INSTALLDIR;
+ $out = MinifyPlugin::minifyCss(file_get_contents($file),$options);
+ header('Content-Type: ' . self::TYPE_CSS);
+ break;
+ default:
+ $this->clientError(_('File type not supported'),500);
+ return false;
+ }
+ return $out;
+ }
+}
+
diff --git a/plugins/MobileProfile/MobileProfilePlugin.php b/plugins/MobileProfile/MobileProfilePlugin.php
index 0b1e4de28..35678bedd 100644
--- a/plugins/MobileProfile/MobileProfilePlugin.php
+++ b/plugins/MobileProfile/MobileProfilePlugin.php
@@ -243,19 +243,13 @@ class MobileProfilePlugin extends WAP20Plugin
if (file_exists(Theme::file('css/mp-screen.css'))) {
$action->cssLink('css/mp-screen.css', null, 'screen');
} else {
- $action->element('link', array('rel' => 'stylesheet',
- 'type' => 'text/css',
- 'href' => common_path('plugins/MobileProfile/mp-screen.css') . '?version=' . STATUSNET_VERSION,
- 'media' => 'screen'));
+ $action->cssLink('plugins/MobileProfile/mp-screen.css',null,'screen');
}
if (file_exists(Theme::file('css/mp-handheld.css'))) {
$action->cssLink('css/mp-handheld.css', null, 'handheld');
} else {
- $action->element('link', array('rel' => 'stylesheet',
- 'type' => 'text/css',
- 'href' => common_path('plugins/MobileProfile/mp-handheld.css') . '?version=' . STATUSNET_VERSION,
- 'media' => 'handheld'));
+ $action->cssLink('plugins/MobileProfile/mp-handheld.css',null,'handheld');
}
return false;
@@ -358,8 +352,7 @@ class MobileProfilePlugin extends WAP20Plugin
$contentLimit = Notice::maxContent();
- $form->out->element('script', array('type' => 'text/javascript'),
- 'maxLength = ' . $contentLimit . ';');
+ $form->out->inlineScript('maxLength = ' . $contentLimit . ';');
if ($contentLimit > 0) {
$form->out->element('div', array('id' => 'notice_text-count'),
diff --git a/plugins/OpenID/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php
index e86725d70..a37d5465e 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -120,8 +120,8 @@ class OpenIDPlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('openidlogin'),
- _('OpenID'),
- _('Login or register with OpenID'),
+ _m('OpenID'),
+ _m('Login or register with OpenID'),
$action_name === 'openidlogin');
return true;
@@ -132,8 +132,8 @@ class OpenIDPlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('openidsettings'),
- _('OpenID'),
- _('Add or remove OpenIDs'),
+ _m('OpenID'),
+ _m('Add or remove OpenIDs'),
$action_name === 'openidsettings');
return true;
diff --git a/plugins/OpenID/finishaddopenid.php b/plugins/OpenID/finishaddopenid.php
index 6e889205d..991e6584e 100644
--- a/plugins/OpenID/finishaddopenid.php
+++ b/plugins/OpenID/finishaddopenid.php
@@ -64,7 +64,7 @@ class FinishaddopenidAction extends Action
{
parent::handle($args);
if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'));
+ $this->clientError(_m('Not logged in.'));
} else {
$this->tryLogin();
}
@@ -80,16 +80,16 @@ class FinishaddopenidAction extends Action
function tryLogin()
{
- $consumer =& oid_consumer();
+ $consumer = oid_consumer();
$response = $consumer->complete(common_local_url('finishaddopenid'));
if ($response->status == Auth_OpenID_CANCEL) {
- $this->message(_('OpenID authentication cancelled.'));
+ $this->message(_m('OpenID authentication cancelled.'));
return;
} else if ($response->status == Auth_OpenID_FAILURE) {
// Authentication failed; display the error message.
- $this->message(sprintf(_('OpenID authentication failed: %s'),
+ $this->message(sprintf(_m('OpenID authentication failed: %s'),
$response->message));
} else if ($response->status == Auth_OpenID_SUCCESS) {
@@ -103,15 +103,15 @@ class FinishaddopenidAction extends Action
$sreg = $sreg_resp->contents();
}
- $cur =& common_current_user();
+ $cur = common_current_user();
$other = oid_get_user($canonical);
if ($other) {
if ($other->id == $cur->id) {
- $this->message(_('You already have this OpenID!'));
+ $this->message(_m('You already have this OpenID!'));
} else {
- $this->message(_('Someone else already has this OpenID.'));
+ $this->message(_m('Someone else already has this OpenID.'));
}
return;
}
@@ -123,12 +123,12 @@ class FinishaddopenidAction extends Action
$result = oid_link_user($cur->id, $canonical, $display);
if (!$result) {
- $this->message(_('Error connecting user.'));
+ $this->message(_m('Error connecting user.'));
return;
}
if ($sreg) {
if (!oid_update_user($cur, $sreg)) {
- $this->message(_('Error updating profile'));
+ $this->message(_m('Error updating profile'));
return;
}
}
@@ -167,7 +167,7 @@ class FinishaddopenidAction extends Action
function title()
{
- return _('OpenID Login');
+ return _m('OpenID Login');
}
/**
diff --git a/plugins/OpenID/finishopenidlogin.php b/plugins/OpenID/finishopenidlogin.php
index e5551b412..987fa9213 100644
--- a/plugins/OpenID/finishopenidlogin.php
+++ b/plugins/OpenID/finishopenidlogin.php
@@ -31,16 +31,16 @@ class FinishopenidloginAction extends Action
{
parent::handle($args);
if (common_is_real_login()) {
- $this->clientError(_('Already logged in.'));
+ $this->clientError(_m('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. Try again, please.'));
+ $this->showForm(_m('There was a problem with your session token. Try again, please.'));
return;
}
if ($this->arg('create')) {
if (!$this->boolean('license')) {
- $this->showForm(_('You can\'t register if you don\'t agree to the license.'),
+ $this->showForm(_m('You can\'t register if you don\'t agree to the license.'),
$this->trimmed('newname'));
return;
}
@@ -49,7 +49,7 @@ class FinishopenidloginAction extends Action
$this->connectUser();
} else {
common_debug(print_r($this->args, true), __FILE__);
- $this->showForm(_('Something weird happened.'),
+ $this->showForm(_m('Something weird happened.'),
$this->trimmed('newname'));
}
} else {
@@ -63,13 +63,13 @@ class FinishopenidloginAction extends Action
$this->element('div', array('class' => 'error'), $this->error);
} else {
$this->element('div', 'instructions',
- sprintf(_('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
+ sprintf(_m('This is the first time you\'ve logged into %s so we must connect your OpenID to a local account. You can either create a new account, or connect with your existing account, if you have one.'), common_config('site', 'name')));
}
}
function title()
{
- return _('OpenID Account Setup');
+ return _m('OpenID Account Setup');
}
function showForm($error=null, $username=null)
@@ -94,14 +94,14 @@ class FinishopenidloginAction extends Action
$this->hidden('token', common_session_token());
$this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
$this->element('legend', null,
- _('Create new account'));
+ _m('Create new account'));
$this->element('p', null,
- _('Create a new user with this nickname.'));
+ _m('Create a new user with this nickname.'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- $this->input('newname', _('New nickname'),
+ $this->input('newname', _m('New nickname'),
($this->username) ? $this->username : '',
- _('1-64 lowercase letters or numbers, no punctuation or spaces'));
+ _m('1-64 lowercase letters or numbers, no punctuation or spaces'));
$this->elementEnd('li');
$this->elementStart('li');
$this->element('input', array('type' => 'checkbox',
@@ -111,30 +111,30 @@ class FinishopenidloginAction extends Action
'value' => 'true'));
$this->elementStart('label', array('for' => 'license',
'class' => 'checkbox'));
- $this->text(_('My text and files are available under '));
+ $this->text(_m('My text and files are available under '));
$this->element('a', array('href' => common_config('license', 'url')),
common_config('license', 'title'));
- $this->text(_(' except this private data: password, email address, IM address, phone number.'));
+ $this->text(_m(' except this private data: password, email address, IM address, phone number.'));
$this->elementEnd('label');
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('create', _('Create'));
+ $this->submit('create', _m('Create'));
$this->elementEnd('fieldset');
$this->elementStart('fieldset', array('id' => 'form_openid_createaccount'));
$this->element('legend', null,
- _('Connect existing account'));
+ _m('Connect existing account'));
$this->element('p', null,
- _('If you already have an account, login with your username and password to connect it to your OpenID.'));
+ _m('If you already have an account, login with your username and password to connect it to your OpenID.'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- $this->input('nickname', _('Existing nickname'));
+ $this->input('nickname', _m('Existing nickname'));
$this->elementEnd('li');
$this->elementStart('li');
- $this->password('password', _('Password'));
+ $this->password('password', _m('Password'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('connect', _('Connect'));
+ $this->submit('connect', _m('Connect'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
@@ -146,11 +146,11 @@ class FinishopenidloginAction extends Action
$response = $consumer->complete(common_local_url('finishopenidlogin'));
if ($response->status == Auth_OpenID_CANCEL) {
- $this->message(_('OpenID authentication cancelled.'));
+ $this->message(_m('OpenID authentication cancelled.'));
return;
} else if ($response->status == Auth_OpenID_FAILURE) {
// Authentication failed; display the error message.
- $this->message(sprintf(_('OpenID authentication failed: %s'), $response->message));
+ $this->message(sprintf(_m('OpenID authentication failed: %s'), $response->message));
} else if ($response->status == Auth_OpenID_SUCCESS) {
// This means the authentication succeeded; extract the
// identity URL and Simple Registration data (if it was
@@ -212,7 +212,7 @@ class FinishopenidloginAction extends Action
# FIXME: save invite code before redirect, and check here
if (common_config('site', 'closed')) {
- $this->clientError(_('Registration not allowed.'));
+ $this->clientError(_m('Registration not allowed.'));
return;
}
@@ -221,14 +221,14 @@ class FinishopenidloginAction extends Action
if (common_config('site', 'inviteonly')) {
$code = $_SESSION['invitecode'];
if (empty($code)) {
- $this->clientError(_('Registration not allowed.'));
+ $this->clientError(_m('Registration not allowed.'));
return;
}
$invite = Invitation::staticGet($code);
if (empty($invite)) {
- $this->clientError(_('Not a valid invitation code.'));
+ $this->clientError(_m('Not a valid invitation code.'));
return;
}
}
@@ -238,24 +238,24 @@ class FinishopenidloginAction extends Action
if (!Validate::string($nickname, array('min_length' => 1,
'max_length' => 64,
'format' => NICKNAME_FMT))) {
- $this->showForm(_('Nickname must have only lowercase letters and numbers and no spaces.'));
+ $this->showForm(_m('Nickname must have only lowercase letters and numbers and no spaces.'));
return;
}
if (!User::allowed_nickname($nickname)) {
- $this->showForm(_('Nickname not allowed.'));
+ $this->showForm(_m('Nickname not allowed.'));
return;
}
if (User::staticGet('nickname', $nickname)) {
- $this->showForm(_('Nickname already in use. Try another one.'));
+ $this->showForm(_m('Nickname already in use. Try another one.'));
return;
}
list($display, $canonical, $sreg) = $this->getSavedValues();
if (!$display || !$canonical) {
- $this->serverError(_('Stored OpenID not found.'));
+ $this->serverError(_m('Stored OpenID not found.'));
return;
}
@@ -264,7 +264,7 @@ class FinishopenidloginAction extends Action
$other = oid_get_user($canonical);
if ($other) {
- $this->serverError(_('Creating new account for OpenID that already has a user.'));
+ $this->serverError(_m('Creating new account for OpenID that already has a user.'));
return;
}
@@ -324,7 +324,7 @@ class FinishopenidloginAction extends Action
$password = $this->trimmed('password');
if (!common_check_user($nickname, $password)) {
- $this->showForm(_('Invalid username or password.'));
+ $this->showForm(_m('Invalid username or password.'));
return;
}
@@ -335,14 +335,14 @@ class FinishopenidloginAction extends Action
list($display, $canonical, $sreg) = $this->getSavedValues();
if (!$display || !$canonical) {
- $this->serverError(_('Stored OpenID not found.'));
+ $this->serverError(_m('Stored OpenID not found.'));
return;
}
$result = oid_link_user($user->id, $canonical, $display);
if (!$result) {
- $this->serverError(_('Error connecting user to OpenID.'));
+ $this->serverError(_m('Error connecting user to OpenID.'));
return;
}
diff --git a/plugins/OpenID/locale/OpenID.po b/plugins/OpenID/locale/OpenID.po
new file mode 100644
index 000000000..34738bc75
--- /dev/null
+++ b/plugins/OpenID/locale/OpenID.po
@@ -0,0 +1,344 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: openidlogin.php:30 finishopenidlogin.php:34
+msgid "Already logged in."
+msgstr ""
+
+#: openidlogin.php:37 openidsettings.php:194 finishopenidlogin.php:38
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: openidlogin.php:66
+#, php-format
+msgid ""
+"For security reasons, please re-login with your [OpenID](%%doc.openid%%) "
+"before changing your settings."
+msgstr ""
+
+#: openidlogin.php:70
+#, php-format
+msgid "Login with an [OpenID](%%doc.openid%%) account."
+msgstr ""
+
+#: openidlogin.php:95 finishaddopenid.php:170
+msgid "OpenID Login"
+msgstr ""
+
+#: openidlogin.php:112
+msgid "OpenID login"
+msgstr ""
+
+#: openidlogin.php:117 openidsettings.php:107
+msgid "OpenID URL"
+msgstr ""
+
+#: openidlogin.php:119
+msgid "Your OpenID URL"
+msgstr ""
+
+#: openidlogin.php:122
+msgid "Remember me"
+msgstr ""
+
+#: openidlogin.php:123
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+
+#: openidlogin.php:127
+msgid "Login"
+msgstr ""
+
+#: openidserver.php:106
+#, php-format
+msgid "You are not authorized to use the identity %s"
+msgstr ""
+
+#: openidserver.php:126
+msgid "Just an OpenID provider. Nothing to see here, move along..."
+msgstr ""
+
+#: OpenIDPlugin.php:123 OpenIDPlugin.php:135
+msgid "OpenID"
+msgstr ""
+
+#: OpenIDPlugin.php:124
+msgid "Login or register with OpenID"
+msgstr ""
+
+#: OpenIDPlugin.php:136
+msgid "Add or remove OpenIDs"
+msgstr ""
+
+#: openid.php:141
+msgid "Cannot instantiate OpenID consumer object."
+msgstr ""
+
+#: openid.php:151
+msgid "Not a valid OpenID."
+msgstr ""
+
+#: openid.php:153
+#, php-format
+msgid "OpenID failure: %s"
+msgstr ""
+
+#: openid.php:180
+#, php-format
+msgid "Could not redirect to server: %s"
+msgstr ""
+
+#: openid.php:198
+#, php-format
+msgid "Could not create OpenID form: %s"
+msgstr ""
+
+#: openid.php:214
+msgid ""
+"This form should automatically submit itself. If not, click the submit "
+"button to go to your OpenID provider."
+msgstr ""
+
+#: openid.php:246
+msgid "Error saving the profile."
+msgstr ""
+
+#: openid.php:257
+msgid "Error saving the user."
+msgstr ""
+
+#: openid.php:277
+msgid "OpenID Auto-Submit"
+msgstr ""
+
+#: openidtrust.php:51
+msgid "OpenID Identity Verification"
+msgstr ""
+
+#: openidtrust.php:69
+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 ""
+
+#: finishaddopenid.php:67
+msgid "Not logged in."
+msgstr ""
+
+#: finishaddopenid.php:88 finishopenidlogin.php:149
+msgid "OpenID authentication cancelled."
+msgstr ""
+
+#: finishaddopenid.php:92 finishopenidlogin.php:153
+#, php-format
+msgid "OpenID authentication failed: %s"
+msgstr ""
+
+#: finishaddopenid.php:112
+msgid "You already have this OpenID!"
+msgstr ""
+
+#: finishaddopenid.php:114
+msgid "Someone else already has this OpenID."
+msgstr ""
+
+#: finishaddopenid.php:126
+msgid "Error connecting user."
+msgstr ""
+
+#: finishaddopenid.php:131
+msgid "Error updating profile"
+msgstr ""
+
+#: openidsettings.php:59
+msgid "OpenID settings"
+msgstr ""
+
+#: openidsettings.php:70
+#, 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:99
+msgid "Add OpenID"
+msgstr ""
+
+#: openidsettings.php:102
+msgid ""
+"If you want to add an OpenID to your account, enter it in the box below and "
+"click \"Add\"."
+msgstr ""
+
+#: openidsettings.php:117
+msgid "Add"
+msgstr ""
+
+#: openidsettings.php:129
+msgid "Remove OpenID"
+msgstr ""
+
+#: openidsettings.php:134
+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:149
+msgid ""
+"You can remove an OpenID from your account by clicking the button marked "
+"\"Remove\"."
+msgstr ""
+
+#: openidsettings.php:172
+msgid "Remove"
+msgstr ""
+
+#: openidsettings.php:208 finishopenidlogin.php:52
+msgid "Something weird happened."
+msgstr ""
+
+#: openidsettings.php:228
+msgid "No such OpenID."
+msgstr ""
+
+#: openidsettings.php:233
+msgid "That OpenID does not belong to you."
+msgstr ""
+
+#: openidsettings.php:237
+msgid "OpenID removed."
+msgstr ""
+
+#: finishopenidlogin.php:43
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: finishopenidlogin.php:66
+#, php-format
+msgid ""
+"This is the first time you've logged into %s so we must connect your OpenID "
+"to a local account. You can either create a new account, or connect with "
+"your existing account, if you have one."
+msgstr ""
+
+#: finishopenidlogin.php:72
+msgid "OpenID Account Setup"
+msgstr ""
+
+#: finishopenidlogin.php:97
+msgid "Create new account"
+msgstr ""
+
+#: finishopenidlogin.php:99
+msgid "Create a new user with this nickname."
+msgstr ""
+
+#: finishopenidlogin.php:102
+msgid "New nickname"
+msgstr ""
+
+#: finishopenidlogin.php:104
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: finishopenidlogin.php:114
+msgid "My text and files are available under "
+msgstr ""
+
+#: finishopenidlogin.php:117
+msgid ""
+" except this private data: password, email address, IM address, phone number."
+msgstr ""
+
+#: finishopenidlogin.php:121
+msgid "Create"
+msgstr ""
+
+#: finishopenidlogin.php:126
+msgid "Connect existing account"
+msgstr ""
+
+#: finishopenidlogin.php:128
+msgid ""
+"If you already have an account, login with your username and password to "
+"connect it to your OpenID."
+msgstr ""
+
+#: finishopenidlogin.php:131
+msgid "Existing nickname"
+msgstr ""
+
+#: finishopenidlogin.php:134
+msgid "Password"
+msgstr ""
+
+#: finishopenidlogin.php:137
+msgid "Connect"
+msgstr ""
+
+#: finishopenidlogin.php:215 finishopenidlogin.php:224
+msgid "Registration not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:231
+msgid "Not a valid invitation code."
+msgstr ""
+
+#: finishopenidlogin.php:241
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: finishopenidlogin.php:246
+msgid "Nickname not allowed."
+msgstr ""
+
+#: finishopenidlogin.php:251
+msgid "Nickname already in use. Try another one."
+msgstr ""
+
+#: finishopenidlogin.php:258 finishopenidlogin.php:338
+msgid "Stored OpenID not found."
+msgstr ""
+
+#: finishopenidlogin.php:267
+msgid "Creating new account for OpenID that already has a user."
+msgstr ""
+
+#: finishopenidlogin.php:327
+msgid "Invalid username or password."
+msgstr ""
+
+#: finishopenidlogin.php:345
+msgid "Error connecting user to OpenID."
+msgstr ""
diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php
index dd628e773..8f949c9c5 100644
--- a/plugins/OpenID/openid.php
+++ b/plugins/OpenID/openid.php
@@ -138,7 +138,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
$consumer = oid_consumer();
if (!$consumer) {
- common_server_error(_('Cannot instantiate OpenID consumer object.'));
+ common_server_error(_m('Cannot instantiate OpenID consumer object.'));
return false;
}
@@ -148,9 +148,9 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
// Handle failure status return values.
if (!$auth_request) {
- return _('Not a valid OpenID.');
+ return _m('Not a valid OpenID.');
} else if (Auth_OpenID::isFailure($auth_request)) {
- return sprintf(_('OpenID failure: %s'), $auth_request->message);
+ return sprintf(_m('OpenID failure: %s'), $auth_request->message);
}
$sreg_request = Auth_OpenID_SRegRequest::build(// Required
@@ -177,7 +177,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
$immediate);
if (!$redirect_url) {
} else if (Auth_OpenID::isFailure($redirect_url)) {
- return sprintf(_('Could not redirect to server: %s'), $redirect_url->message);
+ return sprintf(_m('Could not redirect to server: %s'), $redirect_url->message);
} else {
common_redirect($redirect_url, 303);
}
@@ -195,7 +195,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
// Display an error if the form markup couldn't be generated;
// otherwise, render the HTML.
if (Auth_OpenID::isFailure($form_html)) {
- common_server_error(sprintf(_('Could not create OpenID form: %s'), $form_html->message));
+ common_server_error(sprintf(_m('Could not create OpenID form: %s'), $form_html->message));
} else {
$action = new AutosubmitAction(); // see below
$action->form_html = $form_html;
@@ -211,7 +211,7 @@ function oid_authenticate($openid_url, $returnto, $immediate=false)
function _oid_print_instructions()
{
common_element('div', 'instructions',
- _('This form should automatically submit itself. '.
+ _m('This form should automatically submit itself. '.
'If not, click the submit button to go to your '.
'OpenID provider.'));
}
@@ -243,7 +243,7 @@ function oid_update_user(&$user, &$sreg)
# XXX save timezone if it's passed
if (!$profile->update($orig_profile)) {
- common_server_error(_('Error saving the profile.'));
+ common_server_error(_m('Error saving the profile.'));
return false;
}
@@ -254,7 +254,7 @@ function oid_update_user(&$user, &$sreg)
}
if (!$user->update($orig_user)) {
- common_server_error(_('Error saving the user.'));
+ common_server_error(_m('Error saving the user.'));
return false;
}
@@ -274,7 +274,7 @@ class AutosubmitAction extends Action
function title()
{
- return _('OpenID Auto-Submit');
+ return _m('OpenID Auto-Submit');
}
function showContent()
diff --git a/plugins/OpenID/openidlogin.php b/plugins/OpenID/openidlogin.php
index 29e89234e..9ba55911c 100644
--- a/plugins/OpenID/openidlogin.php
+++ b/plugins/OpenID/openidlogin.php
@@ -27,14 +27,14 @@ class OpenidloginAction extends Action
{
parent::handle($args);
if (common_is_real_login()) {
- $this->clientError(_('Already logged in.'));
+ $this->clientError(_m('Already logged in.'));
} else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$openid_url = $this->trimmed('openid_url');
# CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. Try again, please.'), $openid_url);
+ $this->showForm(_m('There was a problem with your session token. Try again, please.'), $openid_url);
return;
}
@@ -63,11 +63,11 @@ class OpenidloginAction extends Action
common_get_returnto()) {
// rememberme logins have to reauthenticate before
// changing any profile settings (cookie-stealing protection)
- return _('For security reasons, please re-login with your ' .
+ return _m('For security reasons, please re-login with your ' .
'[OpenID](%%doc.openid%%) ' .
'before changing your settings.');
} else {
- return _('Login with an [OpenID](%%doc.openid%%) account.');
+ return _m('Login with an [OpenID](%%doc.openid%%) account.');
}
}
@@ -92,7 +92,7 @@ class OpenidloginAction extends Action
function title()
{
- return _('OpenID Login');
+ return _m('OpenID Login');
}
function showForm($error=null, $openid_url)
@@ -109,22 +109,22 @@ class OpenidloginAction extends Action
'class' => 'form_settings',
'action' => $formaction));
$this->elementStart('fieldset');
- $this->element('legend', null, _('OpenID login'));
+ $this->element('legend', null, _m('OpenID login'));
$this->hidden('token', common_session_token());
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
- $this->input('openid_url', _('OpenID URL'),
+ $this->input('openid_url', _m('OpenID URL'),
$this->openid_url,
- _('Your OpenID URL'));
+ _m('Your OpenID URL'));
$this->elementEnd('li');
$this->elementStart('li', array('id' => 'settings_rememberme'));
- $this->checkbox('rememberme', _('Remember me'), false,
- _('Automatically login in the future; ' .
+ $this->checkbox('rememberme', _m('Remember me'), false,
+ _m('Automatically login in the future; ' .
'not for shared computers!'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('submit', _('Login'));
+ $this->submit('submit', _m('Login'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
diff --git a/plugins/OpenID/openidserver.php b/plugins/OpenID/openidserver.php
index dab97c93e..181cbdf45 100644
--- a/plugins/OpenID/openidserver.php
+++ b/plugins/OpenID/openidserver.php
@@ -103,7 +103,7 @@ class OpenidserverAction extends Action
$response = $this->generateDenyResponse($request);
} else {
//invalid
- $this->clientError(sprintf(_('You are not authorized to use the identity %s'),$request->identity),$code=403);
+ $this->clientError(sprintf(_m('You are not authorized to use the identity %s'),$request->identity),$code=403);
}
} else {
$response = $this->oserver->handleRequest($request);
@@ -123,7 +123,7 @@ class OpenidserverAction extends Action
}
$this->raw($response->body);
}else{
- $this->clientError(_('Just an OpenID provider. Nothing to see here, move along...'),$code=500);
+ $this->clientError(_m('Just an OpenID provider. Nothing to see here, move along...'),$code=500);
}
}
diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php
index 3ad46f5f5..3fc3d6128 100644
--- a/plugins/OpenID/openidsettings.php
+++ b/plugins/OpenID/openidsettings.php
@@ -56,7 +56,7 @@ class OpenidsettingsAction extends AccountSettingsAction
function title()
{
- return _('OpenID settings');
+ return _m('OpenID settings');
}
/**
@@ -67,7 +67,7 @@ class OpenidsettingsAction extends AccountSettingsAction
function getInstructions()
{
- return _('[OpenID](%%doc.openid%%) lets you log into many sites' .
+ return _m('[OpenID](%%doc.openid%%) lets you log into many sites' .
' with the same user account.'.
' Manage your associated OpenIDs from here.');
}
@@ -96,15 +96,15 @@ class OpenidsettingsAction extends AccountSettingsAction
'action' =>
common_local_url('openidsettings')));
$this->elementStart('fieldset', array('id' => 'settings_openid_add'));
- $this->element('legend', null, _('Add OpenID'));
+ $this->element('legend', null, _m('Add OpenID'));
$this->hidden('token', common_session_token());
$this->element('p', 'form_guide',
- _('If you want to add an OpenID to your account, ' .
+ _m('If you want to add an OpenID to your account, ' .
'enter it in the box below and click "Add".'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->element('label', array('for' => 'openid_url'),
- _('OpenID URL'));
+ _m('OpenID URL'));
$this->element('input', array('name' => 'openid_url',
'type' => 'text',
'id' => 'openid_url'));
@@ -114,7 +114,7 @@ class OpenidsettingsAction extends AccountSettingsAction
'id' => 'settings_openid_add_action-submit',
'name' => 'add',
'class' => 'submit',
- 'value' => _('Add')));
+ 'value' => _m('Add')));
$this->elementEnd('fieldset');
$this->elementEnd('form');
@@ -126,12 +126,12 @@ class OpenidsettingsAction extends AccountSettingsAction
if ($cnt > 0) {
- $this->element('h2', null, _('Remove OpenID'));
+ $this->element('h2', null, _m('Remove OpenID'));
if ($cnt == 1 && !$user->password) {
$this->element('p', 'form_guide',
- _('Removing your only OpenID '.
+ _m('Removing your only OpenID '.
'would make it impossible to log in! ' .
'If you need to remove it, '.
'add another OpenID first.'));
@@ -146,7 +146,7 @@ class OpenidsettingsAction extends AccountSettingsAction
} else {
$this->element('p', 'form_guide',
- _('You can remove an OpenID from your account '.
+ _m('You can remove an OpenID from your account '.
'by clicking the button marked "Remove".'));
$idx = 0;
@@ -169,7 +169,7 @@ class OpenidsettingsAction extends AccountSettingsAction
'id' => 'remove'.$idx,
'name' => 'remove',
'class' => 'submit remove',
- 'value' => _('Remove')));
+ 'value' => _m('Remove')));
$this->elementEnd('fieldset');
$this->elementEnd('form');
$idx++;
@@ -191,7 +191,7 @@ class OpenidsettingsAction extends AccountSettingsAction
// CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
+ $this->showForm(_m('There was a problem with your session token. '.
'Try again, please.'));
return;
}
@@ -205,7 +205,7 @@ class OpenidsettingsAction extends AccountSettingsAction
} else if ($this->arg('remove')) {
$this->removeOpenid();
} else {
- $this->showForm(_('Something weird happened.'));
+ $this->showForm(_m('Something weird happened.'));
}
}
@@ -225,16 +225,16 @@ class OpenidsettingsAction extends AccountSettingsAction
$oid = User_openid::staticGet('canonical', $openid_url);
if (!$oid) {
- $this->showForm(_('No such OpenID.'));
+ $this->showForm(_m('No such OpenID.'));
return;
}
$cur = common_current_user();
if (!$cur || $oid->user_id != $cur->id) {
- $this->showForm(_('That OpenID does not belong to you.'));
+ $this->showForm(_m('That OpenID does not belong to you.'));
return;
}
$oid->delete();
- $this->showForm(_('OpenID removed.'), true);
+ $this->showForm(_m('OpenID removed.'), true);
return;
}
}
diff --git a/plugins/OpenID/openidtrust.php b/plugins/OpenID/openidtrust.php
index 29c7bdc23..fa7ea36e2 100644
--- a/plugins/OpenID/openidtrust.php
+++ b/plugins/OpenID/openidtrust.php
@@ -48,7 +48,7 @@ class OpenidtrustAction extends Action
function title()
{
- return _('OpenID Identity Verification');
+ return _m('OpenID Identity Verification');
}
function prepare($args)
@@ -66,7 +66,7 @@ class OpenidtrustAction extends Action
$this->allowUrl = $_SESSION['openid_allow_url'];
$this->denyUrl = $_SESSION['openid_deny_url'];
if(empty($this->trust_root) || empty($this->allowUrl) || empty($this->denyUrl)){
- $this->clientError(_('This page should only be reached during OpenID processing, not directly.'));
+ $this->clientError(_m('This page should only be reached during OpenID processing, not directly.'));
return;
}
return true;
@@ -115,7 +115,7 @@ class OpenidtrustAction extends Action
function showPageNotice()
{
- $this->element('p',null,sprintf(_('%s has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root));
+ $this->element('p',null,sprintf(_m('%s has asked to verify your identity. Click Continue to verify your identity and login without creating a new password.'),$this->trust_root));
}
/**
@@ -133,8 +133,8 @@ class OpenidtrustAction extends Action
'class' => 'form_settings',
'action' => common_local_url('openidtrust')));
$this->elementStart('fieldset');
- $this->submit('allow', _('Continue'));
- $this->submit('deny', _('Cancel'));
+ $this->submit('allow', _m('Continue'));
+ $this->submit('deny', _m('Cancel'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
diff --git a/plugins/PiwikAnalyticsPlugin.php b/plugins/PiwikAnalyticsPlugin.php
index 54faa0bdb..fefd09867 100644
--- a/plugins/PiwikAnalyticsPlugin.php
+++ b/plugins/PiwikAnalyticsPlugin.php
@@ -81,25 +81,20 @@ class PiwikAnalyticsPlugin extends Plugin
function onEndShowScripts($action)
{
- $piwikCode = <<<ENDOFPIWIK
-
-<!-- Piwik -->
-<script type="text/javascript">
+ $piwikCode1 = <<<ENDOFPIWIK
var pkBaseURL = (("https:" == document.location.protocol) ? "https://{$this->piwikroot}" : "http://{$this->piwikroot}");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
-</script>
-<script type="text/javascript">
+ENDOFPIWIK;
+ $piwikCode2 = <<<ENDOFPIWIK
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", {$this->piwikId});
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
-</script>
-<!-- End Piwik Tag -->
-
ENDOFPIWIK;
- $action->raw($piwikCode);
+ $action->inlineScript($piwikCode1);
+ $action->inlineScript($piwikCode2);
return true;
}
}
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index cbfa6bae0..3e33fdaf1 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -105,22 +105,18 @@ class RealtimePlugin extends Plugin
$realtimeUI = ' RealtimeUpdate.initActions("'.$url.'", "'.$timeline.'", "'. $pluginPath .'");';
}
- $action->elementStart('script', array('type' => 'text/javascript'));
-
$script = ' $(document).ready(function() { '.
$realtimeUI.
$this->_updateInitialize($timeline, $user_id).
'}); ';
- $action->raw($script);
-
- $action->elementEnd('script');
+ $action->inlineScript($script);
return true;
}
function onEndShowStatusNetStyles($action)
{
- $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'),
+ $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'),
null, 'screen, projection, tv');
return true;
}
@@ -293,13 +289,6 @@ class RealtimePlugin extends Plugin
return $tags;
}
- // Push this up to Plugin
-
- function log($level, $msg)
- {
- common_log($level, get_class($this) . ': '.$msg);
- }
-
function _getScripts()
{
return array('plugins/Realtime/realtimeupdate.js',
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index ce0297339..56a52433f 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -191,8 +191,7 @@ RealtimeUpdate = {
initActions: function(url, timeline, path)
{
- var NP = $('#notices_primary');
- NP.prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>');
+ $('#notices_primary').prepend('<ul id="realtime_actions"><li id="realtime_playpause"></li><li id="realtime_timeline"></li></ul>');
RealtimeUpdate._pluginPath = path;
@@ -202,19 +201,30 @@ RealtimeUpdate = {
initPlayPause: function()
{
- RealtimeUpdate.showPause();
+ if (typeof(localStorage) == 'undefined') {
+ RealtimeUpdate.showPause();
+ }
+ else {
+ if (localStorage.getItem('RealtimeUpdate_paused') === 'true') {
+ RealtimeUpdate.showPlay();
+ }
+ else {
+ RealtimeUpdate.showPause();
+ }
+ }
},
showPause: function()
{
- RT_PP = $('#realtime_playpause');
- RT_PP.empty();
- RT_PP.append('<button id="realtime_pause" class="pause" title="Pause">Pause</button>');
+ RealtimeUpdate.setPause(false);
+ RealtimeUpdate.showQueuedNotices();
+ RealtimeUpdate.addNoticesHover();
- RT_P = $('#realtime_pause');
- RT_P.bind('click', function() {
- RealtimeUpdate._paused = true;
+ $('#realtime_playpause').remove();
+ $('#realtime_actions').prepend('<li id="realtime_playpause"><button id="realtime_pause" class="pause" title="Pause">Pause</button></li>');
+ $('#realtime_pause').bind('click', function() {
+ RealtimeUpdate.removeNoticesHover();
RealtimeUpdate.showPlay();
return false;
});
@@ -222,22 +232,24 @@ RealtimeUpdate = {
showPlay: function()
{
- RT_PP = $('#realtime_playpause');
- RT_PP.empty();
- RT_PP.append('<span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button>');
-
- RT_P = $('#realtime_play');
- RT_P.bind('click', function() {
- RealtimeUpdate._paused = false;
+ RealtimeUpdate.setPause(true);
+ $('#realtime_playpause').remove();
+ $('#realtime_actions').prepend('<li id="realtime_playpause"><span id="queued_counter"></span> <button id="realtime_play" class="play" title="Play">Play</button></li>');
+ $('#realtime_play').bind('click', function() {
RealtimeUpdate.showPause();
-
- RealtimeUpdate.showQueuedNotices();
-
return false;
});
},
+ setPause: function(state)
+ {
+ RealtimeUpdate._paused = state;
+ if (typeof(localStorage) != 'undefined') {
+ localStorage.setItem('RealtimeUpdate_paused', RealtimeUpdate._paused);
+ }
+ },
+
showQueuedNotices: function()
{
$.each(RealtimeUpdate._queuedNotices, function(i, n) {
@@ -259,13 +271,32 @@ RealtimeUpdate = {
$('#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(url, timeline, path)
{
- var NP = $('#realtime_timeline');
- NP.append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>');
+ $('#realtime_timeline').append('<button id="realtime_popup" title="Pop up in a window">Pop up</button>');
- var PP = $('#realtime_popup');
- PP.bind('click', function() {
+ $('#realtime_popup').bind('click', function() {
window.open(url,
'',
'toolbar=no,resizable=yes,scrollbars=yes,status=no,menubar=no,personalbar=no,location=no,width=500,height=550');
diff --git a/plugins/Recaptcha/RecaptchaPlugin.php b/plugins/Recaptcha/RecaptchaPlugin.php
index 1a51b16be..db118dbb8 100644
--- a/plugins/Recaptcha/RecaptchaPlugin.php
+++ b/plugins/Recaptcha/RecaptchaPlugin.php
@@ -44,11 +44,11 @@ class RecaptchaPlugin extends Plugin
var $ssl;
function onInitializePlugin(){
- if(!isset($this->private_key)){
- common_log(LOG_ERR, "Recaptcha: Must specify private_key in config.php");
+ if(!isset($this->private_key)) {
+ common_log(LOG_ERR, 'Recaptcha: Must specify private_key in config.php');
}
- if(!isset($this->public_key)){
- common_log(LOG_ERR, "Recaptcha: Must specify public_key in config.php");
+ if(!isset($this->public_key)) {
+ common_log(LOG_ERR, 'Recaptcha: Must specify public_key in config.php');
}
}
@@ -59,25 +59,13 @@ class RecaptchaPlugin extends Plugin
return false;
}
- function onStartShowHTML($action)
- {
- //XXX: Horrible hack to make Safari, FF2, and Chrome work with
- //reChapcha. reChapcha beaks xhtml strict
- header('Content-Type: text/html');
-
- $action->extraHeaders();
-
- $action->startXML('html');
-
- $action->raw('<style type="text/css">#recaptcha_area{float:left;}</style>');
- return false;
- }
function onEndRegistrationFormData($action)
{
+ $action->style('#recaptcha_area{float:left;}');
$action->elementStart('li');
$action->raw('<label for="recaptcha_area">Captcha</label>');
- if($this->checkssl() === true){
+ if($this->checkssl() === true) {
$action->raw(recaptcha_get_html($this->public_key), null, true);
} else {
$action->raw(recaptcha_get_html($this->public_key));
@@ -93,11 +81,9 @@ class RecaptchaPlugin extends Plugin
$action->trimmed('recaptcha_challenge_field'),
$action->trimmed('recaptcha_response_field'));
- if (!$resp->is_valid)
- {
- if($this->display_errors)
- {
- $action->showForm ("(reCAPTCHA said: " . $resp->error . ")");
+ if (!$resp->is_valid) {
+ if($this->display_errors) {
+ $action->showForm ("(reCAPTCHA error: " . $resp->error . ")");
}
$action->showForm("Captcha does not match!");
return false;
diff --git a/plugins/RequireValidatedEmail/README b/plugins/RequireValidatedEmail/README
new file mode 100644
index 000000000..ccd94d271
--- /dev/null
+++ b/plugins/RequireValidatedEmail/README
@@ -0,0 +1,21 @@
+This plugin disables posting for accounts that do not have a
+validated email address.
+
+Example:
+
+ addPlugin('RequireValidatedEmail');
+
+If you don't want to apply the validationr equirement to existing
+accounts, you can specify a cutoff date to grandfather in users
+registered prior to that timestamp.
+
+ addPlugin('RequireValidatedEmail',
+ array('grandfatherCutoff' => 'Dec 7, 2009');
+
+
+Todo:
+* make email field required on registration form
+* add a more visible indicator that validation is still outstanding
+* localization for UI strings
+* test with XMPP, API posting
+
diff --git a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
index 4806538a0..04adbf00e 100644
--- a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
+++ b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
@@ -21,7 +21,7 @@
*
* @category Plugin
* @package StatusNet
- * @author Craig Andrews <candrews@integralblue.com>
+ * @author Craig Andrews <candrews@integralblue.com>, Brion Vibber <brion@status.net>
* @copyright 2009 Craig Andrews http://candrews.integralblue.com
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
@@ -33,20 +33,68 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
class RequireValidatedEmailPlugin extends Plugin
{
+ // Users created before this time will be grandfathered in
+ // without the validation requirement.
+ public $grandfatherCutoff=null;
+
function __construct()
{
parent::__construct();
}
+ /**
+ * Event handler for notice saves; rejects the notice
+ * if user's address isn't validated.
+ *
+ * @param Notice $notice
+ * @return bool hook result code
+ */
function onStartNoticeSave($notice)
{
$user = User::staticGet('id', $notice->profile_id);
if (!empty($user)) { // it's a remote notice
- if (empty($user->email)) {
+ if (!$this->validated($user)) {
throw new ClientException(_("You must validate your email address before posting."));
}
}
return true;
}
+
+ /**
+ * Check if a user has a validated email address or has been
+ * otherwise grandfathered in.
+ *
+ * @param User $user
+ * @return bool
+ */
+ protected function validated($user)
+ {
+ if ($this->grandfathered($user)) {
+ return true;
+ }
+
+ // The email field is only stored after validation...
+ // Until then you'll find them in confirm_address.
+ return !empty($user->email);
+ }
+
+ /**
+ * Check if a user was created before the grandfathering cutoff.
+ * If so, we won't need to check for validation.
+ *
+ * @param User $user
+ * @return bool
+ */
+ protected function grandfathered($user)
+ {
+ if ($this->grandfatherCutoff) {
+ $created = strtotime($user->created . " GMT");
+ $cutoff = strtotime($this->grandfatherCutoff);
+ if ($created < $cutoff) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git a/plugins/Sample/SamplePlugin.php b/plugins/Sample/SamplePlugin.php
new file mode 100644
index 000000000..6e361aafb
--- /dev/null
+++ b/plugins/Sample/SamplePlugin.php
@@ -0,0 +1,59 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * @package SamplePlugin
+ * @maintainer Your Name <you@example.com>
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ // This check helps protect against security problems;
+ // your code file can't be executed directly from the web.
+ exit(1);
+}
+
+class SamplePlugin extends Plugin
+{
+ function onInitializePlugin()
+ {
+ // Event handlers normally return true to indicate that all is well.
+ //
+ // Returning false will cancel further processing of any other
+ // plugins or core code hooking the same event.
+ return true;
+ }
+
+ /**
+ * Hook for RouterInitialized event.
+ *
+ * @param Net_URL_Mapper $m path-to-action mapper
+ * @return boolean hook return
+ */
+
+ function onRouterInitialized($m)
+ {
+ $m->connect(':nickname/samples',
+ array('action' => 'showsamples'),
+ array('feed' => '[A-Za-z0-9_-]+'));
+ $m->connect('settings/sample',
+ array('action' => 'samplesettings'));
+ return true;
+ }
+}
+
diff --git a/plugins/TwitterBridge/TwitterBridgePlugin.php b/plugins/TwitterBridge/TwitterBridgePlugin.php
index ad3c2e551..de1181903 100644
--- a/plugins/TwitterBridge/TwitterBridgePlugin.php
+++ b/plugins/TwitterBridge/TwitterBridgePlugin.php
@@ -86,8 +86,8 @@ class TwitterBridgePlugin extends Plugin
$action_name = $action->trimmed('action');
$action->menuItem(common_local_url('twittersettings'),
- _('Twitter'),
- _('Twitter integration options'),
+ _m('Twitter'),
+ _m('Twitter integration options'),
$action_name === 'twittersettings');
return true;
@@ -127,7 +127,12 @@ class TwitterBridgePlugin extends Plugin
*/
function onStartEnqueueNotice($notice, &$transports)
{
- array_push($transports, 'twitter');
+ // Avoid a possible loop
+
+ if ($notice->source != 'twitter') {
+ array_push($transports, 'twitter');
+ }
+
return true;
}
diff --git a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
index b5428316b..b4ca12be2 100755
--- a/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
+++ b/plugins/TwitterBridge/daemons/twitterstatusfetcher.php
@@ -109,7 +109,6 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$flink->find();
$flinks = array();
- common_log(LOG_INFO, "hello");
while ($flink->fetch()) {
@@ -210,7 +209,13 @@ class TwitterStatusFetcher extends ParallelizingDaemon
continue;
}
- $this->saveStatus($status, $flink);
+ $notice = null;
+
+ $notice = $this->saveStatus($status, $flink);
+
+ if (!empty($notice)) {
+ common_broadcast_notice($notice);
+ }
}
// Okay, record the time we synced with Twitter for posterity
@@ -236,12 +241,14 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$uri = 'http://twitter.com/' . $status->user->screen_name .
'/status/' . $status->id;
- $notice = Notice::staticGet('uri', $uri);
-
// check to see if we've already imported the status
+ $notice = Notice::staticGet('uri', $uri);
+
if (empty($notice)) {
+ // XXX: transaction here?
+
$notice = new Notice();
$notice->profile_id = $id;
@@ -258,6 +265,7 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$id = $notice->insert();
Event::handle('EndNoticeSave', array($notice));
}
+
}
if (!Notice_inbox::pkeyGet(array('notice_id' => $notice->id,
@@ -271,7 +279,12 @@ class TwitterStatusFetcher extends ParallelizingDaemon
$inbox->source = NOTICE_INBOX_SOURCE_GATEWAY; // From a private source
$inbox->insert();
+
}
+
+ $notice->blowCaches();
+
+ return $notice;
}
function ensureProfile($user)
diff --git a/plugins/TwitterBridge/locale/TwitterBridge.po b/plugins/TwitterBridge/locale/TwitterBridge.po
new file mode 100644
index 000000000..14c30f1c9
--- /dev/null
+++ b/plugins/TwitterBridge/locale/TwitterBridge.po
@@ -0,0 +1,128 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-12-07 20:38-0800\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: twitterauthorization.php:81
+msgid "Not logged in."
+msgstr ""
+
+#: twitterauthorization.php:131 twitterauthorization.php:150
+#: twitterauthorization.php:170 twitterauthorization.php:217
+msgid "Couldn't link your Twitter account."
+msgstr ""
+
+#: TwitterBridgePlugin.php:89
+msgid "Twitter"
+msgstr ""
+
+#: TwitterBridgePlugin.php:90
+msgid "Twitter integration options"
+msgstr ""
+
+#: twittersettings.php:59
+msgid "Twitter settings"
+msgstr ""
+
+#: twittersettings.php:70
+msgid ""
+"Connect your Twitter account to share your updates with your Twitter friends "
+"and vice-versa."
+msgstr ""
+
+#: twittersettings.php:118
+msgid "Twitter account"
+msgstr ""
+
+#: twittersettings.php:123
+msgid "Connected Twitter account"
+msgstr ""
+
+#: twittersettings.php:125
+msgid "Remove"
+msgstr ""
+
+#: twittersettings.php:131
+msgid "Preferences"
+msgstr ""
+
+#: twittersettings.php:135
+msgid "Automatically send my notices to Twitter."
+msgstr ""
+
+#: twittersettings.php:142
+msgid "Send local \"@\" replies to Twitter."
+msgstr ""
+
+#: twittersettings.php:149
+msgid "Subscribe to my Twitter friends here."
+msgstr ""
+
+#: twittersettings.php:158
+msgid "Import my Friends Timeline."
+msgstr ""
+
+#: twittersettings.php:174
+msgid "Save"
+msgstr ""
+
+#: twittersettings.php:176
+msgid "Add"
+msgstr ""
+
+#: twittersettings.php:201
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: twittersettings.php:211
+msgid "Unexpected form submission."
+msgstr ""
+
+#: twittersettings.php:230
+msgid "Couldn't remove Twitter user."
+msgstr ""
+
+#: twittersettings.php:234
+msgid "Twitter account removed."
+msgstr ""
+
+#: twittersettings.php:255 twittersettings.php:265
+msgid "Couldn't save Twitter preferences."
+msgstr ""
+
+#: twittersettings.php:269
+msgid "Twitter preferences saved."
+msgstr ""
+
+#: twitter.php:333
+msgid "Your Twitter bridge has been disabled."
+msgstr ""
+
+#: twitter.php:337
+#, php-format
+msgid ""
+"Hi, %1$s. We're sorry to inform you that your link to Twitter has been "
+"disabled. We no longer seem to have permission to update your Twitter "
+"status. (Did you revoke %3$s's access?)\n"
+"\n"
+"You can re-enable your Twitter bridge by visiting your Twitter settings "
+"page:\n"
+"\n"
+"\t%2$s\n"
+"\n"
+"Regards,\n"
+"%3$s\n"
+msgstr ""
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php
index fd5150638..b338a200d 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -330,11 +330,11 @@ function mail_twitter_bridge_removed($user)
$profile = $user->getProfile();
- $subject = sprintf(_('Your Twitter bridge has been disabled.'));
+ $subject = sprintf(_m('Your Twitter bridge has been disabled.'));
$site_name = common_config('site', 'name');
- $body = sprintf(_('Hi, %1$s. We\'re sorry to inform you that your ' .
+ $body = sprintf(_m('Hi, %1$s. We\'re sorry to inform you that your ' .
'link to Twitter has been disabled. We no longer seem to have ' .
'permission to update your Twitter status. (Did you revoke ' .
'%3$s\'s access?)' . "\n\n" .
diff --git a/plugins/TwitterBridge/twitterauthorization.php b/plugins/TwitterBridge/twitterauthorization.php
index f1daefab1..4af2f0394 100644
--- a/plugins/TwitterBridge/twitterauthorization.php
+++ b/plugins/TwitterBridge/twitterauthorization.php
@@ -78,7 +78,7 @@ class TwitterauthorizationAction extends Action
parent::handle($args);
if (!common_logged_in()) {
- $this->clientError(_('Not logged in.'), 403);
+ $this->clientError(_m('Not logged in.'), 403);
}
$user = common_current_user();
@@ -128,7 +128,7 @@ class TwitterauthorizationAction extends Action
} catch (OAuthClientException $e) {
$msg = sprintf('OAuth client cURL error - code: %1s, msg: %2s',
$e->getCode(), $e->getMessage());
- $this->serverError(_('Couldn\'t link your Twitter account.'));
+ $this->serverError(_m('Couldn\'t link your Twitter account.'));
}
common_redirect($auth_link);
@@ -147,7 +147,7 @@ class TwitterauthorizationAction extends Action
// token we sent them
if ($_SESSION['twitter_request_token'] != $this->oauth_token) {
- $this->serverError(_('Couldn\'t link your Twitter account.'));
+ $this->serverError(_m('Couldn\'t link your Twitter account.'));
}
try {
@@ -167,7 +167,7 @@ class TwitterauthorizationAction extends Action
} catch (OAuthClientException $e) {
$msg = sprintf('OAuth client cURL error - code: %1$s, msg: %2$s',
$e->getCode(), $e->getMessage());
- $this->serverError(_('Couldn\'t link your Twitter account.'));
+ $this->serverError(_m('Couldn\'t link your Twitter account.'));
}
// Save the access token and Twitter user info
@@ -214,7 +214,7 @@ class TwitterauthorizationAction extends Action
if (empty($flink_id)) {
common_log_db_error($flink, 'INSERT', __FILE__);
- $this->serverError(_('Couldn\'t link your Twitter account.'));
+ $this->serverError(_m('Couldn\'t link your Twitter account.'));
}
save_twitter_user($twitter_user->id, $twitter_user->screen_name);
diff --git a/plugins/TwitterBridge/twittersettings.php b/plugins/TwitterBridge/twittersettings.php
index ca22c9553..bc9a636a1 100644
--- a/plugins/TwitterBridge/twittersettings.php
+++ b/plugins/TwitterBridge/twittersettings.php
@@ -56,7 +56,7 @@ class TwittersettingsAction extends ConnectSettingsAction
function title()
{
- return _('Twitter settings');
+ return _m('Twitter settings');
}
/**
@@ -67,8 +67,8 @@ class TwittersettingsAction extends ConnectSettingsAction
function getInstructions()
{
- return _('Connect your Twitter account to share your updates ' .
- 'with your Twitter friends and vice-versa.');
+ return _m('Connect your Twitter account to share your updates ' .
+ 'with your Twitter friends and vice-versa.');
}
/**
@@ -115,38 +115,38 @@ class TwittersettingsAction extends ConnectSettingsAction
$this->elementEnd('fieldset');
} else {
- $this->element('legend', null, _('Twitter account'));
+ $this->element('legend', null, _m('Twitter account'));
$this->elementStart('p', array('id' => 'form_confirmed'));
$this->element('a', array('href' => $fuser->uri), $fuser->nickname);
$this->elementEnd('p');
$this->element('p', 'form_note',
- _('Connected Twitter account'));
+ _m('Connected Twitter account'));
- $this->submit('remove', _('Remove'));
+ $this->submit('remove', _m('Remove'));
$this->elementEnd('fieldset');
$this->elementStart('fieldset', array('id' => 'settings_twitter_preferences'));
- $this->element('legend', null, _('Preferences'));
+ $this->element('legend', null, _m('Preferences'));
$this->elementStart('ul', 'form_data');
$this->elementStart('li');
$this->checkbox('noticesend',
- _('Automatically send my notices to Twitter.'),
+ _m('Automatically send my notices to Twitter.'),
($flink) ?
($flink->noticesync & FOREIGN_NOTICE_SEND) :
true);
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('replysync',
- _('Send local "@" replies to Twitter.'),
+ _m('Send local "@" replies to Twitter.'),
($flink) ?
($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) :
true);
$this->elementEnd('li');
$this->elementStart('li');
$this->checkbox('friendsync',
- _('Subscribe to my Twitter friends here.'),
+ _m('Subscribe to my Twitter friends here.'),
($flink) ?
($flink->friendsync & FOREIGN_FRIEND_RECV) :
false);
@@ -155,7 +155,7 @@ class TwittersettingsAction extends ConnectSettingsAction
if (common_config('twitterimport','enabled')) {
$this->elementStart('li');
$this->checkbox('noticerecv',
- _('Import my Friends Timeline.'),
+ _m('Import my Friends Timeline.'),
($flink) ?
($flink->noticesync & FOREIGN_NOTICE_RECV) :
false);
@@ -171,9 +171,9 @@ class TwittersettingsAction extends ConnectSettingsAction
$this->elementEnd('ul');
if ($flink) {
- $this->submit('save', _('Save'));
+ $this->submit('save', _m('Save'));
} else {
- $this->submit('add', _('Add'));
+ $this->submit('add', _m('Add'));
}
$this->elementEnd('fieldset');
@@ -198,8 +198,8 @@ class TwittersettingsAction extends ConnectSettingsAction
// CSRF protection
$token = $this->trimmed('token');
if (!$token || $token != common_session_token()) {
- $this->showForm(_('There was a problem with your session token. '.
- 'Try again, please.'));
+ $this->showForm(_m('There was a problem with your session token. '.
+ 'Try again, please.'));
return;
}
@@ -208,7 +208,7 @@ class TwittersettingsAction extends ConnectSettingsAction
} else if ($this->arg('remove')) {
$this->removeTwitterAccount();
} else {
- $this->showForm(_('Unexpected form submission.'));
+ $this->showForm(_m('Unexpected form submission.'));
}
}
@@ -227,11 +227,11 @@ class TwittersettingsAction extends ConnectSettingsAction
if (empty($result)) {
common_log_db_error($flink, 'DELETE', __FILE__);
- $this->serverError(_('Couldn\'t remove Twitter user.'));
+ $this->serverError(_m('Couldn\'t remove Twitter user.'));
return;
}
- $this->showForm(_('Twitter account removed.'), true);
+ $this->showForm(_m('Twitter account removed.'), true);
}
/**
@@ -252,7 +252,7 @@ class TwittersettingsAction extends ConnectSettingsAction
if (empty($flink)) {
common_log_db_error($flink, 'SELECT', __FILE__);
- $this->showForm(_('Couldn\'t save Twitter preferences.'));
+ $this->showForm(_m('Couldn\'t save Twitter preferences.'));
return;
}
@@ -262,11 +262,11 @@ class TwittersettingsAction extends ConnectSettingsAction
if ($result === false) {
common_log_db_error($flink, 'UPDATE', __FILE__);
- $this->showForm(_('Couldn\'t save Twitter preferences.'));
+ $this->showForm(_m('Couldn\'t save Twitter preferences.'));
return;
}
- $this->showForm(_('Twitter preferences saved.'), true);
+ $this->showForm(_m('Twitter preferences saved.'), true);
}
}
diff --git a/plugins/UserFlag/UserFlagPlugin.php b/plugins/UserFlag/UserFlagPlugin.php
index 60c0c2c0a..75dcca4fc 100644
--- a/plugins/UserFlag/UserFlagPlugin.php
+++ b/plugins/UserFlag/UserFlagPlugin.php
@@ -68,7 +68,7 @@ class UserFlagPlugin extends Plugin
return true;
}
- function onRouterInitialized(&$m) {
+ function onRouterInitialized($m) {
$m->connect('main/flag/profile', array('action' => 'flagprofile'));
$m->connect('admin/profile/flag', array('action' => 'adminprofileflag'));
return true;
@@ -145,9 +145,7 @@ class UserFlagPlugin extends Plugin
function onEndShowScripts($action)
{
- $action->elementStart('script', array('type' => 'text/javascript'));
- $action->raw('/*<![CDATA[*/ if ($(".form_entity_flag").length > 0) { SN.U.FormXHR($(".form_entity_flag")); } /*]]>*/');
- $action->elementEnd('script');
+ $action->inlineScript('if ($(".form_entity_flag").length > 0) { SN.U.FormXHR($(".form_entity_flag")); }');
return true;
}
}
diff --git a/scripts/fixup_utf8.php b/scripts/fixup_utf8.php
index 5a9fba7c3..30befadfd 100755
--- a/scripts/fixup_utf8.php
+++ b/scripts/fixup_utf8.php
@@ -145,7 +145,7 @@ class UTF8FixerUpper
echo "$id...";
- $result =& $this->dbu->execute($sth, array($content, $rendered, $id));
+ $result = $this->dbu->execute($sth, array($content, $rendered, $id));
if (PEAR::isError($result)) {
echo "ERROR: " . $result->getMessage() . "\n";
@@ -209,7 +209,7 @@ class UTF8FixerUpper
echo "$id...";
- $result =& $this->dbu->execute($sth, array($fullname, $location, $bio, $id));
+ $result = $this->dbu->execute($sth, array($fullname, $location, $bio, $id));
if (PEAR::isError($result)) {
echo "ERROR: " . $result->getMessage() . "\n";
@@ -273,7 +273,7 @@ class UTF8FixerUpper
echo "$id...";
- $result =& $this->dbu->execute($sth, array($fullname, $location, $description, $id));
+ $result = $this->dbu->execute($sth, array($fullname, $location, $description, $id));
if (PEAR::isError($result)) {
echo "ERROR: " . $result->getMessage() . "\n";
@@ -330,7 +330,7 @@ class UTF8FixerUpper
echo "$id...";
- $result =& $this->dbu->execute($sth, array($content, $rendered, $id));
+ $result = $this->dbu->execute($sth, array($content, $rendered, $id));
if (PEAR::isError($result)) {
echo "ERROR: " . $result->getMessage() . "\n";
diff --git a/scripts/setup_status_network.sh b/scripts/setup_status_network.sh
index d40d4724f..777711fb5 100755
--- a/scripts/setup_status_network.sh
+++ b/scripts/setup_status_network.sh
@@ -19,8 +19,8 @@ done
mysql -h $DBHOST -u $ADMIN --password=$ADMINPASS $SITEDB << ENDOFCOMMANDS
-GRANT INSERT,SELECT,UPDATE,DELETE ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password';
-GRANT INSERT,SELECT,UPDATE,DELETE ON $database.* TO '$username'@'%' IDENTIFIED BY '$password';
+GRANT ALL ON $database.* TO '$username'@'localhost' IDENTIFIED BY '$password';
+GRANT ALL ON $database.* TO '$username'@'%' IDENTIFIED BY '$password';
INSERT INTO status_network (nickname, dbhost, dbuser, dbpass, dbname, sitename, created)
VALUES ('$nickname', '$DBHOSTNAME', '$username', '$password', '$database', '$sitename', now());
diff --git a/scripts/update_po_templates.php b/scripts/update_po_templates.php
new file mode 100755
index 000000000..83bff6d80
--- /dev/null
+++ b/scripts/update_po_templates.php
@@ -0,0 +1,211 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+// Abort if called from a web server
+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) {
+ print "This script must be run from the command line\n";
+ exit();
+}
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+function update_core($dir, $domain)
+{
+ $old = getcwd();
+ chdir($dir);
+ passthru(<<<END
+xgettext \
+ --from-code=UTF-8 \
+ --default-domain=$domain \
+ --output=locale/$domain.po \
+ --language=PHP \
+ --keyword="_m:1" \
+ --keyword="pgettext:1c,2" \
+ --keyword="npgettext:1c,2,3" \
+ actions/*.php \
+ classes/*.php \
+ lib/*.php \
+ scripts/*.php
+END
+);
+ chdir($old);
+}
+
+function do_update_plugin($dir, $domain)
+{
+ $old = getcwd();
+ chdir($dir);
+ if (!file_exists('locale')) {
+ mkdir('locale');
+ }
+ $files = get_plugin_sources(".");
+ $cmd = <<<END
+xgettext \
+ --from-code=UTF-8 \
+ --default-domain=$domain \
+ --output=locale/$domain.po \
+ --language=PHP \
+ --keyword='' \
+ --keyword="_m:1" \
+
+END;
+ foreach ($files as $file) {
+ $cmd .= ' ' . escapeshellarg($file);
+ }
+ passthru($cmd);
+ chdir($old);
+}
+
+function do_translatewiki_plugin($basedir, $plugin)
+{
+ $yamldir = "$basedir/locale/TranslateWiki";
+ if (!file_exists($yamldir)) {
+ mkdir($yamldir);
+ }
+ $outfile = "$yamldir/StatusNet-{$plugin}.yml";
+ $data = <<<END
+---
+BASIC:
+ id: out-statusnet-{$plugin}
+ label: StatusNet - {$plugin}
+ description: "{{int:bw-desc-statusnet-plugin-{$plugin}}}"
+ namespace: NS_STATUSNET
+ display: out/statusnet/{$plugin}
+ class: GettextMessageGroup
+
+FILES:
+ class: GettextFFS
+ sourcePattern: %GROUPROOT%/plugins/{$plugin}/locale/%CODE%/LC_MESSAGES/{$plugin}.po
+ targetPattern: {$plugin}.po
+ codeMap:
+ en-gb: en_GB
+ no: nb
+ pt-br: pt_BR
+ zh-hans: zh_CN
+ zh-hant: zh_TW
+
+MANGLER
+ class: StringMatcher
+ prefix: {$plugin}-
+ patterns:
+ - "*"
+
+END;
+ file_put_contents($outfile, $data);
+}
+
+function get_plugins($dir)
+{
+ $plugins = array();
+ $dirs = new DirectoryIterator("$dir/plugins");
+ foreach ($dirs as $item) {
+ if ($item->isDir() && !$item->isDot()) {
+ $name = $item->getBasename();
+ if (file_exists("$dir/plugins/$name/{$name}Plugin.php")) {
+ $plugins[] = $name;
+ }
+ }
+ }
+ return $plugins;
+}
+
+function get_plugin_sources($dir)
+{
+ $files = array();
+
+ $dirs = new RecursiveDirectoryIterator($dir);
+ $iter = new RecursiveIteratorIterator($dirs);
+ foreach ($iter as $pathname => $item) {
+ if ($item->isFile() && preg_match('/\.php$/', $item->getBaseName())) {
+ $files[] = $pathname;
+ }
+ }
+ return $files;
+}
+
+function plugin_using_gettext($dir)
+{
+ $files = get_plugin_sources($dir);
+ foreach ($files as $pathname) {
+ // Check if the file is using our _m gettext wrapper
+ $code = file_get_contents($pathname);
+ if (preg_match('/\b_m\(/', $code)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+function update_plugin($basedir, $name)
+{
+ $dir = "$basedir/plugins/$name";
+ if (plugin_using_gettext($dir)) {
+ do_update_plugin($dir, $name);
+ do_translatewiki_plugin($basedir, $name);
+ return true;
+ } else {
+ return false;
+ }
+}
+
+$args = $_SERVER['argv'];
+array_shift($args);
+
+$all = false;
+$core = false;
+$allplugins = false;
+$plugins = array();
+if (count($args) == 0) {
+ $all = true;
+}
+foreach ($args as $arg) {
+ if ($arg == '--all') {
+ $all = true;
+ } elseif ($arg == "--core") {
+ $core = true;
+ } elseif ($arg == "--plugins") {
+ $allplugins = true;
+ } elseif (substr($arg, 0, 9) == "--plugin=") {
+ $plugins[] = substr($arg, 9);
+ }
+}
+
+
+
+if ($all || $core) {
+ echo "core...";
+ update_core(INSTALLDIR, 'statusnet');
+ echo " ok\n";
+}
+if ($all || $allplugins) {
+ $plugins = get_plugins(INSTALLDIR);
+}
+if ($plugins) {
+ foreach ($plugins as $plugin) {
+ echo "$plugin...";
+ if (update_plugin(INSTALLDIR, $plugin)) {
+ echo " ok\n";
+ } else {
+ echo " not localized\n";
+ }
+ }
+}
+
diff --git a/scripts/update_pot.sh b/scripts/update_pot.sh
deleted file mode 100755
index de53fe7c9..000000000
--- a/scripts/update_pot.sh
+++ /dev/null
@@ -1,13 +0,0 @@
-cd `dirname $0`
-cd ..
-xgettext \
- --from-code=UTF-8 \
- --default-domain=statusnet \
- --output=locale/statusnet.po \
- --language=PHP \
- --keyword="pgettext:1c,2" \
- --keyword="npgettext:1c,2,3" \
- actions/*.php \
- classes/*.php \
- lib/*.php \
- scripts/*.php
diff --git a/scripts/updateavatarurl.php b/scripts/updateavatarurl.php
index dfcfc118c..617c2e24c 100644
--- a/scripts/updateavatarurl.php
+++ b/scripts/updateavatarurl.php
@@ -60,7 +60,8 @@ try {
}
}
} else {
- throw new Exception("You have to provide an ID or nickname or 'all'.");
+ show_help();
+ exit(1);
}
} catch (Exception $e) {
print $e->getMessage()."\n";
@@ -123,6 +124,9 @@ function updateAvatars($user)
}
if (have_option('v', 'verbose')) {
- print "DONE.\n";
+ print "DONE.";
+ }
+ if (!have_option('q', 'quiet') || have_option('v', 'verbose')) {
+ print "\n";
}
}
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 44d1d0300..f622f35ca 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -112,7 +112,6 @@ border-style:solid;
line-height:0;
}
-
.form_settings input.remove {
margin-left:11px;
}
@@ -246,7 +245,6 @@ margin-left:11px;
width:auto;
}
-
address {
float:left;
margin-bottom:18px;
@@ -709,7 +707,6 @@ border-radius:4px;
margin-bottom:18px;
}
-
.entity_send-a-message button {
position:absolute;
top:3px;
@@ -1005,11 +1002,13 @@ float:left;
}
.notice-options .notice_delete,
.notice-options .notice_reply,
+.notice-options .form_forward,
.notice-options .form_favor,
.notice-options .form_disfavor {
float:left;
margin-left:20%;
}
+.notice-options .form_forward,
.notice-options .form_favor,
.notice-options .form_disfavor {
margin-left:0;
@@ -1035,10 +1034,12 @@ border-radius:0;
-moz-border-radius:0;
-webkit-border-radius:0;
}
+.notice-options .form_forward legend,
.notice-options .form_favor legend,
.notice-options .form_disfavor legend {
display:none;
}
+.notice-options .form_forward fieldset,
.notice-options .form_favor fieldset,
.notice-options .form_disfavor fieldset {
border:0;
diff --git a/theme/base/images/illustrations/illu_pattern-01.png b/theme/base/images/illustrations/illu_pattern-01.png
new file mode 100644
index 000000000..833309e58
--- /dev/null
+++ b/theme/base/images/illustrations/illu_pattern-01.png
Binary files differ
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index ad64b4198..d11bbe15e 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -55,7 +55,6 @@ border-color:#DDDDDD;
background:none;
}
-input.submit,
.form_notice.warning #notice_text-count,
.form_settings .form_note,
.entity_remote_subscribe,
@@ -92,6 +91,27 @@ input.submit,
.entity_actions .form_notice input.submit {
color:#FFFFFF;
}
+input.submit {
+background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
+text-shadow:0 1px 0 #FFFFFF;
+color:#000000;
+border-color:#AAAAAA;
+border-top-color:#CCCCCC;
+border-left-color:#CCCCCC;
+}
+input.submit:hover {
+background-position:0 -5px;
+}
+input.submit:focus {
+background-position:0 -15px;
+box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+text-shadow:none;
+}
+.entity_actions input.submit {
+text-shadow:none;
+}
a,
.form_settings input.form_action-primary,
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index d5a5d38de..d65ea2ef6 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -55,7 +55,6 @@ border-color:#DDDDDD;
background:none;
}
-input.submit,
.form_notice.warning #notice_text-count,
.form_settings .form_note,
.entity_remote_subscribe,
@@ -92,6 +91,27 @@ input.submit,
.entity_actions .form_notice input.submit {
color:#FFFFFF;
}
+input.submit {
+background:#AAAAAA url(../../base/images/illustrations/illu_pattern-01.png) 0 0 repeat-x;
+text-shadow:0 1px 0 #FFFFFF;
+color:#000000;
+border-color:#AAAAAA;
+border-top-color:#CCCCCC;
+border-left-color:#CCCCCC;
+}
+input.submit:hover {
+background-position:0 -5px;
+}
+input.submit:focus {
+background-position:0 -15px;
+box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.1);
+text-shadow:none;
+}
+.entity_actions input.submit {
+text-shadow:none;
+}
a,
.form_settings input.form_action-primary,