summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README4
-rw-r--r--actions/apimediaupload.php141
-rw-r--r--actions/apistatusesupdate.php16
-rw-r--r--actions/apistatusnetconfig.php10
-rw-r--r--actions/apitimelinefavorites.php36
-rw-r--r--actions/apitimelinefriends.php39
-rw-r--r--actions/apitimelinegroup.php17
-rw-r--r--actions/apitimelinehome.php39
-rw-r--r--actions/apitimelinementions.php34
-rw-r--r--actions/apitimelinepublic.php25
-rw-r--r--actions/apitimelinetag.php38
-rw-r--r--actions/apitimelineuser.php25
-rw-r--r--actions/avatarsettings.php4
-rw-r--r--actions/deleteuser.php10
-rw-r--r--actions/doc.php30
-rw-r--r--actions/foaf.php4
-rw-r--r--actions/foafgroup.php6
-rw-r--r--actions/otp.php2
-rw-r--r--actions/publictagcloud.php2
-rw-r--r--actions/recoverpassword.php27
-rw-r--r--actions/showgroup.php3
-rw-r--r--actions/shownotice.php22
-rw-r--r--actions/siteadminpanel.php4
-rw-r--r--actions/sitenoticeadminpanel.php2
-rw-r--r--classes/File.php35
-rw-r--r--classes/File_oembed.php6
-rw-r--r--classes/File_redirection.php111
-rw-r--r--classes/Foreign_user.php1
-rw-r--r--classes/Notice.php26
-rw-r--r--classes/Profile.php15
-rw-r--r--classes/Profile_role.php1
-rw-r--r--classes/Safe_DataObject.php43
-rw-r--r--classes/Subscription.php72
-rw-r--r--classes/User.php64
-rw-r--r--classes/User_group.php17
-rw-r--r--config.php.sample2
-rw-r--r--htaccess.sample5
-rw-r--r--index.php109
-rw-r--r--install.php28
-rw-r--r--js/util.js129
-rw-r--r--lib/action.php3
-rw-r--r--lib/activity.php1114
-rw-r--r--lib/activitycontext.php121
-rw-r--r--lib/activityobject.php548
-rw-r--r--lib/activityutils.php265
-rw-r--r--lib/activityverb.php66
-rw-r--r--lib/apiaction.php71
-rw-r--r--lib/apiauth.php22
-rw-r--r--lib/atom10feed.php2
-rw-r--r--lib/atomcategory.php77
-rw-r--r--lib/attachmentlist.php88
-rw-r--r--lib/authorizationplugin.php4
-rw-r--r--lib/avatarlink.php102
-rw-r--r--lib/channel.php19
-rw-r--r--lib/command.php357
-rw-r--r--lib/common.php13
-rw-r--r--lib/default.php2
-rw-r--r--lib/deluserqueuehandler.php95
-rw-r--r--lib/httpclient.php10
-rw-r--r--lib/imagefile.php33
-rw-r--r--lib/language.php15
-rw-r--r--lib/mysqlschema.php236
-rw-r--r--lib/noticelist.php13
-rw-r--r--lib/pgsqlschema.php38
-rw-r--r--lib/poco.php240
-rw-r--r--lib/pocoaddress.php56
-rw-r--r--lib/pocourl.php65
-rw-r--r--lib/processmanager.php84
-rw-r--r--lib/queuemanager.php3
-rw-r--r--lib/router.php6
-rw-r--r--lib/schema.php6
-rw-r--r--lib/servererroraction.php9
-rw-r--r--lib/spawningdaemon.php32
-rw-r--r--lib/statusnet.php6
-rw-r--r--lib/subs.php43
-rw-r--r--lib/usernoprofileexception.php74
-rw-r--r--lib/userprofile.php14
-rw-r--r--lib/util.php53
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po507
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po466
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/br/LC_MESSAGES/statusnet.po496
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po469
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po584
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po494
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po466
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po507
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po465
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po469
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po469
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po665
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po602
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po467
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po465
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po479
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po845
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po467
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po467
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po465
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po490
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po467
-rw-r--r--locale/statusnet.po457
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po525
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po676
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po465
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po469
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po469
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po468
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po466
-rw-r--r--plugins/AutoSandbox/AutoSandboxPlugin.php96
-rw-r--r--plugins/AutoSandbox/LICENSE21
-rw-r--r--plugins/AutoSandbox/README39
-rw-r--r--plugins/FirePHP/FirePHPPlugin.php4
-rw-r--r--plugins/LdapAuthentication/LdapAuthenticationPlugin.php277
-rw-r--r--plugins/LdapAuthorization/LdapAuthorizationPlugin.php133
-rw-r--r--plugins/LdapCommon/LdapCommon.php356
-rw-r--r--plugins/LdapCommon/MemcacheSchemaCache.php (renamed from plugins/LdapAuthentication/MemcacheSchemaCache.php)0
-rw-r--r--plugins/OStatus/OStatusPlugin.php100
-rw-r--r--plugins/OStatus/actions/ostatussub.php7
-rw-r--r--plugins/OStatus/actions/usersalmon.php3
-rw-r--r--plugins/OStatus/actions/userxrd.php19
-rw-r--r--plugins/OStatus/classes/FeedSub.php9
-rw-r--r--plugins/OStatus/classes/HubSub.php4
-rw-r--r--plugins/OStatus/classes/Magicsig.php116
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php610
-rw-r--r--plugins/OStatus/extlib/Crypt/AES.php479
-rw-r--r--plugins/OStatus/extlib/Crypt/DES.php945
-rw-r--r--plugins/OStatus/extlib/Crypt/Hash.php816
-rw-r--r--plugins/OStatus/extlib/Crypt/RC4.php493
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA.php2262
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php234
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Key.php315
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/KeyPair.php804
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php482
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php313
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php361
-rw-r--r--plugins/OStatus/extlib/Crypt/RSA/MathLoader.php135
-rw-r--r--plugins/OStatus/extlib/Crypt/Random.php125
-rw-r--r--plugins/OStatus/extlib/Crypt/Rijndael.php1242
-rw-r--r--plugins/OStatus/extlib/Crypt/TripleDES.php690
-rw-r--r--plugins/OStatus/extlib/Math/BigInteger.php3545
-rw-r--r--plugins/OStatus/extlib/hkit/hcard.profile.php105
-rw-r--r--plugins/OStatus/extlib/hkit/hkit.class.php475
-rw-r--r--plugins/OStatus/lib/discovery.php91
-rw-r--r--plugins/OStatus/lib/discoveryhints.php252
-rw-r--r--plugins/OStatus/lib/feeddiscovery.php33
-rw-r--r--plugins/OStatus/lib/linkheader.php63
-rw-r--r--plugins/OStatus/lib/magicenvelope.php21
-rw-r--r--plugins/OStatus/lib/safecrypt_rsa.php18
-rw-r--r--plugins/OStatus/lib/safemath_biginteger.php20
-rw-r--r--plugins/OStatus/lib/xrdaction.php8
-rw-r--r--plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po3
-rw-r--r--plugins/OStatus/scripts/fixup-shadow.php69
-rw-r--r--plugins/OStatus/scripts/testfeed.php89
-rw-r--r--plugins/OStatus/scripts/updateostatus.php14
-rw-r--r--plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php64
-rw-r--r--plugins/OpenID/User_openid.php5
-rw-r--r--plugins/OpenID/User_openid_trustroot.php5
-rw-r--r--plugins/OpenID/openid.php6
-rw-r--r--plugins/OpenID/openidsettings.php70
-rw-r--r--plugins/RSSCloud/RSSCloudNotifier.php2
-rw-r--r--plugins/RSSCloud/RSSCloudRequestNotify.php7
-rw-r--r--plugins/RequireValidatedEmail/README2
-rw-r--r--plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php23
-rw-r--r--plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po31
-rw-r--r--plugins/TwitterBridge/README4
-rwxr-xr-xscripts/command.php80
-rwxr-xr-xscripts/docgen.php84
-rw-r--r--scripts/doxygen.tmpl1516
-rwxr-xr-xscripts/fixup_files.php77
-rw-r--r--scripts/flushsite.php45
-rwxr-xr-xscripts/imdaemon.php19
-rw-r--r--scripts/importtwitteratom.php192
-rwxr-xr-xscripts/queuedaemon.php11
-rw-r--r--tests/ActivityParseTests.php178
-rw-r--r--theme/base/css/display.css19
-rw-r--r--theme/base/css/thickbox.css163
-rw-r--r--theme/base/images/icons/icons-01.gifbin4080 -> 4120 bytes
-rw-r--r--theme/biz/css/display.css2
-rw-r--r--theme/biz/logo.pngbin6389 -> 10107 bytes
-rw-r--r--theme/cloudy/css/display.css3
-rw-r--r--theme/cloudy/logo.pngbin6389 -> 10107 bytes
-rw-r--r--theme/default/css/display.css16
-rw-r--r--theme/h4ck3r/logo.pngbin6389 -> 10107 bytes
-rw-r--r--theme/identica/css/display.css16
191 files changed, 27390 insertions, 15297 deletions
diff --git a/README b/README
index 45b72e9ac..c5adda177 100644
--- a/README
+++ b/README
@@ -137,7 +137,9 @@ run correctly.
- PHP 5.2.3+. It may be possible to run this software on earlier
versions of PHP, but many of the functions used are only available
- in PHP 5.2 or above.
+ in PHP 5.2 or above. 5.2.6 or later is needed for XMPP background
+ daemons on 64-bit platforms. PHP 5.3.x should work but is known
+ to cause some failures for OpenID.
- MySQL 5.x. The StatusNet database is stored, by default, in a MySQL
server. It has been primarily tested on 5.x servers, although it may
be possible to install on earlier (or later!) versions. The server
diff --git a/actions/apimediaupload.php b/actions/apimediaupload.php
new file mode 100644
index 000000000..ec316edc8
--- /dev/null
+++ b/actions/apimediaupload.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Upload an image via the API
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category API
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+require_once INSTALLDIR . '/lib/apiauth.php';
+require_once INSTALLDIR . '/lib/mediafile.php';
+
+/**
+ * Upload an image via the API. Returns a shortened URL for the image
+ * to the user.
+ *
+ * @category API
+ * @package StatusNet
+ * @author Zach Copley <zach@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class ApiMediaUploadAction extends ApiAuthAction
+{
+ /**
+ * Handle the request
+ *
+ * Grab the file from the 'media' param, then store, and shorten
+ *
+ * @todo Upload throttle!
+ *
+ * @param array $args $_REQUEST data (unused)
+ *
+ * @return void
+ */
+
+ function handle($args)
+ {
+ parent::handle($args);
+
+ if ($_SERVER['REQUEST_METHOD'] != 'POST') {
+ $this->clientError(
+ _('This method requires a POST.'),
+ 400, $this->format
+ );
+ return;
+ }
+
+ // Workaround for PHP returning empty $_POST and $_FILES when POST
+ // length > post_max_size in php.ini
+
+ if (empty($_FILES)
+ && empty($_POST)
+ && ($_SERVER['CONTENT_LENGTH'] > 0)
+ ) {
+ $msg = _('The server was unable to handle that much POST ' .
+ 'data (%s bytes) due to its current configuration.');
+
+ $this->clientError(sprintf($msg, $_SERVER['CONTENT_LENGTH']));
+ return;
+ }
+
+ $upload = null;
+
+ try {
+ $upload = MediaFile::fromUpload('media', $this->auth_user);
+ } catch (ClientException $ce) {
+ $this->clientError($ce->getMessage());
+ return;
+ }
+
+ if (isset($upload)) {
+ $this->showResponse($upload);
+ } else {
+ $this->clientError('Upload failed.');
+ return;
+ }
+ }
+
+ /**
+ * Show a Twitpic-like response with the ID of the media file
+ * and a (hopefully) shortened URL for it.
+ *
+ * @param File $upload the uploaded file
+ *
+ * @return void
+ */
+ function showResponse($upload)
+ {
+ $this->initDocument();
+ $this->elementStart('rsp', array('stat' => 'ok'));
+ $this->element('mediaid', null, $upload->fileRecord->id);
+ $this->element('mediaurl', null, $upload->shortUrl());
+ $this->elementEnd('rsp');
+ $this->endDocument();
+ }
+
+ /**
+ * Overrided clientError to show a more Twitpic-like error
+ *
+ * @param String $msg an error message
+ *
+ */
+ function clientError($msg)
+ {
+ $this->initDocument();
+ $this->elementStart('rsp', array('stat' => 'fail'));
+
+ // @todo add in error code
+ $errAttr = array('msg' => $msg);
+
+ $this->element('err', $errAttr, null);
+ $this->elementEnd('rsp');
+ $this->endDocument();
+ }
+
+}
diff --git a/actions/apistatusesupdate.php b/actions/apistatusesupdate.php
index bf367e1e1..1956c8586 100644
--- a/actions/apistatusesupdate.php
+++ b/actions/apistatusesupdate.php
@@ -244,11 +244,17 @@ class ApiStatusesUpdateAction extends ApiAuthAction
$options = array_merge($options, $locOptions);
}
- $this->notice =
- Notice::saveNew($this->auth_user->id,
- $content,
- $this->source,
- $options);
+ try {
+ $this->notice = Notice::saveNew(
+ $this->auth_user->id,
+ $content,
+ $this->source,
+ $options
+ );
+ } catch (Exception $e) {
+ $this->clientError($e->getMessage());
+ return;
+ }
if (isset($upload)) {
$upload->attachToNotice($this->notice);
diff --git a/actions/apistatusnetconfig.php b/actions/apistatusnetconfig.php
index bff8313b5..66b23c02d 100644
--- a/actions/apistatusnetconfig.php
+++ b/actions/apistatusnetconfig.php
@@ -97,8 +97,6 @@ class ApiStatusnetConfigAction extends ApiAction
// XXX: check that all sections and settings are legal XML elements
- common_debug(var_export($this->keys, true));
-
foreach ($this->keys as $section => $settings) {
$this->elementStart($section);
foreach ($settings as $setting) {
@@ -110,6 +108,14 @@ class ApiStatusnetConfigAction extends ApiAction
} else if ($value === true) {
$value = 'true';
}
+
+ // return theme logo if there's no site specific one
+ if (empty($value)) {
+ if ($section == 'site' && $setting == 'logo') {
+ $value = Theme::path('logo.png');
+ }
+ }
+
$this->element($setting, null, $value);
}
$this->elementEnd($section);
diff --git a/actions/apitimelinefavorites.php b/actions/apitimelinefavorites.php
index c89d02247..8cb2e808d 100644
--- a/actions/apitimelinefavorites.php
+++ b/actions/apitimelinefavorites.php
@@ -23,7 +23,8 @@
* @package StatusNet
* @author Craig Andrews <candrews@integralblue.com>
* @author Evan Prodromou <evan@status.net>
- * @author Zach Copley <zach@status.net> * @copyright 2009 StatusNet, Inc.
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -123,22 +124,26 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
? $avatar->displayUrl()
: Avatar::defaultImage(AVATAR_PROFILE_SIZE);
+ $link = common_local_url(
+ 'showfavorites',
+ array('nickname' => $this->user->nickname)
+ );
+
+ $self = $this->getSelfUri();
+
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $link = common_local_url(
- 'showfavorites',
- array('nickname' => $this->user->nickname)
- );
$this->showRssTimeline(
$this->notices,
$title,
$link,
$subtitle,
null,
- $logo
+ $logo,
+ $self
);
break;
case 'atom':
@@ -153,23 +158,8 @@ class ApiTimelineFavoritesAction extends ApiBareAuthAction
$atom->setLogo($logo);
$atom->setUpdated('now');
- $atom->addLink(
- common_local_url(
- 'showfavorites',
- array('nickname' => $this->user->nickname)
- )
- );
-
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineFavorites', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->addLink($link);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
diff --git a/actions/apitimelinefriends.php b/actions/apitimelinefriends.php
index 9ef3ace60..ac350ab1b 100644
--- a/actions/apitimelinefriends.php
+++ b/actions/apitimelinefriends.php
@@ -117,9 +117,17 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$subtitle = sprintf(
_('Updates from %1$s and friends on %2$s!'),
- $this->user->nickname, $sitename
+ $this->user->nickname,
+ $sitename
);
+ $link = common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ );
+
+ $self = $this->getSelfUri();
+
$logo = (!empty($avatar))
? $avatar->displayUrl()
: Avatar::defaultImage(AVATAR_PROFILE_SIZE);
@@ -130,19 +138,14 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
break;
case 'rss':
- $link = common_local_url(
- 'all', array(
- 'nickname' => $this->user->nickname
- )
- );
-
$this->showRssTimeline(
$this->notices,
$title,
$link,
$subtitle,
null,
- $logo
+ $logo,
+ $self
);
break;
case 'atom':
@@ -156,24 +159,8 @@ class ApiTimelineFriendsAction extends ApiBareAuthAction
$atom->setSubtitle($subtitle);
$atom->setLogo($logo);
$atom->setUpdated('now');
-
- $atom->addLink(
- common_local_url(
- 'all',
- array('nickname' => $this->user->nickname)
- )
- );
-
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineFriends', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->addLink($link);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
diff --git a/actions/apitimelinegroup.php b/actions/apitimelinegroup.php
index 8f971392b..da816c40a 100644
--- a/actions/apitimelinegroup.php
+++ b/actions/apitimelinegroup.php
@@ -107,6 +107,8 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
// We'll pull common formatting out of this for other formats
$atom = new AtomGroupNoticeFeed($this->group);
+ $self = $this->getSelfUri();
+
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
@@ -118,7 +120,8 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
$this->group->homeUrl(),
$atom->subtitle,
null,
- $atom->logo
+ $atom->logo,
+ $self
);
break;
case 'atom':
@@ -126,24 +129,12 @@ class ApiTimelineGroupAction extends ApiPrivateAuthAction
header('Content-Type: application/atom+xml; charset=utf-8');
try {
-
$atom->addAuthorRaw($this->group->asAtomAuthor());
$atom->setActivitySubject($this->group->asActivitySubject());
-
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
- $self = $this->getSelfUri('ApiTimelineGroup', $aargs);
-
$atom->setId($self);
$atom->setSelfLink($self);
-
$atom->addEntryFromNotices($this->notices);
-
$this->raw($atom->getString());
-
} catch (Atom10FeedException $e) {
$this->serverError(
'Could not generate feed for group - ' . $e->getMessage()
diff --git a/actions/apitimelinehome.php b/actions/apitimelinehome.php
index abd387786..1618c9923 100644
--- a/actions/apitimelinehome.php
+++ b/actions/apitimelinehome.php
@@ -72,7 +72,7 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
function prepare($args)
{
parent::prepare($args);
- common_debug("api home_timeline");
+
$this->user = $this->getTargetUser($this->arg('id'));
if (empty($this->user)) {
@@ -121,8 +121,15 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$this->user->nickname, $sitename
);
- $logo = (!empty($avatar))
- ? $avatar->displayUrl()
+ $link = common_local_url(
+ 'all',
+ array('nickname' => $this->user->nickname)
+ );
+
+ $self = $this->getSelfUri();
+
+ $logo = (!empty($avatar))
+ ? $avatar->displayUrl()
: Avatar::defaultImage(AVATAR_PROFILE_SIZE);
switch($this->format) {
@@ -130,17 +137,14 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $link = common_local_url(
- 'all',
- array('nickname' => $this->user->nickname)
- );
$this->showRssTimeline(
$this->notices,
$title,
$link,
$subtitle,
null,
- $logo
+ $logo,
+ $self
);
break;
case 'atom':
@@ -155,23 +159,8 @@ class ApiTimelineHomeAction extends ApiBareAuthAction
$atom->setLogo($logo);
$atom->setUpdated('now');
- $atom->addLink(
- common_local_url(
- 'all',
- array('nickname' => $this->user->nickname)
- )
- );
-
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineHome', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->addLink($link);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
$this->raw($atom->getString());
diff --git a/actions/apitimelinementions.php b/actions/apitimelinementions.php
index 31627ab7b..c3aec7c5a 100644
--- a/actions/apitimelinementions.php
+++ b/actions/apitimelinementions.php
@@ -123,6 +123,9 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
'replies',
array('nickname' => $this->user->nickname)
);
+
+ $self = $this->getSelfUri();
+
$subtitle = sprintf(
_('%1$s updates that reply to updates from %2$s / %3$s.'),
$sitename, $this->user->nickname, $profile->getBestName()
@@ -134,10 +137,20 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $logo);
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $logo,
+ $self
+ );
break;
case 'atom':
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
$atom = new AtomNoticeFeed();
$atom->setId($id);
@@ -146,23 +159,8 @@ class ApiTimelineMentionsAction extends ApiBareAuthAction
$atom->setLogo($logo);
$atom->setUpdated('now');
- $atom->addLink(
- common_local_url(
- 'replies',
- array('nickname' => $this->user->nickname)
- )
- );
-
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineMentions', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->addLink($link);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
$this->raw($atom->getString());
diff --git a/actions/apitimelinepublic.php b/actions/apitimelinepublic.php
index 3e4dad690..903461425 100644
--- a/actions/apitimelinepublic.php
+++ b/actions/apitimelinepublic.php
@@ -107,7 +107,8 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$title = sprintf(_("%s public timeline"), $sitename);
$taguribase = TagURI::base();
$id = "tag:$taguribase:PublicTimeline";
- $link = common_root_url();
+ $link = common_local_url('public');
+ $self = $this->getSelfUri();
$subtitle = sprintf(_("%s updates from everyone!"), $sitename);
switch($this->format) {
@@ -115,10 +116,20 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $this->showRssTimeline($this->notices, $title, $link, $subtitle, null, $sitelogo);
+ $this->showRssTimeline(
+ $this->notices,
+ $title,
+ $link,
+ $subtitle,
+ null,
+ $sitelogo,
+ $self
+ );
break;
case 'atom':
+ header('Content-Type: application/atom+xml; charset=utf-8');
+
$atom = new AtomNoticeFeed();
$atom->setId($id);
@@ -126,16 +137,8 @@ class ApiTimelinePublicAction extends ApiPrivateAuthAction
$atom->setSubtitle($subtitle);
$atom->setLogo($sitelogo);
$atom->setUpdated('now');
-
$atom->addLink(common_local_url('public'));
-
- $atom->addLink(
- $this->getSelfUri(
- 'ApiTimelinePublic', array('format' => 'atom')
- ),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
-
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
$this->raw($atom->getString());
diff --git a/actions/apitimelinetag.php b/actions/apitimelinetag.php
index a29061fcc..fed1437ea 100644
--- a/actions/apitimelinetag.php
+++ b/actions/apitimelinetag.php
@@ -25,7 +25,7 @@
* @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -67,6 +67,8 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
{
parent::prepare($args);
+ common_debug("apitimelinetag prepare()");
+
$this->tag = $this->arg('tag');
$this->notices = $this->getNotices();
@@ -108,22 +110,28 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$taguribase = TagURI::base();
$id = "tag:$taguribase:TagTimeline:".$tag;
+ $link = common_local_url(
+ 'tag',
+ array('tag' => $this->tag)
+ );
+
+ $self = $this->getSelfUri();
+
+ common_debug("self link is: $self");
+
switch($this->format) {
case 'xml':
$this->showXmlTimeline($this->notices);
break;
case 'rss':
- $link = common_local_url(
- 'tag',
- array('tag' => $this->tag)
- );
$this->showRssTimeline(
$this->notices,
$title,
$link,
$subtitle,
null,
- $sitelogo
+ $sitelogo,
+ $self
);
break;
case 'atom':
@@ -138,22 +146,8 @@ class ApiTimelineTagAction extends ApiPrivateAuthAction
$atom->setLogo($logo);
$atom->setUpdated('now');
- $atom->addLink(
- common_local_url(
- 'tag',
- array('tag' => $this->tag)
- )
- );
-
- $aargs = array('format' => 'atom');
- if (!empty($this->tag)) {
- $aargs['tag'] = $this->tag;
- }
-
- $atom->addLink(
- $this->getSelfUri('ApiTimelineTag', $aargs),
- array('rel' => 'self', 'type' => 'application/atom+xml')
- );
+ $atom->addLink($link);
+ $atom->setSelfLink($self);
$atom->addEntryFromNotices($this->notices);
$this->raw($atom->getString());
diff --git a/actions/apitimelineuser.php b/actions/apitimelineuser.php
index 2d0047c04..11431a82c 100644
--- a/actions/apitimelineuser.php
+++ b/actions/apitimelineuser.php
@@ -116,13 +116,13 @@ class ApiTimelineUserAction extends ApiBareAuthAction
// We'll use the shared params from the Atom stub
// for other feed types.
$atom = new AtomUserNoticeFeed($this->user);
- $title = $atom->title;
- $link = common_local_url(
+
+ $link = common_local_url(
'showstream',
array('nickname' => $this->user->nickname)
);
- $subtitle = $atom->subtitle;
- $logo = $atom->logo;
+
+ $self = $this->getSelfUri();
// FriendFeed's SUP protocol
// Also added RSS and Atom feeds
@@ -136,25 +136,22 @@ class ApiTimelineUserAction extends ApiBareAuthAction
break;
case 'rss':
$this->showRssTimeline(
- $this->notices, $title, $link,
- $subtitle, $suplink, $logo
+ $this->notices,
+ $atom->title,
+ $link,
+ $atom->subtitle,
+ $suplink,
+ $atom->logo,
+ $self
);
break;
case 'atom':
header('Content-Type: application/atom+xml; charset=utf-8');
- $id = $this->arg('id');
- $aargs = array('format' => 'atom');
- if (!empty($id)) {
- $aargs['id'] = $id;
- }
- $self = $this->getSelfUri('ApiTimelineUser', $aargs);
$atom->setId($self);
$atom->setSelfLink($self);
-
$atom->addEntryFromNotices($this->notices);
-
$this->raw($atom->getString());
break;
diff --git a/actions/avatarsettings.php b/actions/avatarsettings.php
index 6a7398746..d4ea11cb7 100644
--- a/actions/avatarsettings.php
+++ b/actions/avatarsettings.php
@@ -301,6 +301,10 @@ class AvatarsettingsAction extends AccountSettingsAction
$this->showForm($e->getMessage());
return;
}
+ if ($imagefile === null) {
+ $this->showForm(_('No file uploaded.'));
+ return;
+ }
$cur = common_current_user();
diff --git a/actions/deleteuser.php b/actions/deleteuser.php
index c4f84fad2..4e6b27395 100644
--- a/actions/deleteuser.php
+++ b/actions/deleteuser.php
@@ -162,7 +162,15 @@ class DeleteuserAction extends ProfileFormAction
function handlePost()
{
if (Event::handle('StartDeleteUser', array($this, $this->user))) {
- $this->user->delete();
+ // Mark the account as deleted and shove low-level deletion tasks
+ // to background queues. Removing a lot of posts can take a while...
+ if (!$this->user->hasRole(Profile_role::DELETED)) {
+ $this->user->grantRole(Profile_role::DELETED);
+ }
+
+ $qm = QueueManager::get();
+ $qm->enqueue($this->user, 'deluser');
+
Event::handle('EndDeleteUser', array($this, $this->user));
}
}
diff --git a/actions/doc.php b/actions/doc.php
index 459f5f096..f876fb8be 100644
--- a/actions/doc.php
+++ b/actions/doc.php
@@ -13,7 +13,7 @@
* @link http://status.net/
*
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008-2010, StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -168,14 +168,28 @@ class DocAction extends Action
function getFilename()
{
- if (file_exists(INSTALLDIR.'/local/doc-src/'.$this->title)) {
- $localDef = INSTALLDIR.'/local/doc-src/'.$this->title;
- }
+ $localDef = null;
+ $local = null;
+
+ $site = StatusNet::currentSite();
- $local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*');
- if ($local === false) {
- // Some systems return false, others array(), if dir didn't exist.
- $local = array();
+ if (!empty($site) && file_exists(INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title)) {
+ $localDef = INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title;
+
+ $local = glob(INSTALLDIR.'/local/doc-src/'.$site.'/'.$this->title.'.*');
+ if ($local === false) {
+ // Some systems return false, others array(), if dir didn't exist.
+ $local = array();
+ }
+ } else {
+ if (file_exists(INSTALLDIR.'/local/doc-src/'.$this->title)) {
+ $localDef = INSTALLDIR.'/local/doc-src/'.$this->title;
+ }
+
+ $local = glob(INSTALLDIR.'/local/doc-src/'.$this->title.'.*');
+ if ($local === false) {
+ $local = array();
+ }
}
if (count($local) || isset($localDef)) {
diff --git a/actions/foaf.php b/actions/foaf.php
index e9f67b7f2..fc2ec9b12 100644
--- a/actions/foaf.php
+++ b/actions/foaf.php
@@ -251,7 +251,7 @@ class FoafAction extends Action
}
// Their account
- $this->elementStart('holdsAccount');
+ $this->elementStart('account');
$this->elementStart('OnlineAccount', $attr);
if ($service) {
$this->element('accountServiceHomepage', array('rdf:resource' =>
@@ -306,7 +306,7 @@ class FoafAction extends Action
}
$this->elementEnd('OnlineAccount');
- $this->elementEnd('holdsAccount');
+ $this->elementEnd('account');
return $person;
}
diff --git a/actions/foafgroup.php b/actions/foafgroup.php
index ebdf1cee2..d685554ac 100644
--- a/actions/foafgroup.php
+++ b/actions/foafgroup.php
@@ -146,7 +146,7 @@ class FoafGroupAction extends Action
{
$this->elementStart('Agent', array('rdf:about' => $uri));
$this->element('nick', null, $details['nickname']);
- $this->elementStart('holdsAccount');
+ $this->elementStart('account');
$this->elementStart('sioc:User', array('rdf:about'=>$uri.'#acct'));
$this->elementStart('sioc:has_function');
$this->elementStart('statusnet:GroupAdminRole');
@@ -154,7 +154,7 @@ class FoafGroupAction extends Action
$this->elementEnd('statusnet:GroupAdminRole');
$this->elementEnd('sioc:has_function');
$this->elementEnd('sioc:User');
- $this->elementEnd('holdsAccount');
+ $this->elementEnd('account');
$this->elementEnd('Agent');
}
else
@@ -177,4 +177,4 @@ class FoafGroupAction extends Action
$this->elementEnd('Document');
}
-} \ No newline at end of file
+}
diff --git a/actions/otp.php b/actions/otp.php
index acf84aee8..1e06603d4 100644
--- a/actions/otp.php
+++ b/actions/otp.php
@@ -126,6 +126,8 @@ class OtpAction extends Action
$this->lt->delete();
$this->lt = null;
+ common_real_login(true);
+
if ($this->rememberme) {
common_rememberme($this->user);
}
diff --git a/actions/publictagcloud.php b/actions/publictagcloud.php
index 9993b2d3f..70c356659 100644
--- a/actions/publictagcloud.php
+++ b/actions/publictagcloud.php
@@ -109,7 +109,7 @@ class PublictagcloudAction extends Action
$cutoff = sprintf("notice_tag.created > '%s'",
common_sql_date(time() - common_config('tag', 'cutoff')));
$tags->selectAdd($calc . ' as weight');
- $tags->addWhere($cutoff);
+ $tags->whereAdd($cutoff);
$tags->groupBy('tag');
$tags->orderBy('weight DESC');
diff --git a/actions/recoverpassword.php b/actions/recoverpassword.php
index 1e2775e7a..f9956897f 100644
--- a/actions/recoverpassword.php
+++ b/actions/recoverpassword.php
@@ -262,10 +262,20 @@ class RecoverpasswordAction extends Action
# See if it's an unconfirmed email address
if (!$user) {
- $confirm_email = Confirm_address::staticGet('address', common_canonical_email($nore));
- if ($confirm_email && $confirm_email->address_type == 'email') {
+ // Warning: it may actually be legit to have multiple folks
+ // who have claimed, but not yet confirmed, the same address.
+ // We'll only send to the first one that comes up.
+ $confirm_email = new Confirm_address();
+ $confirm_email->address = common_canonical_email($nore);
+ $confirm_email->address_type = 'email';
+ $confirm_email->find();
+ if ($confirm_email->fetch()) {
$user = User::staticGet($confirm_email->user_id);
+ } else {
+ $confirm_email = null;
}
+ } else {
+ $confirm_email = null;
}
if (!$user) {
@@ -276,9 +286,11 @@ class RecoverpasswordAction extends Action
# Try to get an unconfirmed email address if they used a user name
if (!$user->email && !$confirm_email) {
- $confirm_email = Confirm_address::staticGet('user_id', $user->id);
- if ($confirm_email && $confirm_email->address_type != 'email') {
- # Skip non-email confirmations
+ $confirm_email = new Confirm_address();
+ $confirm_email->user_id = $user->id;
+ $confirm_email->address_type = 'email';
+ $confirm_email->find();
+ if (!$confirm_email->fetch()) {
$confirm_email = null;
}
}
@@ -294,7 +306,7 @@ class RecoverpasswordAction extends Action
$confirm->code = common_confirmation_code(128);
$confirm->address_type = 'recover';
$confirm->user_id = $user->id;
- $confirm->address = (isset($user->email)) ? $user->email : $confirm_email->address;
+ $confirm->address = (!empty($user->email)) ? $user->email : $confirm_email->address;
if (!$confirm->insert()) {
common_log_db_error($confirm, 'INSERT', __FILE__);
@@ -319,7 +331,8 @@ class RecoverpasswordAction extends Action
$body .= common_config('site', 'name');
$body .= "\n";
- mail_to_user($user, _('Password recovery requested'), $body, $confirm->address);
+ $headers = _mail_prepare_headers('recoverpassword', $user->nickname, $user->nickname);
+ mail_to_user($user, _('Password recovery requested'), $body, $headers, $confirm->address);
$this->mode = 'sent';
$this->msg = _('Instructions for recovering your password ' .
diff --git a/actions/showgroup.php b/actions/showgroup.php
index 5704b13d1..a0d05ba37 100644
--- a/actions/showgroup.php
+++ b/actions/showgroup.php
@@ -221,7 +221,8 @@ class ShowgroupAction extends GroupDesignAction
function showGroupProfile()
{
- $this->elementStart('div', 'entity_profile vcard author');
+ $this->elementStart('div', array('id' => 'i',
+ 'class' => 'entity_profile vcard author'));
$this->element('h2', null, _('Group profile'));
diff --git a/actions/shownotice.php b/actions/shownotice.php
index d0528a9f0..12e1d77f8 100644
--- a/actions/shownotice.php
+++ b/actions/shownotice.php
@@ -103,11 +103,6 @@ class ShownoticeAction extends OwnerDesignAction
$this->user = User::staticGet('id', $this->profile->id);
- if ($this->notice->is_local == Notice::REMOTE_OMB) {
- common_redirect($this->notice->uri);
- return false;
- }
-
$this->avatar = $this->profile->getAvatar(AVATAR_PROFILE_SIZE);
return true;
@@ -172,7 +167,7 @@ class ShownoticeAction extends OwnerDesignAction
function title()
{
if (!empty($this->profile->fullname)) {
- $base = $this->profile->fullname . ' (' . $this->profile->nickname . ') ';
+ $base = $this->profile->fullname . ' (' . $this->profile->nickname . ')';
} else {
$base = $this->profile->nickname;
}
@@ -198,13 +193,20 @@ class ShownoticeAction extends OwnerDesignAction
if ($this->notice->is_local == Notice::REMOTE_OMB) {
if (!empty($this->notice->url)) {
- common_redirect($this->notice->url, 301);
+ $target = $this->notice->url;
} else if (!empty($this->notice->uri) && preg_match('/^https?:/', $this->notice->uri)) {
- common_redirect($this->notice->uri, 301);
+ // Old OMB posts saved the remote URL only into the URI field.
+ $target = $this->notice->uri;
+ } else {
+ // Shouldn't happen.
+ $target = false;
+ }
+ if ($target && $target != $this->selfUrl()) {
+ common_redirect($target, 301);
+ return false;
}
- } else {
- $this->showPage();
}
+ $this->showPage();
}
/**
diff --git a/actions/siteadminpanel.php b/actions/siteadminpanel.php
index cb3c2e8fd..e5482987f 100644
--- a/actions/siteadminpanel.php
+++ b/actions/siteadminpanel.php
@@ -161,8 +161,8 @@ class SiteadminpanelAction extends AdminPanelAction
// Validate text limit
- if (!Validate::number($values['site']['textlimit'], array('min' => 140))) {
- $this->clientError(_("Minimum text limit is 140 characters."));
+ if (!Validate::number($values['site']['textlimit'], array('min' => 0))) {
+ $this->clientError(_("Minimum text limit is 0 (unlimited)."));
}
// Validate dupe limit
diff --git a/actions/sitenoticeadminpanel.php b/actions/sitenoticeadminpanel.php
index 3931aa982..a68cc699c 100644
--- a/actions/sitenoticeadminpanel.php
+++ b/actions/sitenoticeadminpanel.php
@@ -93,7 +93,7 @@ class SitenoticeadminpanelAction extends AdminPanelAction
// assert(all values are valid);
// This throws an exception on validation errors
- $this->validate(&$siteNotice);
+ $this->validate($siteNotice);
$config = new Config();
diff --git a/classes/File.php b/classes/File.php
index 4ecd3b959..33273bbdc 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -67,7 +67,14 @@ class File extends Memcached_DataObject
return $att;
}
- function saveNew($redir_data, $given_url) {
+ /**
+ * Save a new file record.
+ *
+ * @param array $redir_data lookup data eg from File_redirection::where()
+ * @param string $given_url
+ * @return File
+ */
+ function saveNew(array $redir_data, $given_url) {
$x = new File;
$x->url = $given_url;
if (!empty($redir_data['protected'])) $x->protected = $redir_data['protected'];
@@ -77,19 +84,36 @@ class File extends Memcached_DataObject
if (isset($redir_data['time']) && $redir_data['time'] > 0) $x->date = intval($redir_data['time']);
$file_id = $x->insert();
+ $x->saveOembed($redir_data, $given_url);
+ return $x;
+ }
+
+ /**
+ * Save embedding information for this file, if applicable.
+ *
+ * Normally this won't need to be called manually, as File::saveNew()
+ * takes care of it.
+ *
+ * @param array $redir_data lookup data eg from File_redirection::where()
+ * @param string $given_url
+ * @return boolean success
+ */
+ public function saveOembed($redir_data, $given_url)
+ {
if (isset($redir_data['type'])
&& (('text/html' === substr($redir_data['type'], 0, 9) || 'application/xhtml+xml' === substr($redir_data['type'], 0, 21)))
&& ($oembed_data = File_oembed::_getOembed($given_url))) {
- $fo = File_oembed::staticGet('file_id', $file_id);
+ $fo = File_oembed::staticGet('file_id', $this->id);
if (empty($fo)) {
- File_oembed::saveNew($oembed_data, $file_id);
+ File_oembed::saveNew($oembed_data, $this->id);
+ return true;
} else {
common_log(LOG_WARNING, "Strangely, a File_oembed object exists for new file $file_id", __FILE__);
}
}
- return $x;
+ return false;
}
function processNew($given_url, $notice_id=null) {
@@ -105,6 +129,7 @@ class File extends Memcached_DataObject
$redir_url = $redir_data['url'];
} elseif (is_string($redir_data)) {
$redir_url = $redir_data;
+ $redir_data = array();
} else {
throw new ServerException("Can't process url '$given_url'");
}
@@ -260,7 +285,7 @@ class File extends Memcached_DataObject
$enclosure->mimetype=$this->mimetype;
if(! isset($this->filename)){
- $notEnclosureMimeTypes = array('text/html','application/xhtml+xml');
+ $notEnclosureMimeTypes = array(null,'text/html','application/xhtml+xml');
$mimetype = strtolower($this->mimetype);
$semicolon = strpos($mimetype,';');
if($semicolon){
diff --git a/classes/File_oembed.php b/classes/File_oembed.php
index 11f160718..041b44740 100644
--- a/classes/File_oembed.php
+++ b/classes/File_oembed.php
@@ -81,6 +81,12 @@ class File_oembed extends Memcached_DataObject
}
}
+ /**
+ * Save embedding info for a new file.
+ *
+ * @param object $data Services_oEmbed_Object_*
+ * @param int $file_id
+ */
function saveNew($data, $file_id) {
$file_oembed = new File_oembed;
$file_oembed->file_id = $file_id;
diff --git a/classes/File_redirection.php b/classes/File_redirection.php
index 08a6e8d8b..f128b3e07 100644
--- a/classes/File_redirection.php
+++ b/classes/File_redirection.php
@@ -58,24 +58,30 @@ class File_redirection extends Memcached_DataObject
return $request;
}
- function _redirectWhere_imp($short_url, $redirs = 10, $protected = false) {
+ /**
+ * Check if this URL is a redirect and return redir info.
+ *
+ * Most code should call File_redirection::where instead, to check if we
+ * already know that redirection and avoid extra hits to the web.
+ *
+ * The URL is hit and any redirects are followed, up to 10 levels or until
+ * a protected URL is reached.
+ *
+ * @param string $in_url
+ * @return mixed one of:
+ * string - target URL, if this is a direct link or can't be followed
+ * array - redirect info if this is an *unknown* redirect:
+ * associative array with the following elements:
+ * code: HTTP status code
+ * redirects: count of redirects followed
+ * url: URL string of final target
+ * type (optional): MIME type from Content-Type header
+ * size (optional): byte size from Content-Length header
+ * time (optional): timestamp from Last-Modified header
+ */
+ public function lookupWhere($short_url, $redirs = 10, $protected = false) {
if ($redirs < 0) return false;
- // let's see if we know this...
- $a = File::staticGet('url', $short_url);
-
- if (!empty($a)) {
- // this is a direct link to $a->url
- return $a->url;
- } else {
- $b = File_redirection::staticGet('url', $short_url);
- if (!empty($b)) {
- // this is a redirect to $b->file_id
- $a = File::staticGet('id', $b->file_id);
- return $a->url;
- }
- }
-
if(strpos($short_url,'://') === false){
return $short_url;
}
@@ -93,12 +99,13 @@ class File_redirection extends Memcached_DataObject
}
} catch (Exception $e) {
// Invalid URL or failure to reach server
+ common_log(LOG_ERR, "Error while following redirects for $short_url: " . $e->getMessage());
return $short_url;
}
if ($response->getRedirectCount() && File::isProtected($response->getUrl())) {
// Bump back up the redirect chain until we find a non-protected URL
- return self::_redirectWhere_imp($short_url, $response->getRedirectCount() - 1, true);
+ return self::lookupWhere($short_url, $response->getRedirectCount() - 1, true);
}
$ret = array('code' => $response->getStatus()
@@ -115,11 +122,60 @@ class File_redirection extends Memcached_DataObject
return $ret;
}
- function where($in_url) {
- $ret = File_redirection::_redirectWhere_imp($in_url);
+ /**
+ * Check if this URL is a redirect and return redir info.
+ * If a File record is present for this URL, it is not considered a redirect.
+ * If a File_redirection record is present for this URL, the recorded target is returned.
+ *
+ * If no File or File_redirect record is present, the URL is hit and any
+ * redirects are followed, up to 10 levels or until a protected URL is
+ * reached.
+ *
+ * @param string $in_url
+ * @return mixed one of:
+ * string - target URL, if this is a direct link or a known redirect
+ * array - redirect info if this is an *unknown* redirect:
+ * associative array with the following elements:
+ * code: HTTP status code
+ * redirects: count of redirects followed
+ * url: URL string of final target
+ * type (optional): MIME type from Content-Type header
+ * size (optional): byte size from Content-Length header
+ * time (optional): timestamp from Last-Modified header
+ */
+ public function where($in_url) {
+ // let's see if we know this...
+ $a = File::staticGet('url', $in_url);
+
+ if (!empty($a)) {
+ // this is a direct link to $a->url
+ return $a->url;
+ } else {
+ $b = File_redirection::staticGet('url', $in_url);
+ if (!empty($b)) {
+ // this is a redirect to $b->file_id
+ $a = File::staticGet('id', $b->file_id);
+ return $a->url;
+ }
+ }
+
+ $ret = File_redirection::lookupWhere($in_url);
return $ret;
}
+ /**
+ * Shorten a URL with the current user's configured shortening
+ * options, if applicable.
+ *
+ * If it cannot be shortened or the "short" URL is longer than the
+ * original, the original is returned.
+ *
+ * If the referenced item has not been seen before, embedding data
+ * may be saved.
+ *
+ * @param string $long_url
+ * @return string
+ */
function makeShort($long_url) {
$canon = File_redirection::_canonUrl($long_url);
@@ -141,11 +197,20 @@ class File_redirection extends Memcached_DataObject
// store it
$file = File::staticGet('url', $long_url);
if (empty($file)) {
+ // Check if the target URL is itself a redirect...
$redir_data = File_redirection::where($long_url);
- $file = File::saveNew($redir_data, $long_url);
- $file_id = $file->id;
- if (!empty($redir_data['oembed']['json'])) {
- File_oembed::saveNew($redir_data['oembed']['json'], $file_id);
+ if (is_array($redir_data)) {
+ // We haven't seen the target URL before.
+ // Save file and embedding data about it!
+ $file = File::saveNew($redir_data, $long_url);
+ $file_id = $file->id;
+ if (!empty($redir_data['oembed']['json'])) {
+ File_oembed::saveNew($redir_data['oembed']['json'], $file_id);
+ }
+ } else if (is_string($redir_data)) {
+ // The file is a known redirect target.
+ $file = File::staticGet('url', $redir_data);
+ $file_id = $file->id;
}
} else {
$file_id = $file->id;
diff --git a/classes/Foreign_user.php b/classes/Foreign_user.php
index 8b3e03dfb..0dd94ffb9 100644
--- a/classes/Foreign_user.php
+++ b/classes/Foreign_user.php
@@ -41,6 +41,7 @@ class Foreign_user extends Memcached_DataObject
function updateKeys(&$orig)
{
+ $this->_connect();
$parts = array();
foreach (array('id', 'service', 'uri', 'nickname') as $k) {
if (strcmp($this->$k, $orig->$k) != 0) {
diff --git a/classes/Notice.php b/classes/Notice.php
index 4c7e6ab4b..f7194e339 100644
--- a/classes/Notice.php
+++ b/classes/Notice.php
@@ -119,6 +119,9 @@ class Notice extends Memcached_DataObject
// NOTE: we don't clear queue items
$result = parent::delete();
+
+ $this->blowOnDelete();
+ return $result;
}
/**
@@ -421,6 +424,18 @@ class Notice extends Memcached_DataObject
$profile->blowNoticeCount();
}
+ /**
+ * Clear cache entries related to this notice at delete time.
+ * Necessary to avoid breaking paging on public, profile timelines.
+ */
+ function blowOnDelete()
+ {
+ $this->blowOnInsert();
+
+ self::blow('profile:notice_ids:%d;last', $this->profile_id);
+ self::blow('public;last');
+ }
+
/** save all urls in the notice to the db
*
* follow redirects and save all available file information
@@ -589,7 +604,6 @@ class Notice extends Memcached_DataObject
array(),
'public',
$offset, $limit, $since_id, $max_id);
-
return Notice::getStreamByIds($ids);
}
@@ -1128,6 +1142,7 @@ class Notice extends Memcached_DataObject
if ($source) {
$xs->elementStart('source');
+ $xs->element('id', null, $profile->profileurl);
$xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name'));
$xs->element('link', array('href' => $profile->profileurl));
$user = User::staticGet('id', $profile->id);
@@ -1143,13 +1158,14 @@ class Notice extends Memcached_DataObject
}
$xs->element('icon', null, $profile->avatarUrl(AVATAR_PROFILE_SIZE));
+ $xs->element('updated', null, common_date_w3dtf($this->created));
}
if ($source) {
$xs->elementEnd('source');
}
- $xs->element('title', null, $this->content);
+ $xs->element('title', null, common_xml_safe_str($this->content));
if ($author) {
$xs->raw($profile->asAtomAuthor());
@@ -1225,7 +1241,11 @@ class Notice extends Memcached_DataObject
}
}
- $xs->element('content', array('type' => 'html'), $this->rendered);
+ $xs->element(
+ 'content',
+ array('type' => 'html'),
+ common_xml_safe_str($this->rendered)
+ );
$tag = new Notice_tag();
$tag->notice_id = $this->id;
diff --git a/classes/Profile.php b/classes/Profile.php
index 0322c9358..eded1ff71 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -147,14 +147,16 @@ class Profile extends Memcached_DataObject
return ($this->fullname) ? $this->fullname : $this->nickname;
}
- # Get latest notice on or before date; default now
- function getCurrentNotice($dt=null)
+ /**
+ * Get the most recent notice posted by this user, if any.
+ *
+ * @return mixed Notice or null
+ */
+ function getCurrentNotice()
{
$notice = new Notice();
$notice->profile_id = $this->id;
- if ($dt) {
- $notice->whereAdd('created < "' . $dt . '"');
- }
+ // @fixme change this to sort on notice.id only when indexes are updated
$notice->orderBy('created DESC, notice.id DESC');
$notice->limit(1);
if ($notice->find(true)) {
@@ -730,6 +732,9 @@ class Profile extends Memcached_DataObject
function hasRight($right)
{
$result = false;
+ if ($this->hasRole(Profile_role::DELETED)) {
+ return false;
+ }
if (Event::handle('UserRightsCheck', array($this, $right, &$result))) {
switch ($right)
{
diff --git a/classes/Profile_role.php b/classes/Profile_role.php
index d0a0b31f0..e7aa1f0f0 100644
--- a/classes/Profile_role.php
+++ b/classes/Profile_role.php
@@ -53,6 +53,7 @@ class Profile_role extends Memcached_DataObject
const ADMINISTRATOR = 'administrator';
const SANDBOXED = 'sandboxed';
const SILENCED = 'silenced';
+ const DELETED = 'deleted'; // Pending final deletion of notices...
public static function isValid($role)
{
diff --git a/classes/Safe_DataObject.php b/classes/Safe_DataObject.php
index 021f7b506..e926cb0d5 100644
--- a/classes/Safe_DataObject.php
+++ b/classes/Safe_DataObject.php
@@ -43,6 +43,25 @@ class Safe_DataObject extends DB_DataObject
}
/**
+ * Magic function called at clone() time.
+ *
+ * We use this to drop connection with some global resources.
+ * This supports the fairly common pattern where individual
+ * items being read in a loop via a single object are cloned
+ * for individual processing, then fall out of scope when the
+ * loop comes around again.
+ *
+ * As that triggers the destructor, we want to make sure that
+ * the original object doesn't have its database result killed.
+ * It will still be freed properly when the original object
+ * gets destroyed.
+ */
+ function __clone()
+ {
+ $this->_DB_resultid = false;
+ }
+
+ /**
* Magic function called at serialize() time.
*
* We use this to drop a couple process-specific references
@@ -77,6 +96,30 @@ class Safe_DataObject extends DB_DataObject
$this->_link_loaded = false;
}
+ /**
+ * Magic function called when someone attempts to call a method
+ * that doesn't exist. DB_DataObject uses this to implement
+ * setters and getters for fields, but neglects to throw an error
+ * when you just misspell an actual method name. This leads to
+ * silent failures which can cause all kinds of havoc.
+ *
+ * @param string $method
+ * @param array $params
+ * @return mixed
+ * @throws Exception
+ */
+ function __call($method, $params)
+ {
+ $return = null;
+ // Yes, that's _call with one underscore, which does the
+ // actual implementation.
+ if ($this->_call($method, $params, $return)) {
+ return $return;
+ } else {
+ throw new Exception('Call to undefined method ' .
+ get_class($this) . '::' . $method);
+ }
+ }
/**
* Work around memory-leak bugs...
diff --git a/classes/Subscription.php b/classes/Subscription.php
index 9cef2df1a..0679c0925 100644
--- a/classes/Subscription.php
+++ b/classes/Subscription.php
@@ -62,6 +62,14 @@ class Subscription extends Memcached_DataObject
static function start($subscriber, $other)
{
+ // @fixme should we enforce this as profiles in callers instead?
+ if ($subscriber instanceof User) {
+ $subscriber = $subscriber->getProfile();
+ }
+ if ($other instanceof User) {
+ $other = $other->getProfile();
+ }
+
if (!$subscriber->hasRight(Right::SUBSCRIBE)) {
throw new Exception(_('You have been banned from subscribing.'));
}
@@ -75,26 +83,13 @@ class Subscription extends Memcached_DataObject
}
if (Event::handle('StartSubscribe', array($subscriber, $other))) {
-
- $sub = new Subscription();
-
- $sub->subscriber = $subscriber->id;
- $sub->subscribed = $other->id;
- $sub->created = common_sql_now();
-
- $result = $sub->insert();
-
- if (!$result) {
- common_log_db_error($sub, 'INSERT', __FILE__);
- throw new Exception(_('Could not save subscription.'));
- }
-
+ $sub = self::saveNew($subscriber->id, $other->id);
$sub->notify();
self::blow('user:notices_with_friends:%d', $subscriber->id);
- $subscriber->blowSubscriptionsCount();
- $other->blowSubscribersCount();
+ $subscriber->blowSubscriptionCount();
+ $other->blowSubscriberCount();
$otherUser = User::staticGet('id', $other->id);
@@ -103,20 +98,11 @@ class Subscription extends Memcached_DataObject
!self::exists($other, $subscriber) &&
!$subscriber->hasBlocked($other)) {
- $auto = new Subscription();
-
- $auto->subscriber = $subscriber->id;
- $auto->subscribed = $other->id;
- $auto->created = common_sql_now();
-
- $result = $auto->insert();
-
- if (!$result) {
- common_log_db_error($auto, 'INSERT', __FILE__);
- throw new Exception(_('Could not save subscription.'));
+ try {
+ self::start($other, $subscriber);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Exception during autosubscribe of {$other->nickname} to profile {$subscriber->id}: {$e->getMessage()}");
}
-
- $auto->notify();
}
Event::handle('EndSubscribe', array($subscriber, $other));
@@ -125,6 +111,30 @@ class Subscription extends Memcached_DataObject
return true;
}
+ /**
+ * Low-level subscription save.
+ * Outside callers should use Subscription::start()
+ */
+ protected function saveNew($subscriber_id, $other_id)
+ {
+ $sub = new Subscription();
+
+ $sub->subscriber = $subscriber_id;
+ $sub->subscribed = $other_id;
+ $sub->jabber = 1;
+ $sub->sms = 1;
+ $sub->created = common_sql_now();
+
+ $result = $sub->insert();
+
+ if (!$result) {
+ common_log_db_error($sub, 'INSERT', __FILE__);
+ throw new Exception(_('Could not save subscription.'));
+ }
+
+ return $sub;
+ }
+
function notify()
{
# XXX: add other notifications (Jabber, SMS) here
@@ -203,8 +213,8 @@ class Subscription extends Memcached_DataObject
self::blow('user:notices_with_friends:%d', $subscriber->id);
- $subscriber->blowSubscriptionsCount();
- $other->blowSubscribersCount();
+ $subscriber->blowSubscriptionCount();
+ $other->blowSubscriberCount();
Event::handle('EndUnsubscribe', array($subscriber, $other));
}
diff --git a/classes/User.php b/classes/User.php
index 15ec4ad94..1ba940a69 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -70,7 +70,11 @@ class User extends Memcached_DataObject
function getProfile()
{
- return Profile::staticGet('id', $this->id);
+ $profile = Profile::staticGet('id', $this->id);
+ if (empty($profile)) {
+ throw new UserNoProfileException($this);
+ }
+ return $profile;
}
function isSubscribed($other)
@@ -82,6 +86,7 @@ class User extends Memcached_DataObject
function updateKeys(&$orig)
{
+ $this->_connect();
$parts = array();
foreach (array('nickname', 'email', 'incomingemail', 'sms', 'carrier', 'smsemail', 'language', 'timezone') as $k) {
if (strcmp($this->$k, $orig->$k) != 0) {
@@ -127,13 +132,15 @@ class User extends Memcached_DataObject
return !in_array($nickname, $blacklist);
}
- function getCurrentNotice($dt=null)
+ /**
+ * Get the most recent notice posted by this user, if any.
+ *
+ * @return mixed Notice or null
+ */
+ function getCurrentNotice()
{
$profile = $this->getProfile();
- if (!$profile) {
- return null;
- }
- return $profile->getCurrentNotice($dt);
+ return $profile->getCurrentNotice();
}
function getCarrier()
@@ -141,19 +148,12 @@ class User extends Memcached_DataObject
return Sms_carrier::staticGet('id', $this->carrier);
}
+ /**
+ * @deprecated use Subscription::start($sub, $other);
+ */
function subscribeTo($other)
{
- $sub = new Subscription();
- $sub->subscriber = $this->id;
- $sub->subscribed = $other->id;
-
- $sub->created = common_sql_now(); // current time
-
- if (!$sub->insert()) {
- return false;
- }
-
- return true;
+ return Subscription::start($this->getProfile(), $other);
}
function hasBlocked($other)
@@ -334,17 +334,7 @@ class User extends Memcached_DataObject
common_log(LOG_WARNING, sprintf("Default user %s does not exist.", $defnick),
__FILE__);
} else {
- $defsub = new Subscription();
- $defsub->subscriber = $user->id;
- $defsub->subscribed = $defuser->id;
- $defsub->created = $user->created;
-
- $result = $defsub->insert();
-
- if (!$result) {
- common_log_db_error($defsub, 'INSERT', __FILE__);
- return false;
- }
+ Subscription::start($user, $defuser);
}
}
@@ -460,21 +450,13 @@ class User extends Memcached_DataObject
function getTaggedNotices($tag, $offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0) {
$profile = $this->getProfile();
- if (!$profile) {
- return null;
- } else {
- return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id);
- }
+ return $profile->getTaggedNotices($tag, $offset, $limit, $since_id, $before_id);
}
function getNotices($offset=0, $limit=NOTICES_PER_PAGE, $since_id=0, $before_id=0)
{
$profile = $this->getProfile();
- if (!$profile) {
- return null;
- } else {
- return $profile->getNotices($offset, $limit, $since_id, $before_id);
- }
+ return $profile->getNotices($offset, $limit, $since_id, $before_id);
}
function favoriteNotices($offset=0, $limit=NOTICES_PER_PAGE, $own=false)
@@ -615,14 +597,12 @@ class User extends Memcached_DataObject
function getSubscriptions($offset=0, $limit=null)
{
$profile = $this->getProfile();
- assert(!empty($profile));
return $profile->getSubscriptions($offset, $limit);
}
function getSubscribers($offset=0, $limit=null)
{
$profile = $this->getProfile();
- assert(!empty($profile));
return $profile->getSubscribers($offset, $limit);
}
@@ -686,9 +666,7 @@ class User extends Memcached_DataObject
function delete()
{
$profile = $this->getProfile();
- if ($profile) {
- $profile->delete();
- }
+ $profile->delete();
$related = array('Fave',
'Confirm_address',
diff --git a/classes/User_group.php b/classes/User_group.php
index 7be55163a..110f08301 100644
--- a/classes/User_group.php
+++ b/classes/User_group.php
@@ -295,7 +295,7 @@ class User_group extends Memcached_DataObject
}
// If not, check local groups.
-
+
$group = Local_group::staticGet('nickname', $nickname);
if (!empty($group)) {
return User_group::staticGet('id', $group->group_id);
@@ -371,16 +371,15 @@ class User_group extends Memcached_DataObject
if ($source) {
$xs->elementStart('source');
+ $xs->element('id', null, $this->permalink());
$xs->element('title', null, $profile->nickname . " - " . common_config('site', 'name'));
$xs->element('link', array('href' => $this->permalink()));
- }
-
- if ($source) {
+ $xs->element('updated', null, $this->modified);
$xs->elementEnd('source');
}
$xs->element('title', null, $this->nickname);
- $xs->element('summary', null, $this->description);
+ $xs->element('summary', null, common_xml_safe_str($this->description));
$xs->element('link', array('rel' => 'alternate',
'href' => $this->permalink()));
@@ -390,7 +389,11 @@ class User_group extends Memcached_DataObject
$xs->element('published', null, common_date_w3dtf($this->created));
$xs->element('updated', null, common_date_w3dtf($this->modified));
- $xs->element('content', array('type' => 'html'), $this->description);
+ $xs->element(
+ 'content',
+ array('type' => 'html'),
+ common_xml_safe_str($this->description)
+ );
$xs->elementEnd('entry');
@@ -455,7 +458,7 @@ class User_group extends Memcached_DataObject
$group = new User_group();
$group->query('BEGIN');
-
+
if (empty($uri)) {
// fill in later...
$uri = null;
diff --git a/config.php.sample b/config.php.sample
index 75f5c7d55..20de7ffed 100644
--- a/config.php.sample
+++ b/config.php.sample
@@ -197,7 +197,7 @@ $config['sphinx']['port'] = 3312;
//
// $config['twitterimport']['enabled'] = true;
-// Twitter OAuth settings
+// Twitter OAuth settings. Documentation is at http://apiwiki.twitter.com/OAuth-FAQ
// $config['twitter']['consumer_key'] = 'YOURKEY';
// $config['twitter']['consumer_secret'] = 'YOURSECRET';
diff --git a/htaccess.sample b/htaccess.sample
index 37eb8e01e..18a868698 100644
--- a/htaccess.sample
+++ b/htaccess.sample
@@ -5,6 +5,11 @@
RewriteBase /mublog/
+ ## Uncomment these if having trouble with API authentication
+ ## when PHP is running in CGI or FastCGI mode.
+ #RewriteCond %{HTTP:Authorization} ^(.*)
+ #RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
+
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) index.php?p=$1 [L,QSA]
diff --git a/index.php b/index.php
index 65f251bcc..6bfbc11da 100644
--- a/index.php
+++ b/index.php
@@ -37,6 +37,8 @@ define('INSTALLDIR', dirname(__FILE__));
define('STATUSNET', true);
define('LACONICA', true); // compatibility
+require_once INSTALLDIR . '/lib/common.php';
+
$user = null;
$action = null;
@@ -66,69 +68,52 @@ function getPath($req)
*/
function handleError($error)
{
- try {
-
- if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
- return;
- }
+ if ($error->getCode() == DB_DATAOBJECT_ERROR_NODATA) {
+ return;
+ }
- $logmsg = "PEAR error: " . $error->getMessage();
- if ($error instanceof PEAR_Exception && common_config('site', 'logdebug')) {
- $logmsg .= " : ". $error->toText();
- }
- // DB queries often end up with a lot of newlines; merge to a single line
- // for easier grepability...
- $logmsg = str_replace("\n", " ", $logmsg);
- common_log(LOG_ERR, $logmsg);
-
- // @fixme backtrace output should be consistent with exception handling
- if (common_config('site', 'logdebug')) {
- $bt = $error->getTrace();
- foreach ($bt as $n => $line) {
- common_log(LOG_ERR, formatBacktraceLine($n, $line));
- }
- }
- if ($error instanceof DB_DataObject_Error
- || $error instanceof DB_Error
- || ($error instanceof PEAR_Exception && $error->getCode() == -24)
- ) {
- //If we run into a DB error, assume we can't connect to the DB at all
- //so set the current user to null, so we don't try to access the DB
- //while rendering the error page.
- global $_cur;
- $_cur = null;
-
- $msg = sprintf(
- _(
- 'The database for %s isn\'t responding correctly, '.
- 'so the site won\'t work properly. '.
- 'The site admins probably know about the problem, '.
- 'but you can contact them at %s to make sure. '.
- 'Otherwise, wait a few minutes and try again.'
- ),
- common_config('site', 'name'),
- common_config('site', 'email')
- );
- } else {
- $msg = _(
- 'An important error occured, probably related to email setup. '.
- 'Check logfiles for more info..'
- );
+ $logmsg = "PEAR error: " . $error->getMessage();
+ if (common_config('site', 'logdebug')) {
+ $logmsg .= " : ". $error->getDebugInfo();
+ }
+ // DB queries often end up with a lot of newlines; merge to a single line
+ // for easier grepability...
+ $logmsg = str_replace("\n", " ", $logmsg);
+ common_log(LOG_ERR, $logmsg);
+
+ // @fixme backtrace output should be consistent with exception handling
+ if (common_config('site', 'logdebug')) {
+ $bt = $error->getBacktrace();
+ foreach ($bt as $n => $line) {
+ common_log(LOG_ERR, formatBacktraceLine($n, $line));
}
-
- $dac = new DBErrorAction($msg, 500);
- $dac->showPage();
-
- } catch (Exception $e) {
- echo _('An error occurred.');
}
+ if ($error instanceof DB_DataObject_Error
+ || $error instanceof DB_Error
+ ) {
+ $msg = sprintf(
+ _(
+ 'The database for %s isn\'t responding correctly, '.
+ 'so the site won\'t work properly. '.
+ 'The site admins probably know about the problem, '.
+ 'but you can contact them at %s to make sure. '.
+ 'Otherwise, wait a few minutes and try again.'
+ ),
+ common_config('site', 'name'),
+ common_config('site', 'email')
+ );
+ } else {
+ $msg = _(
+ 'An important error occured, probably related to email setup. '.
+ 'Check logfiles for more info..'
+ );
+ }
+
+ $dac = new DBErrorAction($msg, 500);
+ $dac->showPage();
exit(-1);
}
-set_exception_handler('handleError');
-
-require_once INSTALLDIR . '/lib/common.php';
-
/**
* Format a backtrace line for debug output roughly like debug_print_backtrace() does.
* Exceptions already have this built in, but PEAR error objects just give us the array.
@@ -200,7 +185,7 @@ function checkMirror($action_obj, $args)
function isLoginAction($action)
{
- static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp');
+ static $loginActions = array('login', 'recoverpassword', 'api', 'doc', 'register', 'publicxrds', 'otp', 'opensearch');
$login = null;
@@ -253,6 +238,10 @@ function main()
return;
}
+ // For database errors
+
+ PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
+
// Make sure RW database is setup
setupRW();
@@ -335,10 +324,10 @@ function main()
$cac = new ClientErrorAction($cex->getMessage(), $cex->getCode());
$cac->showPage();
} catch (ServerException $sex) { // snort snort guffaw
- $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode());
+ $sac = new ServerErrorAction($sex->getMessage(), $sex->getCode(), $sex);
$sac->showPage();
} catch (Exception $ex) {
- $sac = new ServerErrorAction($ex->getMessage());
+ $sac = new ServerErrorAction($ex->getMessage(), 500, $ex);
$sac->showPage();
}
}
diff --git a/install.php b/install.php
index 929277e5e..9a7e27fa2 100644
--- a/install.php
+++ b/install.php
@@ -483,6 +483,7 @@ function showForm()
$dbRadios .= "<input type=\"radio\" name=\"dbtype\" id=\"dbtype-$type\" value=\"$type\" $checked/> $info[name]<br />\n";
}
}
+
echo<<<E_O_T
</ul>
</dd>
@@ -559,6 +560,11 @@ function showForm()
<input id="admin_email" name="admin_email" value="{$post->value('admin_email')}" />
<p class="form_guide">Optional email address for the initial StatusNet user (administrator)</p>
</li>
+ <li>
+ <label for="admin_updates">Subscribe to announcements</label>
+ <input type="checkbox" id="admin_updates" name="admin_updates" value="true" checked="checked" />
+ <p class="form_guide">Release and security feed from <a href="http://update.status.net/">update@status.net</a> (recommended)</p>
+ </li>
</ul>
</fieldset>
<input type="submit" name="submit" class="submit" value="Submit" />
@@ -583,10 +589,11 @@ function handlePost()
$sitename = $_POST['sitename'];
$fancy = !empty($_POST['fancy']);
- $adminNick = $_POST['admin_nickname'];
+ $adminNick = strtolower($_POST['admin_nickname']);
$adminPass = $_POST['admin_password'];
$adminPass2 = $_POST['admin_password2'];
$adminEmail = $_POST['admin_email'];
+ $adminUpdates = $_POST['admin_updates'];
$server = $_SERVER['HTTP_HOST'];
$path = substr(dirname($_SERVER['PHP_SELF']), 1);
@@ -623,6 +630,19 @@ STR;
updateStatus("No initial StatusNet user nickname specified.", true);
$fail = true;
}
+ if ($adminNick && !preg_match('/^[0-9a-z]{1,64}$/', $adminNick)) {
+ updateStatus('The user nickname "' . htmlspecialchars($adminNick) .
+ '" is invalid; should be plain letters and numbers no longer than 64 characters.', true);
+ $fail = true;
+ }
+ // @fixme hardcoded list; should use User::allowed_nickname()
+ // if/when it's safe to have loaded the infrastructure here
+ $blacklist = array('main', 'admin', 'twitter', 'settings', 'rsd.xml', 'favorited', 'featured', 'favoritedrss', 'featuredrss', 'rss', 'getfile', 'api', 'groups', 'group', 'peopletag', 'tag', 'user', 'message', 'conversation', 'bookmarklet', 'notice', 'attachment', 'search', 'index.php', 'doc', 'opensearch', 'robots.txt', 'xd_receiver.html', 'facebook');
+ if (in_array($adminNick, $blacklist)) {
+ updateStatus('The user nickname "' . htmlspecialchars($adminNick) .
+ '" is reserved.', true);
+ $fail = true;
+ }
if (empty($adminPass)) {
updateStatus("No initial StatusNet user password specified.", true);
@@ -657,7 +677,7 @@ STR;
}
// Okay, cross fingers and try to register an initial user
- if (registerInitialUser($adminNick, $adminPass, $adminEmail)) {
+ if (registerInitialUser($adminNick, $adminPass, $adminEmail, $adminUpdates)) {
updateStatus(
"An initial user with the administrator role has been created."
);
@@ -854,7 +874,7 @@ function runDbScript($filename, $conn, $type = 'mysqli')
return true;
}
-function registerInitialUser($nickname, $password, $email)
+function registerInitialUser($nickname, $password, $email, $adminUpdates)
{
define('STATUSNET', true);
define('LACONICA', true); // compatibility
@@ -882,7 +902,7 @@ function registerInitialUser($nickname, $password, $email)
// Attempt to do a remote subscribe to update@status.net
// Will fail if instance is on a private network.
- if (class_exists('Ostatus_profile')) {
+ if (class_exists('Ostatus_profile') && $adminUpdates) {
try {
$oprofile = Ostatus_profile::ensureProfile('http://update.status.net/');
Subscription::start($user->getProfile(), $oprofile->localProfile());
diff --git a/js/util.js b/js/util.js
index 3efda0d7b..60eeb418f 100644
--- a/js/util.js
+++ b/js/util.js
@@ -61,10 +61,8 @@ var SN = { // StatusNet
U: { // Utils
FormNoticeEnhancements: function(form) {
- form_id = form.attr('id');
-
if (jQuery.data(form[0], 'ElementData') === undefined) {
- MaxLength = $('#'+form_id+' #'+SN.C.S.NoticeTextCount).text();
+ MaxLength = form.find('#'+SN.C.S.NoticeTextCount).text();
if (typeof(MaxLength) == 'undefined') {
MaxLength = SN.C.I.MaxLength;
}
@@ -72,7 +70,7 @@ var SN = { // StatusNet
SN.U.Counter(form);
- NDT = $('#'+form_id+' #'+SN.C.S.NoticeDataText);
+ NDT = form.find('#'+SN.C.S.NoticeDataText);
NDT.bind('keyup', function(e) {
SN.U.Counter(form);
@@ -83,11 +81,11 @@ var SN = { // StatusNet
});
}
else {
- $('#'+form_id+' #'+SN.C.S.NoticeTextCount).text(jQuery.data(form[0], 'ElementData').MaxLength);
+ form.find('#'+SN.C.S.NoticeTextCount).text(jQuery.data(form[0], 'ElementData').MaxLength);
}
- if ($('body')[0].id != 'conversation') {
- $('#'+form_id+' textarea').focus();
+ if ($('body')[0].id != 'conversation' && window.location.hash.length === 0) {
+ form.find('textarea').focus();
}
},
@@ -105,7 +103,6 @@ var SN = { // StatusNet
Counter: function(form) {
SN.C.I.FormNoticeCurrent = form;
- form_id = form.attr('id');
var MaxLength = jQuery.data(form[0], 'ElementData').MaxLength;
@@ -113,8 +110,8 @@ var SN = { // StatusNet
return;
}
- var remaining = MaxLength - $('#'+form_id+' #'+SN.C.S.NoticeDataText).val().length;
- var counter = $('#'+form_id+' #'+SN.C.S.NoticeTextCount);
+ var remaining = MaxLength - form.find('#'+SN.C.S.NoticeDataText).val().length;
+ var counter = form.find('#'+SN.C.S.NoticeTextCount);
if (remaining.toString() != counter.text()) {
if (!SN.C.I.CounterBlackout || remaining === 0) {
@@ -174,7 +171,6 @@ var SN = { // StatusNet
FormNoticeXHR: function(form) {
SN.C.I.NoticeDataGeo = {};
- form_id = form.attr('id');
form.append('<input type="hidden" name="ajax" value="1"/>');
form.ajaxForm({
dataType: 'xml',
@@ -403,58 +399,71 @@ var SN = { // StatusNet
return;
}
- $.fn.jOverlay.options = {
- method : 'GET',
- data : '',
- url : '',
- color : '#000',
- opacity : '0.6',
- zIndex : 9999,
- center : false,
- imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif',
- bgClickToClose : true,
- success : function() {
- $('#jOverlayContent').append('<button class="close">&#215;</button>');
- $('#jOverlayContent button').click($.closeOverlay);
- },
- timeout : 0,
- autoHide : true,
- css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'}
- };
-
- notice.find('a.attachment').click(function() {
- var attachId = ($(this).attr('id').substring('attachment'.length + 1));
- if (attachId) {
- $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'});
- return false;
- }
- });
+ var attachment_more = notice.find('.attachment.more');
+ if (attachment_more.length > 0) {
+ attachment_more.click(function() {
+ $(this).addClass(SN.C.S.Processing);
+ $.get($(this).attr('href')+'/ajax', null, function(data) {
+ notice.find('.entry-title .entry-content').html($(data).find('#attachment_view .entry-content').html());
+ });
- if ($('#shownotice').length == 0) {
- var t;
- notice.find('a.thumbnail').hover(
- function() {
- var anchor = $(this);
- $('a.thumbnail').children('img').hide();
- anchor.closest(".entry-title").addClass('ov');
-
- if (anchor.children('img').length === 0) {
- t = setTimeout(function() {
- $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) {
- anchor.append(data);
- });
- }, 500);
- }
- else {
- anchor.children('img').show();
- }
+ return false;
+ });
+ }
+ else {
+ $.fn.jOverlay.options = {
+ method : 'GET',
+ data : '',
+ url : '',
+ color : '#000',
+ opacity : '0.6',
+ zIndex : 9999,
+ center : false,
+ imgLoading : $('address .url')[0].href+'theme/base/images/illustrations/illu_progress_loading-01.gif',
+ bgClickToClose : true,
+ success : function() {
+ $('#jOverlayContent').append('<button class="close">&#215;</button>');
+ $('#jOverlayContent button').click($.closeOverlay);
},
- function() {
- clearTimeout(t);
- $('a.thumbnail').children('img').hide();
- $(this).closest('.entry-title').removeClass('ov');
+ timeout : 0,
+ autoHide : true,
+ css : {'max-width':'542px', 'top':'5%', 'left':'32.5%'}
+ };
+
+ notice.find('a.attachment').click(function() {
+ var attachId = ($(this).attr('id').substring('attachment'.length + 1));
+ if (attachId) {
+ $().jOverlay({url: $('address .url')[0].href+'attachment/' + attachId + '/ajax'});
+ return false;
}
- );
+ });
+
+ if ($('#shownotice').length == 0) {
+ var t;
+ notice.find('a.thumbnail').hover(
+ function() {
+ var anchor = $(this);
+ $('a.thumbnail').children('img').hide();
+ anchor.closest(".entry-title").addClass('ov');
+
+ if (anchor.children('img').length === 0) {
+ t = setTimeout(function() {
+ $.get($('address .url')[0].href+'attachment/' + (anchor.attr('id').substring('attachment'.length + 1)) + '/thumbnail', null, function(data) {
+ anchor.append(data);
+ });
+ }, 500);
+ }
+ else {
+ anchor.children('img').show();
+ }
+ },
+ function() {
+ clearTimeout(t);
+ $('a.thumbnail').children('img').hide();
+ $(this).closest('.entry-title').removeClass('ov');
+ }
+ );
+ }
}
},
diff --git a/lib/action.php b/lib/action.php
index 10394c789..491d7d481 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -798,11 +798,14 @@ class Action extends HTMLOutputter // lawsuit
{
$this->element('dt', array('id' => 'site_statusnet_license'), _('StatusNet software license'));
$this->elementStart('dd', null);
+ // @fixme drop the final spaces in the messages when at good spot
+ // to let translations get updated.
if (common_config('site', 'broughtby')) {
$instr = _('**%%site.name%%** is a microblogging service brought to you by [%%site.broughtby%%](%%site.broughtbyurl%%). ');
} else {
$instr = _('**%%site.name%%** is a microblogging service. ');
}
+ $instr .= ' ';
$instr .= sprintf(_('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).'), STATUSNET_VERSION);
$output = common_markup_to_html($instr);
$this->raw($output);
diff --git a/lib/activity.php b/lib/activity.php
index 2cb80f9e1..bd1d5d56c 100644
--- a/lib/activity.php
+++ b/lib/activity.php
@@ -32,971 +32,6 @@ if (!defined('STATUSNET')) {
exit(1);
}
-class PoCoURL
-{
- const URLS = 'urls';
- const TYPE = 'type';
- const VALUE = 'value';
- const PRIMARY = 'primary';
-
- public $type;
- public $value;
- public $primary;
-
- function __construct($type, $value, $primary = false)
- {
- $this->type = $type;
- $this->value = $value;
- $this->primary = $primary;
- }
-
- function asString()
- {
- $xs = new XMLStringer(true);
- $xs->elementStart('poco:urls');
- $xs->element('poco:type', null, $this->type);
- $xs->element('poco:value', null, $this->value);
- if (!empty($this->primary)) {
- $xs->element('poco:primary', null, 'true');
- }
- $xs->elementEnd('poco:urls');
- return $xs->getString();
- }
-}
-
-class PoCoAddress
-{
- const ADDRESS = 'address';
- const FORMATTED = 'formatted';
-
- public $formatted;
-
- // @todo Other address fields
-
- function asString()
- {
- if (!empty($this->formatted)) {
- $xs = new XMLStringer(true);
- $xs->elementStart('poco:address');
- $xs->element('poco:formatted', null, $this->formatted);
- $xs->elementEnd('poco:address');
- return $xs->getString();
- }
-
- return null;
- }
-}
-
-class PoCo
-{
- const NS = 'http://portablecontacts.net/spec/1.0';
-
- const USERNAME = 'preferredUsername';
- const DISPLAYNAME = 'displayName';
- const NOTE = 'note';
-
- public $preferredUsername;
- public $displayName;
- public $note;
- public $address;
- public $urls = array();
-
- function __construct($element = null)
- {
- if (empty($element)) {
- return;
- }
-
- $this->preferredUsername = ActivityUtils::childContent(
- $element,
- self::USERNAME,
- self::NS
- );
-
- $this->displayName = ActivityUtils::childContent(
- $element,
- self::DISPLAYNAME,
- self::NS
- );
-
- $this->note = ActivityUtils::childContent(
- $element,
- self::NOTE,
- self::NS
- );
-
- $this->address = $this->_getAddress($element);
- $this->urls = $this->_getURLs($element);
- }
-
- private function _getURLs($element)
- {
- $urlEls = $element->getElementsByTagnameNS(self::NS, PoCoURL::URLS);
- $urls = array();
-
- foreach ($urlEls as $urlEl) {
-
- $type = ActivityUtils::childContent(
- $urlEl,
- PoCoURL::TYPE,
- PoCo::NS
- );
-
- $value = ActivityUtils::childContent(
- $urlEl,
- PoCoURL::VALUE,
- PoCo::NS
- );
-
- $primary = ActivityUtils::childContent(
- $urlEl,
- PoCoURL::PRIMARY,
- PoCo::NS
- );
-
- $isPrimary = false;
-
- if (isset($primary) && $primary == 'true') {
- $isPrimary = true;
- }
-
- // @todo check to make sure a primary hasn't already been added
-
- array_push($urls, new PoCoURL($type, $value, $isPrimary));
- }
- return $urls;
- }
-
- private function _getAddress($element)
- {
- $addressEl = ActivityUtils::child(
- $element,
- PoCoAddress::ADDRESS,
- PoCo::NS
- );
-
- if (!empty($addressEl)) {
- $formatted = ActivityUtils::childContent(
- $addressEl,
- PoCoAddress::FORMATTED,
- self::NS
- );
-
- if (!empty($formatted)) {
- $address = new PoCoAddress();
- $address->formatted = $formatted;
- return $address;
- }
- }
-
- return null;
- }
-
- function fromProfile($profile)
- {
- if (empty($profile)) {
- return null;
- }
-
- $poco = new PoCo();
-
- $poco->preferredUsername = $profile->nickname;
- $poco->displayName = $profile->getBestName();
-
- $poco->note = $profile->bio;
-
- $paddy = new PoCoAddress();
- $paddy->formatted = $profile->location;
- $poco->address = $paddy;
-
- if (!empty($profile->homepage)) {
- array_push(
- $poco->urls,
- new PoCoURL(
- 'homepage',
- $profile->homepage,
- true
- )
- );
- }
-
- return $poco;
- }
-
- function fromGroup($group)
- {
- if (empty($group)) {
- return null;
- }
-
- $poco = new PoCo();
-
- $poco->preferredUsername = $group->nickname;
- $poco->displayName = $group->getBestName();
-
- $poco->note = $group->description;
-
- $paddy = new PoCoAddress();
- $paddy->formatted = $group->location;
- $poco->address = $paddy;
-
- if (!empty($group->homepage)) {
- array_push(
- $poco->urls,
- new PoCoURL(
- 'homepage',
- $group->homepage,
- true
- )
- );
- }
-
- return $poco;
- }
-
- function getPrimaryURL()
- {
- foreach ($this->urls as $url) {
- if ($url->primary) {
- return $url;
- }
- }
- }
-
- function asString()
- {
- $xs = new XMLStringer(true);
- $xs->element(
- 'poco:preferredUsername',
- null,
- $this->preferredUsername
- );
-
- $xs->element(
- 'poco:displayName',
- null,
- $this->displayName
- );
-
- if (!empty($this->note)) {
- $xs->element('poco:note', null, $this->note);
- }
-
- if (!empty($this->address)) {
- $xs->raw($this->address->asString());
- }
-
- foreach ($this->urls as $url) {
- $xs->raw($url->asString());
- }
-
- return $xs->getString();
- }
-}
-
-/**
- * Utilities for turning DOMish things into Activityish things
- *
- * Some common functions that I didn't have the bandwidth to try to factor
- * into some kind of reasonable superclass, so just dumped here. Might
- * be useful to have an ActivityObject parent class or something.
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityUtils
-{
- const ATOM = 'http://www.w3.org/2005/Atom';
-
- const LINK = 'link';
- const REL = 'rel';
- const TYPE = 'type';
- const HREF = 'href';
-
- const CONTENT = 'content';
- const SRC = 'src';
-
- /**
- * Get the permalink for an Activity object
- *
- * @param DOMElement $element A DOM element
- *
- * @return string related link, if any
- */
-
- static function getPermalink($element)
- {
- return self::getLink($element, 'alternate', 'text/html');
- }
-
- /**
- * Get the permalink for an Activity object
- *
- * @param DOMElement $element A DOM element
- *
- * @return string related link, if any
- */
-
- static function getLink(DOMNode $element, $rel, $type=null)
- {
- $els = $element->childNodes;
-
- foreach ($els as $link) {
- if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
-
- $linkRel = $link->getAttribute(self::REL);
- $linkType = $link->getAttribute(self::TYPE);
-
- if ($linkRel == $rel &&
- (is_null($type) || $linkType == $type)) {
- return $link->getAttribute(self::HREF);
- }
- }
- }
-
- return null;
- }
-
- static function getLinks(DOMNode $element, $rel, $type=null)
- {
- $els = $element->childNodes;
- $out = array();
-
- foreach ($els as $link) {
- if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
-
- $linkRel = $link->getAttribute(self::REL);
- $linkType = $link->getAttribute(self::TYPE);
-
- if ($linkRel == $rel &&
- (is_null($type) || $linkType == $type)) {
- $out[] = $link;
- }
- }
- }
-
- return $out;
- }
-
- /**
- * Gets the first child element with the given tag
- *
- * @param DOMElement $element element to pick at
- * @param string $tag tag to look for
- * @param string $namespace Namespace to look under
- *
- * @return DOMElement found element or null
- */
-
- static function child(DOMNode $element, $tag, $namespace=self::ATOM)
- {
- $els = $element->childNodes;
- if (empty($els) || $els->length == 0) {
- return null;
- } else {
- for ($i = 0; $i < $els->length; $i++) {
- $el = $els->item($i);
- if ($el->localName == $tag && $el->namespaceURI == $namespace) {
- return $el;
- }
- }
- }
- }
-
- /**
- * Grab the text content of a DOM element child of the current element
- *
- * @param DOMElement $element Element whose children we examine
- * @param string $tag Tag to look up
- * @param string $namespace Namespace to use, defaults to Atom
- *
- * @return string content of the child
- */
-
- static function childContent(DOMNode $element, $tag, $namespace=self::ATOM)
- {
- $el = self::child($element, $tag, $namespace);
-
- if (empty($el)) {
- return null;
- } else {
- return $el->textContent;
- }
- }
-
- /**
- * Get the content of an atom:entry-like object
- *
- * @param DOMElement $element The element to examine.
- *
- * @return string unencoded HTML content of the element, like "This -&lt; is <b>HTML</b>."
- *
- * @todo handle remote content
- * @todo handle embedded XML mime types
- * @todo handle base64-encoded non-XML and non-text mime types
- */
-
- static function getContent($element)
- {
- $contentEl = ActivityUtils::child($element, self::CONTENT);
-
- if (!empty($contentEl)) {
-
- $src = $contentEl->getAttribute(self::SRC);
-
- if (!empty($src)) {
- throw new ClientException(_("Can't handle remote content yet."));
- }
-
- $type = $contentEl->getAttribute(self::TYPE);
-
- // slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3
-
- if ($type == 'text') {
- return $contentEl->textContent;
- } else if ($type == 'html') {
- $text = $contentEl->textContent;
- return htmlspecialchars_decode($text, ENT_QUOTES);
- } else if ($type == 'xhtml') {
- $divEl = ActivityUtils::child($contentEl, 'div');
- if (empty($divEl)) {
- return null;
- }
- $doc = $divEl->ownerDocument;
- $text = '';
- $children = $divEl->childNodes;
-
- for ($i = 0; $i < $children->length; $i++) {
- $child = $children->item($i);
- $text .= $doc->saveXML($child);
- }
- return trim($text);
- } else if (in_array(array('text/xml', 'application/xml'), $type) ||
- preg_match('#(+|/)xml$#', $type)) {
- throw new ClientException(_("Can't handle embedded XML content yet."));
- } else if (strncasecmp($type, 'text/', 5)) {
- return $contentEl->textContent;
- } else {
- throw new ClientException(_("Can't handle embedded Base64 content yet."));
- }
- }
- }
-}
-
-// XXX: Arg! This wouldn't be necessary if we used Avatars conistently
-class AvatarLink
-{
- public $url;
- public $type;
- public $size;
- public $width;
- public $height;
-
- function __construct($element=null)
- {
- if ($element) {
- // @fixme use correct namespaces
- $this->url = $element->getAttribute('href');
- $this->type = $element->getAttribute('type');
- $width = $element->getAttribute('media:width');
- if ($width != null) {
- $this->width = intval($width);
- }
- $height = $element->getAttribute('media:height');
- if ($height != null) {
- $this->height = intval($height);
- }
- }
- }
-
- static function fromAvatar($avatar)
- {
- if (empty($avatar)) {
- return null;
- }
- $alink = new AvatarLink();
- $alink->type = $avatar->mediatype;
- $alink->height = $avatar->height;
- $alink->width = $avatar->width;
- $alink->url = $avatar->displayUrl();
- return $alink;
- }
-
- static function fromFilename($filename, $size)
- {
- $alink = new AvatarLink();
- $alink->url = $filename;
- $alink->height = $size;
- if (!empty($filename)) {
- $alink->width = $size;
- $alink->type = self::mediatype($filename);
- } else {
- $alink->url = User_group::defaultLogo($size);
- $alink->type = 'image/png';
- }
- return $alink;
- }
-
- // yuck!
- static function mediatype($filename) {
- $ext = strtolower(end(explode('.', $filename)));
- if ($ext == 'jpeg') {
- $ext = 'jpg';
- }
- // hope we don't support any others
- $types = array('png', 'gif', 'jpg', 'jpeg');
- if (in_array($ext, $types)) {
- return 'image/' . $ext;
- }
- return null;
- }
-}
-
-/**
- * A noun-ish thing in the activity universe
- *
- * The activity streams spec talks about activity objects, while also having
- * a tag activity:object, which is in fact an activity object. Aaaaaah!
- *
- * This is just a thing in the activity universe. Can be the subject, object,
- * or indirect object (target!) of an activity verb. Rotten name, and I'm
- * propagating it. *sigh*
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityObject
-{
- const ARTICLE = 'http://activitystrea.ms/schema/1.0/article';
- const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry';
- const NOTE = 'http://activitystrea.ms/schema/1.0/note';
- const STATUS = 'http://activitystrea.ms/schema/1.0/status';
- const FILE = 'http://activitystrea.ms/schema/1.0/file';
- const PHOTO = 'http://activitystrea.ms/schema/1.0/photo';
- const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album';
- const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist';
- const VIDEO = 'http://activitystrea.ms/schema/1.0/video';
- const AUDIO = 'http://activitystrea.ms/schema/1.0/audio';
- const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark';
- const PERSON = 'http://activitystrea.ms/schema/1.0/person';
- const GROUP = 'http://activitystrea.ms/schema/1.0/group';
- const PLACE = 'http://activitystrea.ms/schema/1.0/place';
- const COMMENT = 'http://activitystrea.ms/schema/1.0/comment';
- // ^^^^^^^^^^ tea!
-
- // Atom elements we snarf
-
- const TITLE = 'title';
- const SUMMARY = 'summary';
- const ID = 'id';
- const SOURCE = 'source';
-
- const NAME = 'name';
- const URI = 'uri';
- const EMAIL = 'email';
-
- public $element;
- public $type;
- public $id;
- public $title;
- public $summary;
- public $content;
- public $link;
- public $source;
- public $avatarLinks = array();
- public $geopoint;
- public $poco;
- public $displayName;
-
- /**
- * Constructor
- *
- * This probably needs to be refactored
- * to generate a local class (ActivityPerson, ActivityFile, ...)
- * based on the object type.
- *
- * @param DOMElement $element DOM thing to turn into an Activity thing
- */
-
- function __construct($element = null)
- {
- if (empty($element)) {
- return;
- }
-
- $this->element = $element;
-
- $this->geopoint = $this->_childContent(
- $element,
- ActivityContext::POINT,
- ActivityContext::GEORSS
- );
-
- if ($element->tagName == 'author') {
-
- $this->type = self::PERSON; // XXX: is this fair?
- $this->title = $this->_childContent($element, self::NAME);
- $this->id = $this->_childContent($element, self::URI);
-
- if (empty($this->id)) {
- $email = $this->_childContent($element, self::EMAIL);
- if (!empty($email)) {
- // XXX: acct: ?
- $this->id = 'mailto:'.$email;
- }
- }
-
- } else {
-
- $this->type = $this->_childContent($element, Activity::OBJECTTYPE,
- Activity::SPEC);
-
- if (empty($this->type)) {
- $this->type = ActivityObject::NOTE;
- }
-
- $this->id = $this->_childContent($element, self::ID);
- $this->title = $this->_childContent($element, self::TITLE);
- $this->summary = $this->_childContent($element, self::SUMMARY);
-
- $this->source = $this->_getSource($element);
-
- $this->content = ActivityUtils::getContent($element);
-
- $this->link = ActivityUtils::getPermalink($element);
-
- }
-
- // Some per-type attributes...
- if ($this->type == self::PERSON || $this->type == self::GROUP) {
- $this->displayName = $this->title;
-
- $avatars = ActivityUtils::getLinks($element, 'avatar');
- foreach ($avatars as $link) {
- $this->avatarLinks[] = new AvatarLink($link);
- }
-
- $this->poco = new PoCo($element);
- }
- }
-
- private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM)
- {
- return ActivityUtils::childContent($element, $tag, $namespace);
- }
-
- // Try to get a unique id for the source feed
-
- private function _getSource($element)
- {
- $sourceEl = ActivityUtils::child($element, 'source');
-
- if (empty($sourceEl)) {
- return null;
- } else {
- $href = ActivityUtils::getLink($sourceEl, 'self');
- if (!empty($href)) {
- return $href;
- } else {
- return ActivityUtils::childContent($sourceEl, 'id');
- }
- }
- }
-
- static function fromNotice($notice)
- {
- $object = new ActivityObject();
-
- $object->type = ActivityObject::NOTE;
-
- $object->id = $notice->uri;
- $object->title = $notice->content;
- $object->content = $notice->rendered;
- $object->link = $notice->bestUrl();
-
- return $object;
- }
-
- static function fromProfile($profile)
- {
- $object = new ActivityObject();
-
- $object->type = ActivityObject::PERSON;
- $object->id = $profile->getUri();
- $object->title = $profile->getBestName();
- $object->link = $profile->profileurl;
-
- $orig = $profile->getOriginalAvatar();
-
- if (!empty($orig)) {
- $object->avatarLinks[] = AvatarLink::fromAvatar($orig);
- }
-
- $sizes = array(
- AVATAR_PROFILE_SIZE,
- AVATAR_STREAM_SIZE,
- AVATAR_MINI_SIZE
- );
-
- foreach ($sizes as $size) {
-
- $alink = null;
- $avatar = $profile->getAvatar($size);
-
- if (!empty($avatar)) {
- $alink = AvatarLink::fromAvatar($avatar);
- } else {
- $alink = new AvatarLink();
- $alink->type = 'image/png';
- $alink->height = $size;
- $alink->width = $size;
- $alink->url = Avatar::defaultImage($size);
- }
-
- $object->avatarLinks[] = $alink;
- }
-
- if (isset($profile->lat) && isset($profile->lon)) {
- $object->geopoint = (float)$profile->lat
- . ' ' . (float)$profile->lon;
- }
-
- $object->poco = PoCo::fromProfile($profile);
-
- return $object;
- }
-
- static function fromGroup($group)
- {
- $object = new ActivityObject();
-
- $object->type = ActivityObject::GROUP;
- $object->id = $group->getUri();
- $object->title = $group->getBestName();
- $object->link = $group->getUri();
-
- $object->avatarLinks[] = AvatarLink::fromFilename(
- $group->homepage_logo,
- AVATAR_PROFILE_SIZE
- );
-
- $object->avatarLinks[] = AvatarLink::fromFilename(
- $group->stream_logo,
- AVATAR_STREAM_SIZE
- );
-
- $object->avatarLinks[] = AvatarLink::fromFilename(
- $group->mini_logo,
- AVATAR_MINI_SIZE
- );
-
- $object->poco = PoCo::fromGroup($group);
-
- return $object;
- }
-
-
- function asString($tag='activity:object')
- {
- $xs = new XMLStringer(true);
-
- $xs->elementStart($tag);
-
- $xs->element('activity:object-type', null, $this->type);
-
- $xs->element(self::ID, null, $this->id);
-
- if (!empty($this->title)) {
- $xs->element(self::TITLE, null, $this->title);
- }
-
- if (!empty($this->summary)) {
- $xs->element(self::SUMMARY, null, $this->summary);
- }
-
- if (!empty($this->content)) {
- // XXX: assuming HTML content here
- $xs->element(ActivityUtils::CONTENT, array('type' => 'html'), $this->content);
- }
-
- if (!empty($this->link)) {
- $xs->element(
- 'link',
- array(
- 'rel' => 'alternate',
- 'type' => 'text/html',
- 'href' => $this->link
- ),
- null
- );
- }
-
- if ($this->type == ActivityObject::PERSON
- || $this->type == ActivityObject::GROUP) {
-
- foreach ($this->avatarLinks as $avatar) {
- $xs->element(
- 'link', array(
- 'rel' => 'avatar',
- 'type' => $avatar->type,
- 'media:width' => $avatar->width,
- 'media:height' => $avatar->height,
- 'href' => $avatar->url
- ),
- null
- );
- }
- }
-
- if (!empty($this->geopoint)) {
- $xs->element(
- 'georss:point',
- null,
- $this->geopoint
- );
- }
-
- if (!empty($this->poco)) {
- $xs->raw($this->poco->asString());
- }
-
- $xs->elementEnd($tag);
-
- return $xs->getString();
- }
-}
-
-/**
- * Utility class to hold a bunch of constant defining default verb types
- *
- * @category OStatus
- * @package StatusNet
- * @author Evan Prodromou <evan@status.net>
- * @copyright 2010 StatusNet, Inc.
- * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
- * @link http://status.net/
- */
-
-class ActivityVerb
-{
- const POST = 'http://activitystrea.ms/schema/1.0/post';
- const SHARE = 'http://activitystrea.ms/schema/1.0/share';
- const SAVE = 'http://activitystrea.ms/schema/1.0/save';
- const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite';
- const PLAY = 'http://activitystrea.ms/schema/1.0/play';
- const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow';
- const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend';
- const JOIN = 'http://activitystrea.ms/schema/1.0/join';
- const TAG = 'http://activitystrea.ms/schema/1.0/tag';
-
- // Custom OStatus verbs for the flipside until they're standardized
- const DELETE = 'http://ostatus.org/schema/1.0/unfollow';
- const UNFAVORITE = 'http://ostatus.org/schema/1.0/unfavorite';
- const UNFOLLOW = 'http://ostatus.org/schema/1.0/unfollow';
- const LEAVE = 'http://ostatus.org/schema/1.0/leave';
-
- // For simple profile-update pings; no content to share.
- const UPDATE_PROFILE = 'http://ostatus.org/schema/1.0/update-profile';
-}
-
-class ActivityContext
-{
- public $replyToID;
- public $replyToUrl;
- public $location;
- public $attention = array();
- public $conversation;
-
- const THR = 'http://purl.org/syndication/thread/1.0';
- const GEORSS = 'http://www.georss.org/georss';
- const OSTATUS = 'http://ostatus.org/schema/1.0';
-
- const INREPLYTO = 'in-reply-to';
- const REF = 'ref';
- const HREF = 'href';
-
- const POINT = 'point';
-
- const ATTENTION = 'ostatus:attention';
- const CONVERSATION = 'ostatus:conversation';
-
- function __construct($element)
- {
- $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR);
-
- if (!empty($replyToEl)) {
- $this->replyToID = $replyToEl->getAttribute(self::REF);
- $this->replyToUrl = $replyToEl->getAttribute(self::HREF);
- }
-
- $this->location = $this->getLocation($element);
-
- $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
-
- // Multiple attention links allowed
-
- $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK);
-
- for ($i = 0; $i < $links->length; $i++) {
-
- $link = $links->item($i);
-
- $linkRel = $link->getAttribute(ActivityUtils::REL);
-
- if ($linkRel == self::ATTENTION) {
- $this->attention[] = $link->getAttribute(self::HREF);
- }
- }
- }
-
- /**
- * Parse location given as a GeoRSS-simple point, if provided.
- * http://www.georss.org/simple
- *
- * @param feed item $entry
- * @return mixed Location or false
- */
- function getLocation($dom)
- {
- $points = $dom->getElementsByTagNameNS(self::GEORSS, self::POINT);
-
- for ($i = 0; $i < $points->length; $i++) {
- $point = $points->item($i)->textContent;
- return self::locationFromPoint($point);
- }
-
- return null;
- }
-
- // XXX: Move to ActivityUtils or Location?
- static function locationFromPoint($point)
- {
- $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
- $point = preg_replace('/\s+/', ' ', $point);
- $point = trim($point);
- $coords = explode(' ', $point);
- if (count($coords) == 2) {
- list($lat, $lon) = $coords;
- if (is_numeric($lat) && is_numeric($lon)) {
- common_log(LOG_INFO, "Looking up location for $lat $lon from georss point");
- return Location::fromLatLon($lat, $lon);
- }
- }
- common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
- return null;
- }
-}
-
/**
* An activity in the ActivityStrea.ms world
*
@@ -1033,6 +68,21 @@ class Activity
const PUBLISHED = 'published';
const UPDATED = 'updated';
+ const RSS = null; // no namespace!
+
+ const PUBDATE = 'pubDate';
+ const DESCRIPTION = 'description';
+ const GUID = 'guid';
+ const SELF = 'self';
+ const IMAGE = 'image';
+ const URL = 'url';
+
+ const DC = 'http://purl.org/dc/elements/1.1/';
+
+ const CREATOR = 'creator';
+
+ const CONTENTNS = 'http://purl.org/rss/1.0/modules/content/';
+
public $actor; // an ActivityObject
public $verb; // a string (the URL)
public $object; // an ActivityObject
@@ -1063,21 +113,29 @@ class Activity
return;
}
- $this->entry = $entry;
-
- // @fixme Don't send in a DOMDocument
+ // Insist on a feed's root DOMElement; don't allow a DOMDocument
if ($feed instanceof DOMDocument) {
- common_log(
- LOG_WARNING,
- 'Activity::__construct() - '
- . 'DOMDocument passed in for feed by mistake. '
- . "Expecting a 'feed' DOMElement."
+ throw new ClientException(
+ _("Expecting a root feed element but got a whole XML document.")
);
- $feed = $feed->getElementsByTagName('feed')->item(0);
}
+ $this->entry = $entry;
$this->feed = $feed;
+ if ($entry->namespaceURI == Activity::ATOM &&
+ $entry->localName == 'entry') {
+ $this->_fromAtomEntry($entry, $feed);
+ } else if ($entry->namespaceURI == Activity::RSS &&
+ $entry->localName == 'item') {
+ $this->_fromRssItem($entry, $feed);
+ } else {
+ throw new Exception("Unknown DOM element: {$entry->namespaceURI} {$entry->localName}");
+ }
+ }
+
+ function _fromAtomEntry($entry, $feed)
+ {
$pubEl = $this->_child($entry, self::PUBLISHED, self::ATOM);
if (!empty($pubEl)) {
@@ -1163,6 +221,69 @@ class Activity
}
}
+ function _fromRssItem($item, $channel)
+ {
+ $verbEl = $this->_child($item, self::VERB);
+
+ if (!empty($verbEl)) {
+ $this->verb = trim($verbEl->textContent);
+ } else {
+ $this->verb = ActivityVerb::POST;
+ // XXX: do other implied stuff here
+ }
+
+ $pubDateEl = $this->_child($item, self::PUBDATE, self::RSS);
+
+ if (!empty($pubDateEl)) {
+ $this->time = strtotime($pubDateEl->textContent);
+ }
+
+ if ($authorEl = $this->_child($item, self::AUTHOR, self::RSS)) {
+ $this->actor = ActivityObject::fromRssAuthor($authorEl);
+ } else if ($dcCreatorEl = $this->_child($item, self::CREATOR, self::DC)) {
+ $this->actor = ActivityObject::fromDcCreator($dcCreatorEl);
+ } else if ($posterousEl = $this->_child($item, ActivityObject::AUTHOR, ActivityObject::POSTEROUS)) {
+ // Special case for Posterous.com
+ $this->actor = ActivityObject::fromPosterousAuthor($posterousEl);
+ } else if (!empty($channel)) {
+ $this->actor = ActivityObject::fromRssChannel($channel);
+ } else {
+ // No actor!
+ }
+
+ $this->title = ActivityUtils::childContent($item, ActivityObject::TITLE, self::RSS);
+
+ $contentEl = ActivityUtils::child($item, ActivityUtils::CONTENT, self::CONTENTNS);
+
+ if (!empty($contentEl)) {
+ $this->content = htmlspecialchars_decode($contentEl->textContent, ENT_QUOTES);
+ } else {
+ $descriptionEl = ActivityUtils::child($item, self::DESCRIPTION, self::RSS);
+ if (!empty($descriptionEl)) {
+ $this->content = htmlspecialchars_decode($descriptionEl->textContent, ENT_QUOTES);
+ }
+ }
+
+ $this->link = ActivityUtils::childContent($item, ActivityUtils::LINK, self::RSS);
+
+ // @fixme enclosures
+ // @fixme thumbnails... maybe
+
+ $guidEl = ActivityUtils::child($item, self::GUID, self::RSS);
+
+ if (!empty($guidEl)) {
+ $this->id = $guidEl->textContent;
+
+ if ($guidEl->hasAttribute('isPermaLink') && $guidEl->getAttribute('isPermaLink') != 'false') {
+ // overwrites <link>
+ $this->link = $this->id;
+ }
+ }
+
+ $this->object = new ActivityObject($item);
+ $this->context = new ActivityContext($item);
+ }
+
/**
* Returns an Atom <entry> based on this activity
*
@@ -1241,48 +362,3 @@ class Activity
}
}
-class AtomCategory
-{
- public $term;
- public $scheme;
- public $label;
-
- function __construct($element=null)
- {
- if ($element && $element->attributes) {
- $this->term = $this->extract($element, 'term');
- $this->scheme = $this->extract($element, 'scheme');
- $this->label = $this->extract($element, 'label');
- }
- }
-
- protected function extract($element, $attrib)
- {
- $node = $element->attributes->getNamedItemNS(Activity::ATOM, $attrib);
- if ($node) {
- return trim($node->textContent);
- }
- $node = $element->attributes->getNamedItem($attrib);
- if ($node) {
- return trim($node->textContent);
- }
- return null;
- }
-
- function asString()
- {
- $attribs = array();
- if ($this->term !== null) {
- $attribs['term'] = $this->term;
- }
- if ($this->scheme !== null) {
- $attribs['scheme'] = $this->scheme;
- }
- if ($this->label !== null) {
- $attribs['label'] = $this->label;
- }
- $xs = new XMLStringer();
- $xs->element('category', $attribs);
- return $xs->asString();
- }
-}
diff --git a/lib/activitycontext.php b/lib/activitycontext.php
new file mode 100644
index 000000000..2df7613f7
--- /dev/null
+++ b/lib/activitycontext.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class ActivityContext
+{
+ public $replyToID;
+ public $replyToUrl;
+ public $location;
+ public $attention = array();
+ public $conversation;
+
+ const THR = 'http://purl.org/syndication/thread/1.0';
+ const GEORSS = 'http://www.georss.org/georss';
+ const OSTATUS = 'http://ostatus.org/schema/1.0';
+
+ const INREPLYTO = 'in-reply-to';
+ const REF = 'ref';
+ const HREF = 'href';
+
+ const POINT = 'point';
+
+ const ATTENTION = 'ostatus:attention';
+ const CONVERSATION = 'ostatus:conversation';
+
+ function __construct($element)
+ {
+ $replyToEl = ActivityUtils::child($element, self::INREPLYTO, self::THR);
+
+ if (!empty($replyToEl)) {
+ $this->replyToID = $replyToEl->getAttribute(self::REF);
+ $this->replyToUrl = $replyToEl->getAttribute(self::HREF);
+ }
+
+ $this->location = $this->getLocation($element);
+
+ $this->conversation = ActivityUtils::getLink($element, self::CONVERSATION);
+
+ // Multiple attention links allowed
+
+ $links = $element->getElementsByTagNameNS(ActivityUtils::ATOM, ActivityUtils::LINK);
+
+ for ($i = 0; $i < $links->length; $i++) {
+
+ $link = $links->item($i);
+
+ $linkRel = $link->getAttribute(ActivityUtils::REL);
+
+ if ($linkRel == self::ATTENTION) {
+ $this->attention[] = $link->getAttribute(self::HREF);
+ }
+ }
+ }
+
+ /**
+ * Parse location given as a GeoRSS-simple point, if provided.
+ * http://www.georss.org/simple
+ *
+ * @param feed item $entry
+ * @return mixed Location or false
+ */
+ function getLocation($dom)
+ {
+ $points = $dom->getElementsByTagNameNS(self::GEORSS, self::POINT);
+
+ for ($i = 0; $i < $points->length; $i++) {
+ $point = $points->item($i)->textContent;
+ return self::locationFromPoint($point);
+ }
+
+ return null;
+ }
+
+ // XXX: Move to ActivityUtils or Location?
+ static function locationFromPoint($point)
+ {
+ $point = str_replace(',', ' ', $point); // per spec "treat commas as whitespace"
+ $point = preg_replace('/\s+/', ' ', $point);
+ $point = trim($point);
+ $coords = explode(' ', $point);
+ if (count($coords) == 2) {
+ list($lat, $lon) = $coords;
+ if (is_numeric($lat) && is_numeric($lon)) {
+ common_log(LOG_INFO, "Looking up location for $lat $lon from georss point");
+ return Location::fromLatLon($lat, $lon);
+ }
+ }
+ common_log(LOG_ERR, "Ignoring bogus georss:point value $point");
+ return null;
+ }
+}
diff --git a/lib/activityobject.php b/lib/activityobject.php
new file mode 100644
index 000000000..0a358ccab
--- /dev/null
+++ b/lib/activityobject.php
@@ -0,0 +1,548 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * A noun-ish thing in the activity universe
+ *
+ * The activity streams spec talks about activity objects, while also having
+ * a tag activity:object, which is in fact an activity object. Aaaaaah!
+ *
+ * This is just a thing in the activity universe. Can be the subject, object,
+ * or indirect object (target!) of an activity verb. Rotten name, and I'm
+ * propagating it. *sigh*
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityObject
+{
+ const ARTICLE = 'http://activitystrea.ms/schema/1.0/article';
+ const BLOGENTRY = 'http://activitystrea.ms/schema/1.0/blog-entry';
+ const NOTE = 'http://activitystrea.ms/schema/1.0/note';
+ const STATUS = 'http://activitystrea.ms/schema/1.0/status';
+ const FILE = 'http://activitystrea.ms/schema/1.0/file';
+ const PHOTO = 'http://activitystrea.ms/schema/1.0/photo';
+ const ALBUM = 'http://activitystrea.ms/schema/1.0/photo-album';
+ const PLAYLIST = 'http://activitystrea.ms/schema/1.0/playlist';
+ const VIDEO = 'http://activitystrea.ms/schema/1.0/video';
+ const AUDIO = 'http://activitystrea.ms/schema/1.0/audio';
+ const BOOKMARK = 'http://activitystrea.ms/schema/1.0/bookmark';
+ const PERSON = 'http://activitystrea.ms/schema/1.0/person';
+ const GROUP = 'http://activitystrea.ms/schema/1.0/group';
+ const PLACE = 'http://activitystrea.ms/schema/1.0/place';
+ const COMMENT = 'http://activitystrea.ms/schema/1.0/comment';
+ // ^^^^^^^^^^ tea!
+
+ // Atom elements we snarf
+
+ const TITLE = 'title';
+ const SUMMARY = 'summary';
+ const ID = 'id';
+ const SOURCE = 'source';
+
+ const NAME = 'name';
+ const URI = 'uri';
+ const EMAIL = 'email';
+
+ const POSTEROUS = 'http://posterous.com/help/rss/1.0';
+ const AUTHOR = 'author';
+ const USERIMAGE = 'userImage';
+ const PROFILEURL = 'profileUrl';
+ const NICKNAME = 'nickName';
+ const DISPLAYNAME = 'displayName';
+
+ public $element;
+ public $type;
+ public $id;
+ public $title;
+ public $summary;
+ public $content;
+ public $link;
+ public $source;
+ public $avatarLinks = array();
+ public $geopoint;
+ public $poco;
+ public $displayName;
+
+ /**
+ * Constructor
+ *
+ * This probably needs to be refactored
+ * to generate a local class (ActivityPerson, ActivityFile, ...)
+ * based on the object type.
+ *
+ * @param DOMElement $element DOM thing to turn into an Activity thing
+ */
+
+ function __construct($element = null)
+ {
+ if (empty($element)) {
+ return;
+ }
+
+ $this->element = $element;
+
+ $this->geopoint = $this->_childContent(
+ $element,
+ ActivityContext::POINT,
+ ActivityContext::GEORSS
+ );
+
+ if ($element->tagName == 'author') {
+ $this->_fromAuthor($element);
+ } else if ($element->tagName == 'item') {
+ $this->_fromRssItem($element);
+ } else {
+ $this->_fromAtomEntry($element);
+ }
+
+ // Some per-type attributes...
+ if ($this->type == self::PERSON || $this->type == self::GROUP) {
+ $this->displayName = $this->title;
+
+ $photos = ActivityUtils::getLinks($element, 'photo');
+ if (count($photos)) {
+ foreach ($photos as $link) {
+ $this->avatarLinks[] = new AvatarLink($link);
+ }
+ } else {
+ $avatars = ActivityUtils::getLinks($element, 'avatar');
+ foreach ($avatars as $link) {
+ $this->avatarLinks[] = new AvatarLink($link);
+ }
+ }
+
+ $this->poco = new PoCo($element);
+ }
+ }
+
+ private function _fromAuthor($element)
+ {
+ $this->type = self::PERSON; // XXX: is this fair?
+ $this->title = $this->_childContent($element, self::NAME);
+
+ $id = $this->_childContent($element, self::URI);
+ if (ActivityUtils::validateUri($id)) {
+ $this->id = $id;
+ }
+
+ if (empty($this->id)) {
+ $email = $this->_childContent($element, self::EMAIL);
+ if (!empty($email)) {
+ // XXX: acct: ?
+ $this->id = 'mailto:'.$email;
+ }
+ }
+ }
+
+ private function _fromAtomEntry($element)
+ {
+ if ($element->localName == 'actor') {
+ // Old-fashioned <activity:actor>...
+ // First pull anything from <author>, then we'll add on top.
+ $author = ActivityUtils::child($element->parentNode, 'author');
+ if ($author) {
+ $this->_fromAuthor($author);
+ }
+ }
+
+ $this->type = $this->_childContent($element, Activity::OBJECTTYPE,
+ Activity::SPEC);
+
+ if (empty($this->type)) {
+ $this->type = ActivityObject::NOTE;
+ }
+
+ $id = $this->_childContent($element, self::ID);
+ if (ActivityUtils::validateUri($id)) {
+ $this->id = $id;
+ }
+
+ $this->summary = ActivityUtils::childHtmlContent($element, self::SUMMARY);
+ $this->content = ActivityUtils::getContent($element);
+
+ // We don't like HTML in our titles, although it's technically allowed
+
+ $title = ActivityUtils::childHtmlContent($element, self::TITLE);
+
+ $this->title = html_entity_decode(strip_tags($title));
+
+ $this->source = $this->_getSource($element);
+
+ $this->link = ActivityUtils::getPermalink($element);
+ }
+
+ // @fixme rationalize with Activity::_fromRssItem()
+
+ private function _fromRssItem($item)
+ {
+ $this->title = ActivityUtils::childContent($item, ActivityObject::TITLE, Activity::RSS);
+
+ $contentEl = ActivityUtils::child($item, ActivityUtils::CONTENT, Activity::CONTENTNS);
+
+ if (!empty($contentEl)) {
+ $this->content = htmlspecialchars_decode($contentEl->textContent, ENT_QUOTES);
+ } else {
+ $descriptionEl = ActivityUtils::child($item, Activity::DESCRIPTION, Activity::RSS);
+ if (!empty($descriptionEl)) {
+ $this->content = htmlspecialchars_decode($descriptionEl->textContent, ENT_QUOTES);
+ }
+ }
+
+ $this->link = ActivityUtils::childContent($item, ActivityUtils::LINK, Activity::RSS);
+
+ $guidEl = ActivityUtils::child($item, Activity::GUID, Activity::RSS);
+
+ if (!empty($guidEl)) {
+ $this->id = $guidEl->textContent;
+
+ if ($guidEl->hasAttribute('isPermaLink')) {
+ // overwrites <link>
+ $this->link = $this->id;
+ }
+ }
+ }
+
+ public static function fromRssAuthor($el)
+ {
+ $text = $el->textContent;
+
+ if (preg_match('/^(.*?) \((.*)\)$/', $text, $match)) {
+ $email = $match[1];
+ $name = $match[2];
+ } else if (preg_match('/^(.*?) <(.*)>$/', $text, $match)) {
+ $name = $match[1];
+ $email = $match[2];
+ } else if (preg_match('/.*@.*/', $text)) {
+ $email = $text;
+ $name = null;
+ } else {
+ $name = $text;
+ $email = null;
+ }
+
+ // Not really enough info
+
+ $obj = new ActivityObject();
+
+ $obj->element = $el;
+
+ $obj->type = ActivityObject::PERSON;
+ $obj->title = $name;
+
+ if (!empty($email)) {
+ $obj->id = 'mailto:'.$email;
+ }
+
+ return $obj;
+ }
+
+ public static function fromDcCreator($el)
+ {
+ // Not really enough info
+
+ $text = $el->textContent;
+
+ $obj = new ActivityObject();
+
+ $obj->element = $el;
+
+ $obj->title = $text;
+ $obj->type = ActivityObject::PERSON;
+
+ return $obj;
+ }
+
+ public static function fromRssChannel($el)
+ {
+ $obj = new ActivityObject();
+
+ $obj->element = $el;
+
+ $obj->type = ActivityObject::PERSON; // @fixme guess better
+
+ $obj->title = ActivityUtils::childContent($el, ActivityObject::TITLE, Activity::RSS);
+ $obj->link = ActivityUtils::childContent($el, ActivityUtils::LINK, Activity::RSS);
+ $obj->id = ActivityUtils::getLink($el, Activity::SELF);
+
+ if (empty($obj->id)) {
+ $obj->id = $obj->link;
+ }
+
+ $desc = ActivityUtils::childContent($el, Activity::DESCRIPTION, Activity::RSS);
+
+ if (!empty($desc)) {
+ $obj->content = htmlspecialchars_decode($desc, ENT_QUOTES);
+ }
+
+ $imageEl = ActivityUtils::child($el, Activity::IMAGE, Activity::RSS);
+
+ if (!empty($imageEl)) {
+ $url = ActivityUtils::childContent($imageEl, Activity::URL, Activity::RSS);
+ $al = new AvatarLink();
+ $al->url = $url;
+ $obj->avatarLinks[] = $al;
+ }
+
+ return $obj;
+ }
+
+ public static function fromPosterousAuthor($el)
+ {
+ $obj = new ActivityObject();
+
+ $obj->type = ActivityObject::PERSON; // @fixme any others...?
+
+ $userImage = ActivityUtils::childContent($el, self::USERIMAGE, self::POSTEROUS);
+
+ if (!empty($userImage)) {
+ $al = new AvatarLink();
+ $al->url = $userImage;
+ $obj->avatarLinks[] = $al;
+ }
+
+ $obj->link = ActivityUtils::childContent($el, self::PROFILEURL, self::POSTEROUS);
+ $obj->id = $obj->link;
+
+ $obj->poco = new PoCo();
+
+ $obj->poco->preferredUsername = ActivityUtils::childContent($el, self::NICKNAME, self::POSTEROUS);
+ $obj->poco->displayName = ActivityUtils::childContent($el, self::DISPLAYNAME, self::POSTEROUS);
+
+ $obj->title = $obj->poco->displayName;
+
+ return $obj;
+ }
+
+ private function _childContent($element, $tag, $namespace=ActivityUtils::ATOM)
+ {
+ return ActivityUtils::childContent($element, $tag, $namespace);
+ }
+
+ // Try to get a unique id for the source feed
+
+ private function _getSource($element)
+ {
+ $sourceEl = ActivityUtils::child($element, 'source');
+
+ if (empty($sourceEl)) {
+ return null;
+ } else {
+ $href = ActivityUtils::getLink($sourceEl, 'self');
+ if (!empty($href)) {
+ return $href;
+ } else {
+ return ActivityUtils::childContent($sourceEl, 'id');
+ }
+ }
+ }
+
+ static function fromNotice(Notice $notice)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::NOTE;
+
+ $object->id = $notice->uri;
+ $object->title = $notice->content;
+ $object->content = $notice->rendered;
+ $object->link = $notice->bestUrl();
+
+ return $object;
+ }
+
+ static function fromProfile(Profile $profile)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::PERSON;
+ $object->id = $profile->getUri();
+ $object->title = $profile->getBestName();
+ $object->link = $profile->profileurl;
+
+ $orig = $profile->getOriginalAvatar();
+
+ if (!empty($orig)) {
+ $object->avatarLinks[] = AvatarLink::fromAvatar($orig);
+ }
+
+ $sizes = array(
+ AVATAR_PROFILE_SIZE,
+ AVATAR_STREAM_SIZE,
+ AVATAR_MINI_SIZE
+ );
+
+ foreach ($sizes as $size) {
+
+ $alink = null;
+ $avatar = $profile->getAvatar($size);
+
+ if (!empty($avatar)) {
+ $alink = AvatarLink::fromAvatar($avatar);
+ } else {
+ $alink = new AvatarLink();
+ $alink->type = 'image/png';
+ $alink->height = $size;
+ $alink->width = $size;
+ $alink->url = Avatar::defaultImage($size);
+ }
+
+ $object->avatarLinks[] = $alink;
+ }
+
+ if (isset($profile->lat) && isset($profile->lon)) {
+ $object->geopoint = (float)$profile->lat
+ . ' ' . (float)$profile->lon;
+ }
+
+ $object->poco = PoCo::fromProfile($profile);
+
+ return $object;
+ }
+
+ static function fromGroup($group)
+ {
+ $object = new ActivityObject();
+
+ $object->type = ActivityObject::GROUP;
+ $object->id = $group->getUri();
+ $object->title = $group->getBestName();
+ $object->link = $group->getUri();
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->homepage_logo,
+ AVATAR_PROFILE_SIZE
+ );
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->stream_logo,
+ AVATAR_STREAM_SIZE
+ );
+
+ $object->avatarLinks[] = AvatarLink::fromFilename(
+ $group->mini_logo,
+ AVATAR_MINI_SIZE
+ );
+
+ $object->poco = PoCo::fromGroup($group);
+
+ return $object;
+ }
+
+ function asString($tag='activity:object')
+ {
+ $xs = new XMLStringer(true);
+
+ $xs->elementStart($tag);
+
+ $xs->element('activity:object-type', null, $this->type);
+
+ $xs->element(self::ID, null, $this->id);
+
+ if (!empty($this->title)) {
+ $xs->element(
+ self::TITLE,
+ null,
+ common_xml_safe_str($this->title)
+ );
+ }
+
+ if (!empty($this->summary)) {
+ $xs->element(
+ self::SUMMARY,
+ null,
+ common_xml_safe_str($this->summary)
+ );
+ }
+
+ if (!empty($this->content)) {
+ // XXX: assuming HTML content here
+ $xs->element(
+ ActivityUtils::CONTENT,
+ array('type' => 'html'),
+ common_xml_safe_str($this->content)
+ );
+ }
+
+ if (!empty($this->link)) {
+ $xs->element(
+ 'link',
+ array(
+ 'rel' => 'alternate',
+ 'type' => 'text/html',
+ 'href' => $this->link
+ ),
+ null
+ );
+ }
+
+ if ($this->type == ActivityObject::PERSON
+ || $this->type == ActivityObject::GROUP) {
+
+ foreach ($this->avatarLinks as $avatar) {
+ $xs->element(
+ 'link', array(
+ 'rel' => 'avatar',
+ 'type' => $avatar->type,
+ 'media:width' => $avatar->width,
+ 'media:height' => $avatar->height,
+ 'href' => $avatar->url
+ ),
+ null
+ );
+ }
+ }
+
+ if (!empty($this->geopoint)) {
+ $xs->element(
+ 'georss:point',
+ null,
+ $this->geopoint
+ );
+ }
+
+ if (!empty($this->poco)) {
+ $xs->raw($this->poco->asString());
+ }
+
+ $xs->elementEnd($tag);
+
+ return $xs->getString();
+ }
+}
diff --git a/lib/activityutils.php b/lib/activityutils.php
new file mode 100644
index 000000000..a7e99fb11
--- /dev/null
+++ b/lib/activityutils.php
@@ -0,0 +1,265 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Utilities for turning DOMish things into Activityish things
+ *
+ * Some common functions that I didn't have the bandwidth to try to factor
+ * into some kind of reasonable superclass, so just dumped here. Might
+ * be useful to have an ActivityObject parent class or something.
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityUtils
+{
+ const ATOM = 'http://www.w3.org/2005/Atom';
+
+ const LINK = 'link';
+ const REL = 'rel';
+ const TYPE = 'type';
+ const HREF = 'href';
+
+ const CONTENT = 'content';
+ const SRC = 'src';
+
+ /**
+ * Get the permalink for an Activity object
+ *
+ * @param DOMElement $element A DOM element
+ *
+ * @return string related link, if any
+ */
+
+ static function getPermalink($element)
+ {
+ return self::getLink($element, 'alternate', 'text/html');
+ }
+
+ /**
+ * Get the permalink for an Activity object
+ *
+ * @param DOMElement $element A DOM element
+ *
+ * @return string related link, if any
+ */
+
+ static function getLink(DOMNode $element, $rel, $type=null)
+ {
+ $els = $element->childNodes;
+
+ foreach ($els as $link) {
+
+ if (!($link instanceof DOMElement)) {
+ continue;
+ }
+
+ if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
+
+ $linkRel = $link->getAttribute(self::REL);
+ $linkType = $link->getAttribute(self::TYPE);
+
+ if ($linkRel == $rel &&
+ (is_null($type) || $linkType == $type)) {
+ return $link->getAttribute(self::HREF);
+ }
+ }
+ }
+
+ return null;
+ }
+
+ static function getLinks(DOMNode $element, $rel, $type=null)
+ {
+ $els = $element->childNodes;
+ $out = array();
+
+ foreach ($els as $link) {
+ if ($link->localName == self::LINK && $link->namespaceURI == self::ATOM) {
+
+ $linkRel = $link->getAttribute(self::REL);
+ $linkType = $link->getAttribute(self::TYPE);
+
+ if ($linkRel == $rel &&
+ (is_null($type) || $linkType == $type)) {
+ $out[] = $link;
+ }
+ }
+ }
+
+ return $out;
+ }
+
+ /**
+ * Gets the first child element with the given tag
+ *
+ * @param DOMElement $element element to pick at
+ * @param string $tag tag to look for
+ * @param string $namespace Namespace to look under
+ *
+ * @return DOMElement found element or null
+ */
+
+ static function child(DOMNode $element, $tag, $namespace=self::ATOM)
+ {
+ $els = $element->childNodes;
+ if (empty($els) || $els->length == 0) {
+ return null;
+ } else {
+ for ($i = 0; $i < $els->length; $i++) {
+ $el = $els->item($i);
+ if ($el->localName == $tag && $el->namespaceURI == $namespace) {
+ return $el;
+ }
+ }
+ }
+ }
+
+ /**
+ * Grab the text content of a DOM element child of the current element
+ *
+ * @param DOMElement $element Element whose children we examine
+ * @param string $tag Tag to look up
+ * @param string $namespace Namespace to use, defaults to Atom
+ *
+ * @return string content of the child
+ */
+
+ static function childContent(DOMNode $element, $tag, $namespace=self::ATOM)
+ {
+ $el = self::child($element, $tag, $namespace);
+
+ if (empty($el)) {
+ return null;
+ } else {
+ return $el->textContent;
+ }
+ }
+
+ static function childHtmlContent(DOMNode $element, $tag, $namespace=self::ATOM)
+ {
+ $el = self::child($element, $tag, $namespace);
+
+ if (empty($el)) {
+ return null;
+ } else {
+ return self::textConstruct($el);
+ }
+ }
+
+ /**
+ * Get the content of an atom:entry-like object
+ *
+ * @param DOMElement $element The element to examine.
+ *
+ * @return string unencoded HTML content of the element, like "This -&lt; is <b>HTML</b>."
+ *
+ * @todo handle remote content
+ * @todo handle embedded XML mime types
+ * @todo handle base64-encoded non-XML and non-text mime types
+ */
+
+ static function getContent($element)
+ {
+ return self::childHtmlContent($element, self::CONTENT, self::ATOM);
+ }
+
+ static function textConstruct($el)
+ {
+ $src = $el->getAttribute(self::SRC);
+
+ if (!empty($src)) {
+ throw new ClientException(_("Can't handle remote content yet."));
+ }
+
+ $type = $el->getAttribute(self::TYPE);
+
+ // slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3
+
+ if (empty($type) || $type == 'text') {
+ return $el->textContent;
+ } else if ($type == 'html') {
+ $text = $el->textContent;
+ return htmlspecialchars_decode($text, ENT_QUOTES);
+ } else if ($type == 'xhtml') {
+ $divEl = ActivityUtils::child($el, 'div', 'http://www.w3.org/1999/xhtml');
+ if (empty($divEl)) {
+ return null;
+ }
+ $doc = $divEl->ownerDocument;
+ $text = '';
+ $children = $divEl->childNodes;
+
+ for ($i = 0; $i < $children->length; $i++) {
+ $child = $children->item($i);
+ $text .= $doc->saveXML($child);
+ }
+ return trim($text);
+ } else if (in_array($type, array('text/xml', 'application/xml')) ||
+ preg_match('#(+|/)xml$#', $type)) {
+ throw new ClientException(_("Can't handle embedded XML content yet."));
+ } else if (strncasecmp($type, 'text/', 5)) {
+ return $el->textContent;
+ } else {
+ throw new ClientException(_("Can't handle embedded Base64 content yet."));
+ }
+ }
+
+ /**
+ * Is this a valid URI for remote profile/notice identification?
+ * Does not have to be a resolvable URL.
+ * @param string $uri
+ * @return boolean
+ */
+ static function validateUri($uri)
+ {
+ if (Validate::uri($uri)) {
+ return true;
+ }
+
+ // Possibly an upstream bug; tag: URIs aren't validated properly
+ // unless you explicitly ask for them. All other schemes are accepted
+ // for basic URI validation without asking.
+ if (Validate::uri($uri, array('allowed_scheme' => array('tag')))) {
+ return true;
+ }
+
+ return false;
+ }
+}
diff --git a/lib/activityverb.php b/lib/activityverb.php
new file mode 100644
index 000000000..76f2b84e9
--- /dev/null
+++ b/lib/activityverb.php
@@ -0,0 +1,66 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Utility class to hold a bunch of constant defining default verb types
+ *
+ * @category OStatus
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class ActivityVerb
+{
+ const POST = 'http://activitystrea.ms/schema/1.0/post';
+ const SHARE = 'http://activitystrea.ms/schema/1.0/share';
+ const SAVE = 'http://activitystrea.ms/schema/1.0/save';
+ const FAVORITE = 'http://activitystrea.ms/schema/1.0/favorite';
+ const PLAY = 'http://activitystrea.ms/schema/1.0/play';
+ const FOLLOW = 'http://activitystrea.ms/schema/1.0/follow';
+ const FRIEND = 'http://activitystrea.ms/schema/1.0/make-friend';
+ const JOIN = 'http://activitystrea.ms/schema/1.0/join';
+ const TAG = 'http://activitystrea.ms/schema/1.0/tag';
+
+ // Custom OStatus verbs for the flipside until they're standardized
+ const DELETE = 'http://ostatus.org/schema/1.0/unfollow';
+ const UNFAVORITE = 'http://ostatus.org/schema/1.0/unfavorite';
+ const UNFOLLOW = 'http://ostatus.org/schema/1.0/unfollow';
+ const LEAVE = 'http://ostatus.org/schema/1.0/leave';
+
+ // For simple profile-update pings; no content to share.
+ const UPDATE_PROFILE = 'http://ostatus.org/schema/1.0/update-profile';
+}
diff --git a/lib/apiaction.php b/lib/apiaction.php
index e4a1df3d1..e6aaf9316 100644
--- a/lib/apiaction.php
+++ b/lib/apiaction.php
@@ -491,7 +491,7 @@ class ApiAction extends Action
$this->showXmlAttachments($twitter_status['attachments']);
break;
case 'geo':
- $this->showGeoRSS($value);
+ $this->showGeoXML($value);
break;
case 'retweeted_status':
$this->showTwitterXmlStatus($value, 'retweeted_status');
@@ -539,7 +539,7 @@ class ApiAction extends Action
}
}
- function showGeoRSS($geo)
+ function showGeoXML($geo)
{
if (empty($geo)) {
// empty geo element
@@ -551,6 +551,17 @@ class ApiAction extends Action
}
}
+ function showGeoRSS($geo)
+ {
+ if (!empty($geo)) {
+ $this->element(
+ 'georss:point',
+ null,
+ $geo['coordinates'][0] . ' ' . $geo['coordinates'][1]
+ );
+ }
+ }
+
function showTwitterRssItem($entry)
{
$this->elementStart('item');
@@ -619,13 +630,25 @@ class ApiAction extends Action
$this->endDocument('xml');
}
- function showRssTimeline($notice, $title, $link, $subtitle, $suplink=null, $logo=null)
+ function showRssTimeline($notice, $title, $link, $subtitle, $suplink = null, $logo = null, $self = null)
{
$this->initDocument('rss');
$this->element('title', null, $title);
$this->element('link', null, $link);
+
+ if (!is_null($self)) {
+ $this->element(
+ 'atom:link',
+ array(
+ 'type' => 'application/rss+xml',
+ 'href' => $self,
+ 'rel' => 'self'
+ )
+ );
+ }
+
if (!is_null($suplink)) {
// For FriendFeed's SUP protocol
$this->element('link', array('xmlns' => 'http://www.w3.org/2005/Atom',
@@ -732,8 +755,12 @@ class ApiAction extends Action
function showTwitterAtomEntry($entry)
{
$this->elementStart('entry');
- $this->element('title', null, $entry['title']);
- $this->element('content', array('type' => 'html'), $entry['content']);
+ $this->element('title', null, common_xml_safe_str($entry['title']));
+ $this->element(
+ 'content',
+ array('type' => 'html'),
+ common_xml_safe_str($entry['content'])
+ );
$this->element('id', null, $entry['id']);
$this->element('published', null, $entry['published']);
$this->element('updated', null, $entry['updated']);
@@ -848,7 +875,7 @@ class ApiAction extends Action
$this->initDocument('atom');
- $this->element('title', null, $title);
+ $this->element('title', null, common_xml_safe_str($title));
$this->element('id', null, $id);
$this->element('link', array('href' => $link, 'rel' => 'alternate', 'type' => 'text/html'), null);
@@ -858,7 +885,7 @@ class ApiAction extends Action
}
$this->element('updated', null, common_date_iso8601('now'));
- $this->element('subtitle', null, $subtitle);
+ $this->element('subtitle', null, common_xml_safe_str($subtitle));
if (is_array($group)) {
foreach ($group as $g) {
@@ -1138,7 +1165,14 @@ class ApiAction extends Action
function initTwitterRss()
{
$this->startXML();
- $this->elementStart('rss', array('version' => '2.0', 'xmlns:atom'=>'http://www.w3.org/2005/Atom'));
+ $this->elementStart(
+ 'rss',
+ array(
+ 'version' => '2.0',
+ 'xmlns:atom' => 'http://www.w3.org/2005/Atom',
+ 'xmlns:georss' => 'http://www.georss.org/georss'
+ )
+ );
$this->elementStart('channel');
Event::handle('StartApiRss', array($this));
}
@@ -1336,8 +1370,27 @@ class ApiAction extends Action
}
}
- function getSelfUri($action, $aargs)
+ /**
+ * Calculate the complete URI that called up this action. Used for
+ * Atom rel="self" links. Warning: this is funky.
+ *
+ * @return string URL a URL suitable for rel="self" Atom links
+ */
+ function getSelfUri()
{
+ $action = mb_substr(get_class($this), 0, -6); // remove 'Action'
+
+ $id = $this->arg('id');
+ $aargs = array('format' => $this->format);
+ if (!empty($id)) {
+ $aargs['id'] = $id;
+ }
+
+ $tag = $this->arg('tag');
+ if (!empty($tag)) {
+ $aargs['tag'] = $tag;
+ }
+
parse_str($_SERVER['QUERY_STRING'], $params);
$pstring = '';
if (!empty($params)) {
diff --git a/lib/apiauth.php b/lib/apiauth.php
index 5090871cf..17f803a1c 100644
--- a/lib/apiauth.php
+++ b/lib/apiauth.php
@@ -235,9 +235,13 @@ class ApiAuthAction extends ApiAction
{
$this->basicAuthProcessHeader();
- $realm = common_config('site', 'name') . ' API';
+ $realm = common_config('api', 'realm');
- if (!isset($this->auth_user_nickname) && $required) {
+ if (empty($realm)) {
+ $realm = common_config('site', 'name') . ' API';
+ }
+
+ if (empty($this->auth_user_nickname) && $required) {
header('WWW-Authenticate: Basic realm="' . $realm . '"');
// show error if the user clicks 'cancel'
@@ -290,11 +294,15 @@ class ApiAuthAction extends ApiAction
function basicAuthProcessHeader()
{
- if (isset($_SERVER['AUTHORIZATION'])
- || isset($_SERVER['HTTP_AUTHORIZATION'])
- ) {
- $authorization_header = isset($_SERVER['HTTP_AUTHORIZATION'])
- ? $_SERVER['HTTP_AUTHORIZATION'] : $_SERVER['AUTHORIZATION'];
+ $authHeaders = array('AUTHORIZATION',
+ 'HTTP_AUTHORIZATION',
+ 'REDIRECT_HTTP_AUTHORIZATION'); // rewrite for CGI
+ $authorization_header = null;
+ foreach ($authHeaders as $header) {
+ if (isset($_SERVER[$header])) {
+ $authorization_header = $_SERVER[$header];
+ break;
+ }
}
if (isset($_SERVER['PHP_AUTH_USER'])) {
diff --git a/lib/atom10feed.php b/lib/atom10feed.php
index 2d342e785..a46d49f35 100644
--- a/lib/atom10feed.php
+++ b/lib/atom10feed.php
@@ -178,7 +178,7 @@ class Atom10Feed extends XMLStringer
$this->element(
'generator', array(
- 'url' => 'http://status.net',
+ 'uri' => 'http://status.net',
'version' => STATUSNET_VERSION
),
'StatusNet'
diff --git a/lib/atomcategory.php b/lib/atomcategory.php
new file mode 100644
index 000000000..4cc3b4f4d
--- /dev/null
+++ b/lib/atomcategory.php
@@ -0,0 +1,77 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class AtomCategory
+{
+ public $term;
+ public $scheme;
+ public $label;
+
+ function __construct($element=null)
+ {
+ if ($element && $element->attributes) {
+ $this->term = $this->extract($element, 'term');
+ $this->scheme = $this->extract($element, 'scheme');
+ $this->label = $this->extract($element, 'label');
+ }
+ }
+
+ protected function extract($element, $attrib)
+ {
+ $node = $element->attributes->getNamedItemNS(Activity::ATOM, $attrib);
+ if ($node) {
+ return trim($node->textContent);
+ }
+ $node = $element->attributes->getNamedItem($attrib);
+ if ($node) {
+ return trim($node->textContent);
+ }
+ return null;
+ }
+
+ function asString()
+ {
+ $attribs = array();
+ if ($this->term !== null) {
+ $attribs['term'] = $this->term;
+ }
+ if ($this->scheme !== null) {
+ $attribs['scheme'] = $this->scheme;
+ }
+ if ($this->label !== null) {
+ $attribs['label'] = $this->label;
+ }
+ $xs = new XMLStringer();
+ $xs->element('category', $attribs);
+ return $xs->asString();
+ }
+}
diff --git a/lib/attachmentlist.php b/lib/attachmentlist.php
index 51ceca857..d29a5fa2f 100644
--- a/lib/attachmentlist.php
+++ b/lib/attachmentlist.php
@@ -248,9 +248,7 @@ class Attachment extends AttachmentListItem
$this->out->elementStart('div', array('id' => 'attachment_view',
'class' => 'hentry'));
$this->out->elementStart('div', 'entry-title');
- $this->out->elementStart('a', $this->linkAttr());
- $this->out->element('span', null, $this->linkTitle());
- $this->out->elementEnd('a');
+ $this->out->element('a', $this->linkAttr(), $this->linkTitle());
$this->out->elementEnd('div');
$this->out->elementStart('div', 'entry-content');
@@ -296,7 +294,7 @@ class Attachment extends AttachmentListItem
}
function linkAttr() {
- return array('class' => 'external', 'href' => $this->attachment->url);
+ return array('rel' => 'external', 'href' => $this->attachment->url);
}
function linkTitle() {
@@ -306,7 +304,7 @@ class Attachment extends AttachmentListItem
function showRepresentation() {
if (empty($this->oembed->type)) {
if (empty($this->attachment->mimetype)) {
- $this->out->element('pre', null, 'oh well... not sure how to handle the following: ' . print_r($this->attachment, true));
+ $this->showFallback();
} else {
switch ($this->attachment->mimetype) {
case 'image/gif':
@@ -332,6 +330,17 @@ class Attachment extends AttachmentListItem
$this->out->element('param', array('name' => 'autoStart', 'value' => 1));
$this->out->elementEnd('object');
break;
+
+ case 'text/html':
+ if ($this->attachment->filename) {
+ // Locally-uploaded HTML. Scrub and display inline.
+ $this->showHtmlFile($this->attachment);
+ break;
+ }
+ // Fall through to default
+
+ default:
+ $this->showFallback();
}
}
} else {
@@ -354,9 +363,76 @@ class Attachment extends AttachmentListItem
break;
default:
- $this->out->element('pre', null, 'oh well... not sure how to handle the following oembed: ' . print_r($this->oembed, true));
+ $this->showFallback();
}
}
}
+
+ protected function showHtmlFile(File $attachment)
+ {
+ $body = $this->scrubHtmlFile($attachment);
+ if ($body) {
+ $this->out->raw($body);
+ }
+ }
+
+ /**
+ * @return mixed false on failure, HTML fragment string on success
+ */
+ protected function scrubHtmlFile(File $attachment)
+ {
+ $path = File::path($attachment->filename);
+ if (!file_exists($path) || !is_readable($path)) {
+ common_log(LOG_ERR, "Missing local HTML attachment $path");
+ return false;
+ }
+ $raw = file_get_contents($path);
+
+ // Normalize...
+ $dom = new DOMDocument();
+ if(!$dom->loadHTML($raw)) {
+ common_log(LOG_ERR, "Bad HTML in local HTML attachment $path");
+ return false;
+ }
+
+ // Remove <script>s or htmlawed will dump their contents into output!
+ // Note: removing child nodes while iterating seems to mess things up,
+ // hence the double loop.
+ $scripts = array();
+ foreach ($dom->getElementsByTagName('script') as $script) {
+ $scripts[] = $script;
+ }
+ foreach ($scripts as $script) {
+ common_log(LOG_DEBUG, $script->textContent);
+ $script->parentNode->removeChild($script);
+ }
+
+ // Trim out everything outside the body...
+ $body = $dom->saveHTML();
+ $body = preg_replace('/^.*<body[^>]*>/is', '', $body);
+ $body = preg_replace('/<\/body[^>]*>.*$/is', '', $body);
+
+ require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+ $config = array('safe' => 1,
+ 'deny_attribute' => 'id,style,on*',
+ 'comment' => 1); // remove comments
+ $scrubbed = htmLawed($body, $config);
+
+ return $scrubbed;
+ }
+
+ function showFallback()
+ {
+ // If we don't know how to display an attachment inline, we probably
+ // shouldn't have gotten to this point.
+ //
+ // But, here we are... displaying details on a file or remote URL
+ // either on the main view or in an ajax-loaded lightbox. As a lesser
+ // of several evils, we'll try redirecting to the actual target via
+ // client-side JS.
+
+ common_log(LOG_ERR, "Empty or unknown type for file id {$this->attachment->id}; falling back to client-side redirect.");
+ $this->out->raw('<script>window.location = ' . json_encode($this->attachment->url) . ';</script>');
+ }
}
diff --git a/lib/authorizationplugin.php b/lib/authorizationplugin.php
index 07da9b2d1..3790bccf4 100644
--- a/lib/authorizationplugin.php
+++ b/lib/authorizationplugin.php
@@ -67,7 +67,7 @@ abstract class AuthorizationPlugin extends Plugin
//------------Below are the methods that connect StatusNet to the implementing Auth plugin------------\\
- function onStartSetUser(&$user) {
+ function onStartSetUser($user) {
$loginAllowed = $this->loginAllowed($user);
if($loginAllowed === true){
return;
@@ -84,7 +84,7 @@ abstract class AuthorizationPlugin extends Plugin
}
}
- function onStartSetApiUser(&$user) {
+ function onStartSetApiUser($user) {
return $this->onStartSetUser($user);
}
diff --git a/lib/avatarlink.php b/lib/avatarlink.php
new file mode 100644
index 000000000..e67799e2e
--- /dev/null
+++ b/lib/avatarlink.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+// XXX: Arg! This wouldn't be necessary if we used Avatars conistently
+class AvatarLink
+{
+ public $url;
+ public $type;
+ public $size;
+ public $width;
+ public $height;
+
+ function __construct($element=null)
+ {
+ if ($element) {
+ // @fixme use correct namespaces
+ $this->url = $element->getAttribute('href');
+ $this->type = $element->getAttribute('type');
+ $width = $element->getAttribute('media:width');
+ if ($width != null) {
+ $this->width = intval($width);
+ }
+ $height = $element->getAttribute('media:height');
+ if ($height != null) {
+ $this->height = intval($height);
+ }
+ }
+ }
+
+ static function fromAvatar($avatar)
+ {
+ if (empty($avatar)) {
+ return null;
+ }
+ $alink = new AvatarLink();
+ $alink->type = $avatar->mediatype;
+ $alink->height = $avatar->height;
+ $alink->width = $avatar->width;
+ $alink->url = $avatar->displayUrl();
+ return $alink;
+ }
+
+ static function fromFilename($filename, $size)
+ {
+ $alink = new AvatarLink();
+ $alink->url = $filename;
+ $alink->height = $size;
+ if (!empty($filename)) {
+ $alink->width = $size;
+ $alink->type = self::mediatype($filename);
+ } else {
+ $alink->url = User_group::defaultLogo($size);
+ $alink->type = 'image/png';
+ }
+ return $alink;
+ }
+
+ // yuck!
+ static function mediatype($filename) {
+ $ext = strtolower(end(explode('.', $filename)));
+ if ($ext == 'jpeg') {
+ $ext = 'jpg';
+ }
+ // hope we don't support any others
+ $types = array('png', 'gif', 'jpg', 'jpeg');
+ if (in_array($ext, $types)) {
+ return 'image/' . $ext;
+ }
+ return null;
+ }
+}
diff --git a/lib/channel.php b/lib/channel.php
index 05437b4e9..e83960ac5 100644
--- a/lib/channel.php
+++ b/lib/channel.php
@@ -47,6 +47,25 @@ class Channel
}
}
+class CLIChannel extends Channel
+{
+ function source()
+ {
+ return 'cli';
+ }
+
+ function output($user, $text)
+ {
+ $site = common_config('site', 'name');
+ print "[{$user->nickname}@{$site}] $text\n";
+ }
+
+ function error($user, $text)
+ {
+ $this->output($user, $text);
+ }
+}
+
class WebChannel extends Channel
{
var $out = null;
diff --git a/lib/command.php b/lib/command.php
index 5be9cd6e8..c2116828c 100644
--- a/lib/command.php
+++ b/lib/command.php
@@ -1,7 +1,7 @@
<?php
/*
* StatusNet - the distributed open-source microblogging tool
- * Copyright (C) 2008, 2009, StatusNet, Inc.
+ * Copyright (C) 2008, 2009, 2010 StatusNet, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
@@ -31,15 +31,147 @@ class Command
$this->user = $user;
}
- function execute($channel)
+ /**
+ * Execute the command and send success or error results
+ * back via the given communications channel.
+ *
+ * @param Channel
+ */
+ public function execute($channel)
+ {
+ try {
+ $this->handle($channel);
+ } catch (CommandException $e) {
+ $channel->error($this->user, $e->getMessage());
+ } catch (Exception $e) {
+ common_log(LOG_ERR, "Error handling " . get_class($this) . ": " . $e->getMessage());
+ $channel->error($this->user, $e->getMessage());
+ }
+ }
+
+
+ /**
+ * Override this with the meat!
+ *
+ * An error to send back to the user may be sent by throwing
+ * a CommandException with a formatted message.
+ *
+ * @param Channel
+ * @throws CommandException
+ */
+ function handle($channel)
{
return false;
}
+
+ /**
+ * Look up a notice from an argument, by poster's name to get last post
+ * or notice_id prefixed with #.
+ *
+ * @return Notice
+ * @throws CommandException
+ */
+ function getNotice($arg)
+ {
+ $notice = null;
+ if (Event::handle('StartCommandGetNotice', array($this, $arg, &$notice))) {
+ if(substr($this->other,0,1)=='#'){
+ // A specific notice_id #123
+
+ $notice = Notice::staticGet(substr($arg,1));
+ if (!$notice) {
+ throw new CommandException(_('Notice with that id does not exist'));
+ }
+ }
+
+ if (Validate::uri($this->other)) {
+ // A specific notice by URI lookup
+ $notice = Notice::staticGet('uri', $arg);
+ }
+
+ if (!$notice) {
+ // Local or remote profile name to get their last notice.
+ // May throw an exception and report 'no such user'
+ $recipient = $this->getProfile($arg);
+
+ $notice = $recipient->getCurrentNotice();
+ if (!$notice) {
+ throw new CommandException(_('User has no last notice'));
+ }
+ }
+ }
+ Event::handle('EndCommandGetNotice', array($this, $arg, &$notice));
+ if (!$notice) {
+ throw new CommandException(_('Notice with that id does not exist'));
+ }
+ return $notice;
+ }
+
+ /**
+ * Look up a local or remote profile by nickname.
+ *
+ * @return Profile
+ * @throws CommandException
+ */
+ function getProfile($arg)
+ {
+ $profile = null;
+ if (Event::handle('StartCommandGetProfile', array($this, $arg, &$profile))) {
+ $profile =
+ common_relative_profile($this->user, common_canonical_nickname($arg));
+ }
+ Event::handle('EndCommandGetProfile', array($this, $arg, &$profile));
+ if (!$profile) {
+ throw new CommandException(sprintf(_('Could not find a user with nickname %s'), $arg));
+ }
+ return $profile;
+ }
+
+ /**
+ * Get a local user by name
+ * @return User
+ * @throws CommandException
+ */
+ function getUser($arg)
+ {
+ $user = null;
+ if (Event::handle('StartCommandGetUser', array($this, $arg, &$user))) {
+ $user = User::staticGet('nickname', $arg);
+ }
+ Event::handle('EndCommandGetUser', array($this, $arg, &$user));
+ if (!$user){
+ throw new CommandException(sprintf(_('Could not find a local user with nickname %s'),
+ $arg));
+ }
+ return $user;
+ }
+
+ /**
+ * Get a local or remote group by name.
+ * @return User_group
+ * @throws CommandException
+ */
+ function getGroup($arg)
+ {
+ $group = null;
+ if (Event::handle('StartCommandGetGroup', array($this, $arg, &$group))) {
+ $group = User_group::getForNickname($arg, $this->user->getProfile());
+ }
+ Event::handle('EndCommandGetGroup', array($this, $arg, &$group));
+ if (!$group) {
+ throw new CommandException(_('No such group.'));
+ }
+ return $group;
+ }
+}
+
+class CommandException extends Exception
+{
}
class UnimplementedCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$channel->error($this->user, _("Sorry, this command is not yet implemented."));
}
@@ -81,24 +213,20 @@ class NudgeCommand extends Command
parent::__construct($user);
$this->other = $other;
}
- function execute($channel)
+
+ function handle($channel)
{
- $recipient = User::staticGet('nickname', $this->other);
- if(! $recipient){
- $channel->error($this->user, sprintf(_('Could not find a user with nickname %s'),
- $this->other));
- }else{
- if ($recipient->id == $this->user->id) {
- $channel->error($this->user, _('It does not make a lot of sense to nudge yourself!'));
- }else{
- if ($recipient->email && $recipient->emailnotifynudge) {
- mail_notify_nudge($this->user, $recipient);
- }
- // XXX: notify by IM
- // XXX: notify by SMS
- $channel->output($this->user, sprintf(_('Nudge sent to %s'),
- $recipient->nickname));
+ $recipient = $this->getUser($this->other);
+ if ($recipient->id == $this->user->id) {
+ throw new CommandException(_('It does not make a lot of sense to nudge yourself!'));
+ } else {
+ if ($recipient->email && $recipient->emailnotifynudge) {
+ mail_notify_nudge($this->user, $recipient);
}
+ // XXX: notify by IM
+ // XXX: notify by SMS
+ $channel->output($this->user, sprintf(_('Nudge sent to %s'),
+ $recipient->nickname));
}
}
}
@@ -115,7 +243,7 @@ class InviteCommand extends UnimplementedCommand
class StatsCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$profile = $this->user->getProfile();
@@ -142,34 +270,9 @@ class FavCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
- if(substr($this->other,0,1)=='#'){
- //favoriting a specific notice_id
-
- $notice = Notice::staticGet(substr($this->other,1));
- if (!$notice) {
- $channel->error($this->user, _('Notice with that id does not exist'));
- return;
- }
- $recipient = $notice->getProfile();
- }else{
- //favoriting a given user's last notice
-
- $recipient =
- common_relative_profile($this->user, common_canonical_nickname($this->other));
-
- if (!$recipient) {
- $channel->error($this->user, _('No such user.'));
- return;
- }
- $notice = $recipient->getCurrentNotice();
- if (!$notice) {
- $channel->error($this->user, _('User has no last notice'));
- return;
- }
- }
-
+ $notice = $this->getNotice($this->other);
$fave = Fave::addNew($this->user, $notice);
if (!$fave) {
@@ -177,7 +280,10 @@ class FavCommand extends Command
return;
}
- $other = User::staticGet('id', $recipient->id);
+ // @fixme favorite notification should be triggered
+ // at a lower level
+
+ $other = User::staticGet('id', $notice->profile_id);
if ($other && $other->id != $user->id) {
if ($other->email && $other->emailnotifyfav) {
@@ -191,6 +297,7 @@ class FavCommand extends Command
}
}
+
class JoinCommand extends Command
{
var $other = null;
@@ -201,17 +308,10 @@ class JoinCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
-
- $nickname = common_canonical_nickname($this->other);
- $group = User_group::staticGet('nickname', $nickname);
- $cur = $this->user;
-
- if (!$group) {
- $channel->error($cur, _('No such group.'));
- return;
- }
+ $group = $this->getGroup($this->other);
+ $cur = $this->user;
if ($cur->isMember($group)) {
$channel->error($cur, _('You are already a member of that group'));
@@ -249,12 +349,10 @@ class DropCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
-
- $nickname = common_canonical_nickname($this->other);
- $group = User_group::staticGet('nickname', $nickname);
- $cur = $this->user;
+ $group = $this->getGroup($this->other);
+ $cur = $this->user;
if (!$group) {
$channel->error($cur, _('No such group.'));
@@ -293,15 +391,9 @@ class WhoisCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
- $recipient =
- common_relative_profile($this->user, common_canonical_nickname($this->other));
-
- if (!$recipient) {
- $channel->error($this->user, _('No such user.'));
- return;
- }
+ $recipient = $this->getProfile($this->other);
$whois = sprintf(_("%1\$s (%2\$s)"), $recipient->nickname,
$recipient->profileurl);
@@ -332,9 +424,18 @@ class MessageCommand extends Command
$this->text = $text;
}
- function execute($channel)
+ function handle($channel)
{
- $other = User::staticGet('nickname', common_canonical_nickname($this->other));
+ try {
+ $other = $this->getUser($this->other);
+ } catch (CommandException $e) {
+ try {
+ $profile = $this->getProfile($this->other);
+ } catch (CommandException $f) {
+ throw $e;
+ }
+ throw new CommandException(sprintf(_('%s is a remote profile; you can only send direct messages to users on the same server.'), $this->other));
+ }
$len = mb_strlen($this->text);
@@ -380,33 +481,9 @@ class RepeatCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
- if(substr($this->other,0,1)=='#'){
- //repeating a specific notice_id
-
- $notice = Notice::staticGet(substr($this->other,1));
- if (!$notice) {
- $channel->error($this->user, _('Notice with that id does not exist'));
- return;
- }
- $recipient = $notice->getProfile();
- }else{
- //repeating a given user's last notice
-
- $recipient =
- common_relative_profile($this->user, common_canonical_nickname($this->other));
-
- if (!$recipient) {
- $channel->error($this->user, _('No such user.'));
- return;
- }
- $notice = $recipient->getCurrentNotice();
- if (!$notice) {
- $channel->error($this->user, _('User has no last notice'));
- return;
- }
- }
+ $notice = $this->getNotice($this->other);
if($this->user->id == $notice->profile_id)
{
@@ -414,7 +491,7 @@ class RepeatCommand extends Command
return;
}
- if ($recipient->hasRepeated($notice->id)) {
+ if ($this->user->getProfile()->hasRepeated($notice->id)) {
$channel->error($this->user, _('Already repeated that notice'));
return;
}
@@ -441,33 +518,10 @@ class ReplyCommand extends Command
$this->text = $text;
}
- function execute($channel)
+ function handle($channel)
{
- if(substr($this->other,0,1)=='#'){
- //replying to a specific notice_id
-
- $notice = Notice::staticGet(substr($this->other,1));
- if (!$notice) {
- $channel->error($this->user, _('Notice with that id does not exist'));
- return;
- }
- $recipient = $notice->getProfile();
- }else{
- //replying to a given user's last notice
-
- $recipient =
- common_relative_profile($this->user, common_canonical_nickname($this->other));
-
- if (!$recipient) {
- $channel->error($this->user, _('No such user.'));
- return;
- }
- $notice = $recipient->getCurrentNotice();
- if (!$notice) {
- $channel->error($this->user, _('User has no last notice'));
- return;
- }
- }
+ $notice = $this->getNotice($this->other);
+ $recipient = $notice->getProfile();
$len = mb_strlen($this->text);
@@ -507,17 +561,10 @@ class GetCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
- $target_nickname = common_canonical_nickname($this->other);
-
- $target =
- common_relative_profile($this->user, $target_nickname);
+ $target = $this->getProfile($this->other);
- if (!$target) {
- $channel->error($this->user, _('No such user.'));
- return;
- }
$notice = $target->getCurrentNotice();
if (!$notice) {
$channel->error($this->user, _('User has no last notice'));
@@ -525,7 +572,7 @@ class GetCommand extends Command
}
$notice_content = $notice->content;
- $channel->output($this->user, $target_nickname . ": " . $notice_content);
+ $channel->output($this->user, $target->nickname . ": " . $notice_content);
}
}
@@ -540,7 +587,7 @@ class SubCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
if (!$this->other) {
@@ -548,16 +595,16 @@ class SubCommand extends Command
return;
}
- $otherUser = User::staticGet('nickname', $this->other);
+ $target = $this->getProfile($this->other);
- if (empty($otherUser)) {
- $channel->error($this->user, _('No such user'));
- return;
+ $remote = Remote_profile::staticGet('id', $target->id);
+ if ($remote) {
+ throw new CommandException(_("Can't subscribe to OMB profiles by command."));
}
try {
Subscription::start($this->user->getProfile(),
- $otherUser->getProfile());
+ $target);
$channel->output($this->user, sprintf(_('Subscribed to %s'), $this->other));
} catch (Exception $e) {
$channel->error($this->user, $e->getMessage());
@@ -576,22 +623,18 @@ class UnsubCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
if(!$this->other) {
$channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
return;
}
- $otherUser = User::staticGet('nickname', $this->other);
-
- if (empty($otherUser)) {
- $channel->error($this->user, _('No such user'));
- }
+ $target = $this->getProfile($this->other);
try {
Subscription::cancel($this->user->getProfile(),
- $otherUser->getProfile());
+ $target);
$channel->output($this->user, sprintf(_('Unsubscribed from %s'), $this->other));
} catch (Exception $e) {
$channel->error($this->user, $e->getMessage());
@@ -607,7 +650,7 @@ class OffCommand extends Command
parent::__construct($user);
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
if ($this->other) {
$channel->error($this->user, _("Command not yet implemented."));
@@ -630,7 +673,7 @@ class OnCommand extends Command
$this->other = $other;
}
- function execute($channel)
+ function handle($channel)
{
if ($this->other) {
$channel->error($this->user, _("Command not yet implemented."));
@@ -646,7 +689,7 @@ class OnCommand extends Command
class LoginCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$disabled = common_config('logincommand','disabled');
$disabled = isset($disabled) && $disabled;
@@ -686,7 +729,7 @@ class LoseCommand extends Command
return;
}
- $result=subs_unsubscribe_from($this->user, $this->other);
+ $result = Subscription::cancel($this->getProfile($this->other), $this->user->getProfile());
if ($result) {
$channel->output($this->user, sprintf(_('Unsubscribed %s'), $this->other));
@@ -698,7 +741,7 @@ class LoseCommand extends Command
class SubscriptionsCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$profile = $this->user->getSubscriptions(0);
$nicknames=array();
@@ -720,7 +763,7 @@ class SubscriptionsCommand extends Command
class SubscribersCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$profile = $this->user->getSubscribers();
$nicknames=array();
@@ -742,7 +785,7 @@ class SubscribersCommand extends Command
class GroupsCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$group = $this->user->getGroups();
$groups=array();
@@ -763,7 +806,7 @@ class GroupsCommand extends Command
class HelpCommand extends Command
{
- function execute($channel)
+ function handle($channel)
{
$channel->output($this->user,
_("Commands:\n".
diff --git a/lib/common.php b/lib/common.php
index 047dc5a7b..334a88ffd 100644
--- a/lib/common.php
+++ b/lib/common.php
@@ -71,7 +71,6 @@ if (!function_exists('dl')) {
# global configuration object
require_once('PEAR.php');
-require_once('PEAR/Exception.php');
require_once('DB/DataObject.php');
require_once('DB/DataObject/Cast.php'); # for dates
@@ -124,22 +123,10 @@ require_once INSTALLDIR.'/lib/util.php';
require_once INSTALLDIR.'/lib/action.php';
require_once INSTALLDIR.'/lib/mail.php';
require_once INSTALLDIR.'/lib/subs.php';
-require_once INSTALLDIR.'/lib/activity.php';
require_once INSTALLDIR.'/lib/clientexception.php';
require_once INSTALLDIR.'/lib/serverexception.php';
-
-//set PEAR error handling to use regular PHP exceptions
-function PEAR_ErrorToPEAR_Exception($err)
-{
- if ($err->getCode()) {
- throw new PEAR_Exception($err->getMessage(), $err->getCode());
- }
- throw new PEAR_Exception($err->getMessage());
-}
-PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'PEAR_ErrorToPEAR_Exception');
-
try {
StatusNet::init(@$server, @$path, @$conffile);
} catch (NoConfigException $e) {
diff --git a/lib/default.php b/lib/default.php
index f22d8b24a..10f3f1a97 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -294,4 +294,6 @@ $default =
array('crawldelay' => 0,
'disallow' => array('main', 'settings', 'admin', 'search', 'message')
),
+ 'api' =>
+ array('realm' => null),
);
diff --git a/lib/deluserqueuehandler.php b/lib/deluserqueuehandler.php
new file mode 100644
index 000000000..4a1233a5e
--- /dev/null
+++ b/lib/deluserqueuehandler.php
@@ -0,0 +1,95 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/**
+ * Background job to delete prolific users without disrupting front-end too much.
+ *
+ * Up to 50 messages are deleted on each run through; when all messages are gone,
+ * the actual account is deleted.
+ *
+ * @package QueueHandler
+ * @maintainer Brion Vibber <brion@status.net>
+ */
+
+class DelUserQueueHandler extends QueueHandler
+{
+ const DELETION_WINDOW = 50;
+
+ public function transport()
+ {
+ return 'deluser';
+ }
+
+ public function handle($user)
+ {
+ if (!($user instanceof User)) {
+ common_log(LOG_ERR, "Got a bogus user, not deleting");
+ return true;
+ }
+
+ $user = User::staticGet('id', $user->id);
+ if (!$user) {
+ common_log(LOG_INFO, "User {$user->nickname} was deleted before we got here.");
+ return true;
+ }
+
+ if (!$user->hasRole(Profile_role::DELETED)) {
+ common_log(LOG_INFO, "User {$user->nickname} is not pending deletion; aborting.");
+ return true;
+ }
+
+ $notice = $this->getNextBatch($user);
+ if ($notice->N) {
+ common_log(LOG_INFO, "Deleting next {$notice->N} notices by {$user->nickname}");
+ while ($notice->fetch()) {
+ $del = clone($notice);
+ $del->delete();
+ }
+
+ // @todo improve reliability in case we died during the above deletions
+ // with a fatal error. If the job is lost, we should perform some kind
+ // of garbage collection later.
+
+ // Queue up the next batch.
+ $qm = QueueManager::get();
+ $qm->enqueue($user, 'deluser');
+ } else {
+ // Out of notices? Let's finish deleting this guy!
+ $user->delete();
+ common_log(LOG_INFO, "User $user->id $user->nickname deleted.");
+ return true;
+ }
+
+ return true;
+ }
+
+ /**
+ * Fetch the next self::DELETION_WINDOW messages for this user.
+ * @return Notice
+ */
+ protected function getNextBatch(User $user)
+ {
+ $notice = new Notice();
+ $notice->profile_id = $user->id;
+ $notice->limit(self::DELETION_WINDOW);
+ $notice->find();
+ return $notice;
+ }
+
+}
diff --git a/lib/httpclient.php b/lib/httpclient.php
index 4c3af8d7d..64a51353c 100644
--- a/lib/httpclient.php
+++ b/lib/httpclient.php
@@ -120,6 +120,16 @@ class HTTPClient extends HTTP_Request2
{
$this->config['max_redirs'] = 10;
$this->config['follow_redirects'] = true;
+
+ // We've had some issues with keepalive breaking with
+ // HEAD requests, such as to youtube which seems to be
+ // emitting chunked encoding info for an empty body
+ // instead of not emitting anything. This may be a
+ // bug on YouTube's end, but the upstream libray
+ // ought to be investigated to see if we can handle
+ // it gracefully in that case as well.
+ $this->config['protocol_version'] = '1.0';
+
parent::__construct($url, $method, $config);
$this->setHeader('User-Agent', $this->userAgent());
}
diff --git a/lib/imagefile.php b/lib/imagefile.php
index 7b0479455..e47287741 100644
--- a/lib/imagefile.php
+++ b/lib/imagefile.php
@@ -60,6 +60,19 @@ class ImageFile
$this->filepath = $filepath;
$info = @getimagesize($this->filepath);
+
+ if (!(
+ ($info[2] == IMAGETYPE_GIF && function_exists('imagecreatefromgif')) ||
+ ($info[2] == IMAGETYPE_JPEG && function_exists('imagecreatefromjpeg')) ||
+ $info[2] == IMAGETYPE_BMP ||
+ ($info[2] == IMAGETYPE_WBMP && function_exists('imagecreatefromwbmp')) ||
+ ($info[2] == IMAGETYPE_XBM && function_exists('imagecreatefromxbm')) ||
+ ($info[2] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')))) {
+
+ throw new Exception(_('Unsupported image file format.'));
+ return;
+ }
+
$this->type = ($info) ? $info[2]:$type;
$this->width = ($info) ? $info[0]:$width;
$this->height = ($info) ? $info[1]:$height;
@@ -97,19 +110,6 @@ class ImageFile
return;
}
- if ($info[2] !== IMAGETYPE_GIF &&
- $info[2] !== IMAGETYPE_JPEG &&
- $info[2] !== IMAGETYPE_BMP &&
- $info[2] !== IMAGETYPE_WBMP &&
- $info[2] !== IMAGETYPE_XBM &&
- $info[2] !== IMAGETYPE_XPM &&
- $info[2] !== IMAGETYPE_PNG) {
-
- @unlink($_FILES[$param]['tmp_name']);
- throw new Exception(_('Unsupported image file format.'));
- return;
- }
-
return new ImageFile(null, $_FILES[$param]['tmp_name']);
}
@@ -159,9 +159,6 @@ class ImageFile
case IMAGETYPE_XBM:
$image_src = imagecreatefromxbm($this->filepath);
break;
- case IMAGETYPE_XPM:
- $image_src = imagecreatefromxpm($this->filepath);
- break;
default:
throw new Exception(_('Unknown file type'));
return;
@@ -204,10 +201,6 @@ class ImageFile
//we don't want to save XBM... it's a rare format that we can't guarantee clients will support
//save png instead
$this->type = IMAGETYPE_PNG;
- } else if($this->type == IMAGETYPE_XPM) {
- //we don't want to save XPM... it's a rare format that we can't guarantee clients will support
- //save png instead
- $this->type = IMAGETYPE_PNG;
}
$outname = Avatar::filename($this->id,
diff --git a/lib/language.php b/lib/language.php
index 64b59e739..76c788025 100644
--- a/lib/language.php
+++ b/lib/language.php
@@ -202,16 +202,19 @@ function _mdomain($backtrace)
static $cached;
$path = $backtrace[0]['file'];
if (!isset($cached[$path])) {
+ $final = 'statusnet'; // assume default domain
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 null;
+ $cut = strpos($path, '/plugins/');
+ if ($cut) {
+ $cut += strlen('/plugins/');
+ $cut2 = strpos($path, '/', $cut);
+ if ($cut && $cut2) {
+ $final = substr($path, $cut, $cut2 - $cut);
+ }
}
+ $cached[$path] = $final;
}
return $cached[$path];
}
diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php
index 485096ac4..455695366 100644
--- a/lib/mysqlschema.php
+++ b/lib/mysqlschema.php
@@ -90,15 +90,24 @@ class MysqlSchema extends Schema
* @param string $name Name of the table to get
*
* @return TableDef tabledef for that table.
+ * @throws SchemaTableMissingException
*/
public function getTableDef($name)
{
- $res = $this->conn->query('DESCRIBE ' . $name);
+ $query = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS " .
+ "WHERE TABLE_SCHEMA='%s' AND TABLE_NAME='%s'";
+ $schema = $this->conn->dsn['database'];
+ $sql = sprintf($query, $schema, $name);
+ $res = $this->conn->query($sql);
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
}
+ if ($res->numRows() == 0) {
+ $res->free();
+ throw new SchemaTableMissingException("No such table: $name");
+ }
$td = new TableDef();
@@ -111,9 +120,9 @@ class MysqlSchema extends Schema
$cd = new ColumnDef();
- $cd->name = $row['Field'];
+ $cd->name = $row['COLUMN_NAME'];
- $packed = $row['Type'];
+ $packed = $row['COLUMN_TYPE'];
if (preg_match('/^(\w+)\((\d+)\)$/', $packed, $match)) {
$cd->type = $match[1];
@@ -122,18 +131,58 @@ class MysqlSchema extends Schema
$cd->type = $packed;
}
- $cd->nullable = ($row['Null'] == 'YES') ? true : false;
- $cd->key = $row['Key'];
- $cd->default = $row['Default'];
- $cd->extra = $row['Extra'];
+ $cd->nullable = ($row['IS_NULLABLE'] == 'YES') ? true : false;
+ $cd->key = $row['COLUMN_KEY'];
+ $cd->default = $row['COLUMN_DEFAULT'];
+ $cd->extra = $row['EXTRA'];
+
+ // Autoincrement is stuck into the extra column.
+ // Pull it out so we don't accidentally mod it every time...
+ $extra = preg_replace('/(^|\s)auto_increment(\s|$)/i', '$1$2', $cd->extra);
+ if ($extra != $cd->extra) {
+ $cd->extra = trim($extra);
+ $cd->auto_increment = true;
+ }
+
+ // mysql extensions -- not (yet) used by base class
+ $cd->charset = $row['CHARACTER_SET_NAME'];
+ $cd->collate = $row['COLLATION_NAME'];
$td->columns[] = $cd;
}
+ $res->free();
return $td;
}
/**
+ * Pull the given table properties from INFORMATION_SCHEMA.
+ * Most of the good stuff is MySQL extensions.
+ *
+ * @return array
+ * @throws Exception if table info can't be looked up
+ */
+
+ function getTableProperties($table, $props)
+ {
+ $query = "SELECT %s FROM INFORMATION_SCHEMA.TABLES " .
+ "WHERE TABLE_SCHEMA='%s' AND TABLE_NAME='%s'";
+ $schema = $this->conn->dsn['database'];
+ $sql = sprintf($query, implode(',', $props), $schema, $table);
+ $res = $this->conn->query($sql);
+
+ $row = array();
+ $ok = $res->fetchInto($row, DB_FETCHMODE_ASSOC);
+ $res->free();
+
+ if ($ok) {
+ return $row;
+ } else {
+ throw new SchemaTableMissingException("No such table: $table");
+ }
+ }
+
+ /**
* Gets a ColumnDef object for a single column.
*
* Throws an exception if the table is not found.
@@ -185,35 +234,26 @@ class MysqlSchema extends Schema
}
$sql .= $this->_columnSql($cd);
-
- switch ($cd->key) {
- case 'UNI':
- $uniques[] = $cd->name;
- break;
- case 'PRI':
- $primary[] = $cd->name;
- break;
- case 'MUL':
- $indices[] = $cd->name;
- break;
- }
}
- if (count($primary) > 0) { // it really should be...
- $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")";
+ $idx = $this->_indexList($columns);
+
+ if ($idx['primary']) {
+ $sql .= ",\nconstraint primary key (" . implode(',', $idx['primary']) . ")";
}
- foreach ($uniques as $u) {
- $sql .= ",\nunique index {$name}_{$u}_idx ($u)";
+ foreach ($idx['uniques'] as $u) {
+ $key = $this->_uniqueKey($name, $u);
+ $sql .= ",\nunique index $key ($u)";
}
- foreach ($indices as $i) {
- $sql .= ",\nindex {$name}_{$i}_idx ($i)";
+ foreach ($idx['indices'] as $i) {
+ $key = $this->_key($name, $i);
+ $sql .= ",\nindex $key ($i)";
}
- $sql .= "); ";
+ $sql .= ") ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_bin; ";
- common_log(LOG_INFO, $sql);
$res = $this->conn->query($sql);
if (PEAR::isError($res)) {
@@ -224,6 +264,47 @@ class MysqlSchema extends Schema
}
/**
+ * Look over a list of column definitions and list up which
+ * indices will be present
+ */
+ private function _indexList(array $columns)
+ {
+ $list = array('uniques' => array(),
+ 'primary' => array(),
+ 'indices' => array());
+ foreach ($columns as $cd) {
+ switch ($cd->key) {
+ case 'UNI':
+ $list['uniques'][] = $cd->name;
+ break;
+ case 'PRI':
+ $list['primary'][] = $cd->name;
+ break;
+ case 'MUL':
+ $list['indices'][] = $cd->name;
+ break;
+ }
+ }
+ return $list;
+ }
+
+ /**
+ * Get the unique index key name for a given column on this table
+ */
+ function _uniqueKey($tableName, $columnName)
+ {
+ return $this->_key($tableName, $columnName);
+ }
+
+ /**
+ * Get the index key name for a given column on this table
+ */
+ function _key($tableName, $columnName)
+ {
+ return "{$tableName}_{$columnName}_idx";
+ }
+
+ /**
* Drops a table from the schema
*
* Throws an exception if the table is not found.
@@ -394,21 +475,20 @@ class MysqlSchema extends Schema
try {
$td = $this->getTableDef($tableName);
- } catch (Exception $e) {
- if (preg_match('/no such table/', $e->getMessage())) {
- return $this->createTable($tableName, $columns);
- } else {
- throw $e;
- }
+ } catch (SchemaTableMissingException $e) {
+ return $this->createTable($tableName, $columns);
}
$cur = $this->_names($td->columns);
$new = $this->_names($columns);
- $toadd = array_diff($new, $cur);
- $todrop = array_diff($cur, $new);
- $same = array_intersect($new, $cur);
- $tomod = array();
+ $dropIndex = array();
+ $toadd = array_diff($new, $cur);
+ $todrop = array_diff($cur, $new);
+ $same = array_intersect($new, $cur);
+ $tomod = array();
+ $addIndex = array();
+ $tableProps = array();
foreach ($same as $m) {
$curCol = $this->_byName($td->columns, $m);
@@ -416,10 +496,64 @@ class MysqlSchema extends Schema
if (!$newCol->equals($curCol)) {
$tomod[] = $newCol->name;
+ continue;
+ }
+
+ // Earlier versions may have accidentally left tables at default
+ // charsets which might be latin1 or other freakish things.
+ if ($this->_isString($curCol)) {
+ if ($curCol->charset != 'utf8') {
+ $tomod[] = $newCol->name;
+ continue;
+ }
+ }
+ }
+
+ // Find any indices we have to change...
+ $curIdx = $this->_indexList($td->columns);
+ $newIdx = $this->_indexList($columns);
+
+ if ($curIdx['primary'] != $newIdx['primary']) {
+ if ($curIdx['primary']) {
+ $dropIndex[] = 'drop primary key';
+ }
+ if ($newIdx['primary']) {
+ $keys = implode(',', $newIdx['primary']);
+ $addIndex[] = "add constraint primary key ($keys)";
}
}
- if (count($toadd) + count($todrop) + count($tomod) == 0) {
+ $dropUnique = array_diff($curIdx['uniques'], $newIdx['uniques']);
+ $addUnique = array_diff($newIdx['uniques'], $curIdx['uniques']);
+ foreach ($dropUnique as $columnName) {
+ $dropIndex[] = 'drop key ' . $this->_uniqueKey($tableName, $columnName);
+ }
+ foreach ($addUnique as $columnName) {
+ $addIndex[] = 'add constraint unique key ' . $this->_uniqueKey($tableName, $columnName) . " ($columnName)";;
+ }
+
+ $dropMultiple = array_diff($curIdx['indices'], $newIdx['indices']);
+ $addMultiple = array_diff($newIdx['indices'], $curIdx['indices']);
+ foreach ($dropMultiple as $columnName) {
+ $dropIndex[] = 'drop key ' . $this->_key($tableName, $columnName);
+ }
+ foreach ($addMultiple as $columnName) {
+ $addIndex[] = 'add key ' . $this->_key($tableName, $columnName) . " ($columnName)";
+ }
+
+ // Check for table properties: make sure we're using a sane
+ // engine type and charset/collation.
+ // @fixme make the default engine configurable?
+ $oldProps = $this->getTableProperties($tableName, array('ENGINE', 'TABLE_COLLATION'));
+ if (strtolower($oldProps['ENGINE']) != 'innodb') {
+ $tableProps['ENGINE'] = 'InnoDB';
+ }
+ if (strtolower($oldProps['TABLE_COLLATION']) != 'utf8_bin') {
+ $tableProps['DEFAULT CHARSET'] = 'utf8';
+ $tableProps['COLLATE'] = 'utf8_bin';
+ }
+
+ if (count($dropIndex) + count($toadd) + count($todrop) + count($tomod) + count($addIndex) + count($tableProps) == 0) {
// nothing to do
return true;
}
@@ -429,6 +563,10 @@ class MysqlSchema extends Schema
$phrase = array();
+ foreach ($dropIndex as $indexSql) {
+ $phrase[] = $indexSql;
+ }
+
foreach ($toadd as $columnName) {
$cd = $this->_byName($columns, $columnName);
@@ -445,8 +583,17 @@ class MysqlSchema extends Schema
$phrase[] = 'MODIFY COLUMN ' . $this->_columnSql($cd);
}
+ foreach ($addIndex as $indexSql) {
+ $phrase[] = $indexSql;
+ }
+
+ foreach ($tableProps as $key => $val) {
+ $phrase[] = "$key=$val";
+ }
+
$sql = 'ALTER TABLE ' . $tableName . ' ' . implode(', ', $phrase);
+ common_log(LOG_DEBUG, __METHOD__ . ': ' . $sql);
$res = $this->conn->query($sql);
if (PEAR::isError($res)) {
@@ -519,6 +666,10 @@ class MysqlSchema extends Schema
$sql .= "{$cd->type} ";
}
+ if ($this->_isString($cd)) {
+ $sql .= " CHARACTER SET utf8 ";
+ }
+
if (!empty($cd->default)) {
$sql .= "default {$cd->default} ";
} else {
@@ -535,4 +686,13 @@ class MysqlSchema extends Schema
return $sql;
}
+
+ /**
+ * Is this column a string type?
+ */
+ private function _isString(ColumnDef $cd)
+ {
+ $strings = array('char', 'varchar', 'text');
+ return in_array(strtolower($cd->type), $strings);
+ }
}
diff --git a/lib/noticelist.php b/lib/noticelist.php
index 88a925241..0d4cd4dd9 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -442,11 +442,14 @@ class NoticeListItem extends Widget
'title' => $latlon),
$name);
} else {
- $this->out->elementStart('a', array('href' => $url));
- $this->out->element('abbr', array('class' => 'geo',
- 'title' => $latlon),
- $name);
- $this->out->elementEnd('a');
+ $xstr = new XMLStringer(false);
+ $xstr->elementStart('a', array('href' => $url,
+ 'rel' => 'external'));
+ $xstr->element('abbr', array('class' => 'geo',
+ 'title' => $latlon),
+ $name);
+ $xstr->elementEnd('a');
+ $this->out->raw($xstr->getString());
}
$this->out->elementEnd('span');
}
diff --git a/lib/pgsqlschema.php b/lib/pgsqlschema.php
index 91bc09667..715065d77 100644
--- a/lib/pgsqlschema.php
+++ b/lib/pgsqlschema.php
@@ -61,7 +61,8 @@ class PgsqlSchema extends Schema
public function getTableDef($name)
{
- $res = $this->conn->query("select *, column_default as default, is_nullable as Null, udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'");
+ $res = $this->conn->query("SELECT *, column_default as default, is_nullable as Null,
+ udt_name as Type, column_name AS Field from INFORMATION_SCHEMA.COLUMNS where table_name = '$name'");
if (PEAR::isError($res)) {
throw new Exception($res->getMessage());
@@ -72,6 +73,9 @@ class PgsqlSchema extends Schema
$td->name = $name;
$td->columns = array();
+ if ($res->numRows() == 0 ) {
+ throw new Exception('no such table'); //pretend to be the msyql error. yeah, this sucks.
+ }
$row = array();
while ($res->fetchInto($row, DB_FETCHMODE_ASSOC)) {
@@ -166,12 +170,10 @@ class PgsqlSchema extends Schema
}
if (count($primary) > 0) { // it really should be...
- $sql .= ",\nconstraint primary key (" . implode(',', $primary) . ")";
+ $sql .= ",\n primary key (" . implode(',', $primary) . ")";
}
- foreach ($uniques as $u) {
- $sql .= ",\nunique index {$name}_{$u}_idx ($u)";
- }
+
foreach ($indices as $i) {
$sql .= ",\nindex {$name}_{$i}_idx ($i)";
@@ -179,6 +181,10 @@ class PgsqlSchema extends Schema
$sql .= "); ";
+
+ foreach ($uniques as $u) {
+ $sql .= "\n CREATE index {$name}_{$u}_idx ON {$name} ($u); ";
+ }
$res = $this->conn->query($sql);
if (PEAR::isError($res)) {
@@ -210,6 +216,22 @@ class PgsqlSchema extends Schema
}
/**
+ * Translate the (mostly) mysql-ish column types into somethings more standard
+ * @param string column type
+ *
+ * @return string postgres happy column type
+ */
+ private function _columnTypeTranslation($type) {
+ $map = array(
+ 'datetime' => 'timestamp'
+ );
+ if(!empty($map[$type])) {
+ return $map[$type];
+ }
+ return $type;
+ }
+
+ /**
* Adds an index to a table.
*
* If no name is provided, a name will be made up based
@@ -359,6 +381,7 @@ class PgsqlSchema extends Schema
try {
$td = $this->getTableDef($tableName);
+
} catch (Exception $e) {
if (preg_match('/no such table/', $e->getMessage())) {
return $this->createTable($tableName, $columns);
@@ -477,11 +500,12 @@ class PgsqlSchema extends Schema
private function _columnSql($cd)
{
$sql = "{$cd->name} ";
+ $type = $this->_columnTypeTranslation($cd->type);
if (!empty($cd->size)) {
- $sql .= "{$cd->type}({$cd->size}) ";
+ $sql .= "{$type}({$cd->size}) ";
} else {
- $sql .= "{$cd->type} ";
+ $sql .= "{$type} ";
}
if (!empty($cd->default)) {
diff --git a/lib/poco.php b/lib/poco.php
new file mode 100644
index 000000000..2157062b3
--- /dev/null
+++ b/lib/poco.php
@@ -0,0 +1,240 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class PoCo
+{
+ const NS = 'http://portablecontacts.net/spec/1.0';
+
+ const USERNAME = 'preferredUsername';
+ const DISPLAYNAME = 'displayName';
+ const NOTE = 'note';
+
+ public $preferredUsername;
+ public $displayName;
+ public $note;
+ public $address;
+ public $urls = array();
+
+ function __construct($element = null)
+ {
+ if (empty($element)) {
+ return;
+ }
+
+ $this->preferredUsername = ActivityUtils::childContent(
+ $element,
+ self::USERNAME,
+ self::NS
+ );
+
+ $this->displayName = ActivityUtils::childContent(
+ $element,
+ self::DISPLAYNAME,
+ self::NS
+ );
+
+ $this->note = ActivityUtils::childContent(
+ $element,
+ self::NOTE,
+ self::NS
+ );
+
+ $this->address = $this->_getAddress($element);
+ $this->urls = $this->_getURLs($element);
+ }
+
+ private function _getURLs($element)
+ {
+ $urlEls = $element->getElementsByTagnameNS(self::NS, PoCoURL::URLS);
+ $urls = array();
+
+ foreach ($urlEls as $urlEl) {
+
+ $type = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::TYPE,
+ PoCo::NS
+ );
+
+ $value = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::VALUE,
+ PoCo::NS
+ );
+
+ $primary = ActivityUtils::childContent(
+ $urlEl,
+ PoCoURL::PRIMARY,
+ PoCo::NS
+ );
+
+ $isPrimary = false;
+
+ if (isset($primary) && $primary == 'true') {
+ $isPrimary = true;
+ }
+
+ // @todo check to make sure a primary hasn't already been added
+
+ array_push($urls, new PoCoURL($type, $value, $isPrimary));
+ }
+ return $urls;
+ }
+
+ private function _getAddress($element)
+ {
+ $addressEl = ActivityUtils::child(
+ $element,
+ PoCoAddress::ADDRESS,
+ PoCo::NS
+ );
+
+ if (!empty($addressEl)) {
+ $formatted = ActivityUtils::childContent(
+ $addressEl,
+ PoCoAddress::FORMATTED,
+ self::NS
+ );
+
+ if (!empty($formatted)) {
+ $address = new PoCoAddress();
+ $address->formatted = $formatted;
+ return $address;
+ }
+ }
+
+ return null;
+ }
+
+ function fromProfile($profile)
+ {
+ if (empty($profile)) {
+ return null;
+ }
+
+ $poco = new PoCo();
+
+ $poco->preferredUsername = $profile->nickname;
+ $poco->displayName = $profile->getBestName();
+
+ $poco->note = $profile->bio;
+
+ $paddy = new PoCoAddress();
+ $paddy->formatted = $profile->location;
+ $poco->address = $paddy;
+
+ if (!empty($profile->homepage)) {
+ array_push(
+ $poco->urls,
+ new PoCoURL(
+ 'homepage',
+ $profile->homepage,
+ true
+ )
+ );
+ }
+
+ return $poco;
+ }
+
+ function fromGroup($group)
+ {
+ if (empty($group)) {
+ return null;
+ }
+
+ $poco = new PoCo();
+
+ $poco->preferredUsername = $group->nickname;
+ $poco->displayName = $group->getBestName();
+
+ $poco->note = $group->description;
+
+ $paddy = new PoCoAddress();
+ $paddy->formatted = $group->location;
+ $poco->address = $paddy;
+
+ if (!empty($group->homepage)) {
+ array_push(
+ $poco->urls,
+ new PoCoURL(
+ 'homepage',
+ $group->homepage,
+ true
+ )
+ );
+ }
+
+ return $poco;
+ }
+
+ function getPrimaryURL()
+ {
+ foreach ($this->urls as $url) {
+ if ($url->primary) {
+ return $url;
+ }
+ }
+ }
+
+ function asString()
+ {
+ $xs = new XMLStringer(true);
+ $xs->element(
+ 'poco:preferredUsername',
+ null,
+ $this->preferredUsername
+ );
+
+ $xs->element(
+ 'poco:displayName',
+ null,
+ $this->displayName
+ );
+
+ if (!empty($this->note)) {
+ $xs->element('poco:note', null, common_xml_safe_str($this->note));
+ }
+
+ if (!empty($this->address)) {
+ $xs->raw($this->address->asString());
+ }
+
+ foreach ($this->urls as $url) {
+ $xs->raw($url->asString());
+ }
+
+ return $xs->getString();
+ }
+}
diff --git a/lib/pocoaddress.php b/lib/pocoaddress.php
new file mode 100644
index 000000000..60873bdc4
--- /dev/null
+++ b/lib/pocoaddress.php
@@ -0,0 +1,56 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class PoCoAddress
+{
+ const ADDRESS = 'address';
+ const FORMATTED = 'formatted';
+
+ public $formatted;
+
+ // @todo Other address fields
+
+ function asString()
+ {
+ if (!empty($this->formatted)) {
+ $xs = new XMLStringer(true);
+ $xs->elementStart('poco:address');
+ $xs->element('poco:formatted', null, common_xml_safe_str($this->formatted));
+ $xs->elementEnd('poco:address');
+ return $xs->getString();
+ }
+
+ return null;
+ }
+}
diff --git a/lib/pocourl.php b/lib/pocourl.php
new file mode 100644
index 000000000..803484d76
--- /dev/null
+++ b/lib/pocourl.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * An activity
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Feed
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @author Zach Copley <zach@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+class PoCoURL
+{
+ const URLS = 'urls';
+ const TYPE = 'type';
+ const VALUE = 'value';
+ const PRIMARY = 'primary';
+
+ public $type;
+ public $value;
+ public $primary;
+
+ function __construct($type, $value, $primary = false)
+ {
+ $this->type = $type;
+ $this->value = $value;
+ $this->primary = $primary;
+ }
+
+ function asString()
+ {
+ $xs = new XMLStringer(true);
+ $xs->elementStart('poco:urls');
+ $xs->element('poco:type', null, $this->type);
+ $xs->element('poco:value', null, $this->value);
+ if (!empty($this->primary)) {
+ $xs->element('poco:primary', null, 'true');
+ }
+ $xs->elementEnd('poco:urls');
+ return $xs->getString();
+ }
+}
diff --git a/lib/processmanager.php b/lib/processmanager.php
new file mode 100644
index 000000000..6032bfc5c
--- /dev/null
+++ b/lib/processmanager.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * i/o manager to watch for a dead parent process
+ *
+ * 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 QueueManager
+ * @package StatusNet
+ * @author Brion Vibber <brion@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class ProcessManager extends IoManager
+{
+ protected $socket;
+
+ public static function get()
+ {
+ throw new Exception("Must pass ProcessManager per-instance");
+ }
+
+ public function __construct($socket)
+ {
+ $this->socket = $socket;
+ }
+
+ /**
+ * Tell the i/o queue master if and how we can handle multi-site
+ * processes.
+ *
+ * Return one of:
+ * IoManager::SINGLE_ONLY
+ * IoManager::INSTANCE_PER_SITE
+ * IoManager::INSTANCE_PER_PROCESS
+ */
+ public static function multiSite()
+ {
+ return IoManager::INSTANCE_PER_PROCESS;
+ }
+
+ /**
+ * We won't get any input on it, but if it's broken we'll
+ * know something's gone horribly awry.
+ *
+ * @return array of resources
+ */
+ function getSockets()
+ {
+ return array($this->socket);
+ }
+
+ /**
+ * See if the parent died and request a shutdown...
+ *
+ * @param resource $socket
+ * @return boolean success
+ */
+ function handleInput($socket)
+ {
+ if (feof($socket)) {
+ common_log(LOG_INFO, "Parent process exited; shutting down child.");
+ $this->master->requestShutdown();
+ }
+ return true;
+ }
+}
+
diff --git a/lib/queuemanager.php b/lib/queuemanager.php
index fe45e8bbf..6666a6cb5 100644
--- a/lib/queuemanager.php
+++ b/lib/queuemanager.php
@@ -239,6 +239,9 @@ abstract class QueueManager extends IoManager
$this->connect('sms', 'SmsQueueHandler');
}
+ // Background user management tasks...
+ $this->connect('deluser', 'DelUserQueueHandler');
+
// Broadcasting profile updates to OMB remote subscribers
$this->connect('profile', 'ProfileQueueHandler');
diff --git a/lib/router.php b/lib/router.php
index 706120e0b..a48ee875e 100644
--- a/lib/router.php
+++ b/lib/router.php
@@ -628,6 +628,12 @@ class Router
array('action' => 'ApiTimelineTag',
'format' => '(xmljson|rss|atom)'));
+ // media related
+ $m->connect(
+ 'api/statusnet/media/upload',
+ array('action' => 'ApiMediaUpload')
+ );
+
// search
$m->connect('api/search.atom', array('action' => 'twitapisearchatom'));
$m->connect('api/search.json', array('action' => 'twitapisearchjson'));
diff --git a/lib/schema.php b/lib/schema.php
index 137b814e0..1503c96d4 100644
--- a/lib/schema.php
+++ b/lib/schema.php
@@ -485,3 +485,9 @@ class Schema
return $sql;
}
}
+
+class SchemaTableMissingException extends Exception
+{
+ // no-op
+}
+
diff --git a/lib/servererroraction.php b/lib/servererroraction.php
index 0993a63bc..9b5a553dc 100644
--- a/lib/servererroraction.php
+++ b/lib/servererroraction.php
@@ -62,15 +62,18 @@ class ServerErrorAction extends ErrorAction
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported');
- function __construct($message='Error', $code=500)
+ function __construct($message='Error', $code=500, $ex=null)
{
parent::__construct($message, $code);
$this->default = 500;
// Server errors must be logged.
-
- common_log(LOG_ERR, "ServerErrorAction: $code $message");
+ $log = "ServerErrorAction: $code $message";
+ if ($ex) {
+ $log .= "\n" . $ex->getTraceAsString();
+ }
+ common_log(LOG_ERR, $log);
}
// XXX: Should these error actions even be invokable via URI?
diff --git a/lib/spawningdaemon.php b/lib/spawningdaemon.php
index fd9ae4355..2f9f6e32e 100644
--- a/lib/spawningdaemon.php
+++ b/lib/spawningdaemon.php
@@ -71,6 +71,8 @@ abstract class SpawningDaemon extends Daemon
*/
function run()
{
+ $this->initPipes();
+
$children = array();
for ($i = 1; $i <= $this->threads; $i++) {
$pid = pcntl_fork();
@@ -129,6 +131,34 @@ abstract class SpawningDaemon extends Daemon
}
/**
+ * Create an IPC socket pair which child processes can use to detect
+ * if the parent process has been killed.
+ */
+ function initPipes()
+ {
+ $sockets = stream_socket_pair(STREAM_PF_UNIX, STREAM_SOCK_STREAM, 0);
+ if ($sockets) {
+ $this->parentWriter = $sockets[0];
+ $this->parentReader = $sockets[1];
+ } else {
+ $this->log(LOG_ERROR, "Couldn't create inter-process sockets");
+ exit(1);
+ }
+ }
+
+ /**
+ * Build an IOManager that simply ensures that we have a connection
+ * to the parent process open. If it breaks, the child process will
+ * die.
+ *
+ * @return ProcessManager
+ */
+ public function processManager()
+ {
+ return new ProcessManager($this->parentReader);
+ }
+
+ /**
* Determine whether to respawn an exited subprocess based on its exit code.
* Otherwise we'll respawn all exits by default.
*
@@ -152,6 +182,8 @@ abstract class SpawningDaemon extends Daemon
*/
protected function initAndRunChild($thread)
{
+ // Close the writer end of our parent<->children pipe.
+ fclose($this->parentWriter);
$this->set_id($this->get_id() . "." . $thread);
$this->resetDb();
$exitCode = $this->runThread();
diff --git a/lib/statusnet.php b/lib/statusnet.php
index afb8f5af0..776cfb579 100644
--- a/lib/statusnet.php
+++ b/lib/statusnet.php
@@ -341,11 +341,7 @@ class StatusNet
// Backwards compatibility
if (array_key_exists('memcached', $config)) {
if ($config['memcached']['enabled']) {
- if(class_exists('Memcached')) {
- addPlugin('Memcached', array('servers' => $config['memcached']['server']));
- } else {
- addPlugin('Memcache', array('servers' => $config['memcached']['server']));
- }
+ addPlugin('Memcache', array('servers' => $config['memcached']['server']));
}
if (!empty($config['memcached']['base'])) {
diff --git a/lib/subs.php b/lib/subs.php
index e2ce0667e..165bbaa8f 100644
--- a/lib/subs.php
+++ b/lib/subs.php
@@ -43,46 +43,3 @@ function subs_unsubscribe_to($user, $other)
return $e->getMessage();
}
}
-
-function subs_unsubscribe_from($user, $other){
- $local = User::staticGet("nickname",$other);
- if($local){
- return subs_unsubscribe_to($local,$user);
- } else {
- try {
- $remote = Profile::staticGet("nickname",$other);
- if(is_string($remote)){
- return $remote;
- }
- if (Event::handle('StartUnsubscribe', array($remote,$user))) {
-
- $sub = DB_DataObject::factory('subscription');
-
- $sub->subscriber = $remote->id;
- $sub->subscribed = $user->id;
-
- $sub->find(true);
-
- // note we checked for existence above
-
- if (!$sub->delete())
- return _('Couldn\'t delete subscription.');
-
- $cache = common_memcache();
-
- if ($cache) {
- $cache->delete(common_cache_key('user:notices_with_friends:' . $remote->id));
- }
-
-
- $user->blowSubscribersCount();
- $remote->blowSubscribersCount();
-
- Event::handle('EndUnsubscribe', array($remote, $user));
- }
- } catch (Exception $e) {
- return $e->getMessage();
- }
- }
-}
-
diff --git a/lib/usernoprofileexception.php b/lib/usernoprofileexception.php
new file mode 100644
index 000000000..6744d2529
--- /dev/null
+++ b/lib/usernoprofileexception.php
@@ -0,0 +1,74 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * class for an exception when the user profile is missing
+ *
+ * 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 Exception
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ exit(1);
+}
+
+/**
+ * Class for an exception when the user profile is missing
+ *
+ * @category Exception
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPLv3
+ * @link http://status.net/
+ */
+
+class UserNoProfileException extends ServerException
+{
+ var $user = null;
+
+ /**
+ * constructor
+ *
+ * @param User $user User that's missing a profile
+ */
+
+ public function __construct($user)
+ {
+ $this->user = $user;
+
+ $message = sprintf(_("User %s (%d) has no profile record."),
+ $user->nickname, $user->id);
+
+ parent::__construct($message);
+ }
+
+ /**
+ * Accessor for user
+ *
+ * @return User the user that triggered this exception
+ */
+
+ public function getUser()
+ {
+ return $this->user;
+ }
+}
diff --git a/lib/userprofile.php b/lib/userprofile.php
index 8464c2446..ca060842b 100644
--- a/lib/userprofile.php
+++ b/lib/userprofile.php
@@ -71,7 +71,8 @@ class UserProfile extends Widget
{
if (Event::handle('StartProfilePageProfileSection', array(&$this->out, $this->profile))) {
- $this->out->elementStart('div', 'entity_profile vcard author');
+ $this->out->elementStart('div', array('id' => 'i',
+ 'class' => 'entity_profile vcard author'));
$this->out->element('h2', null, _('User profile'));
if (Event::handle('StartProfilePageProfileElements', array(&$this->out, $this->profile))) {
@@ -228,6 +229,17 @@ class UserProfile extends Widget
function showEntityActions()
{
+ if ($this->profile->hasRole(Profile_role::DELETED)) {
+ $this->out->elementStart('div', 'entity_actions');
+ $this->out->element('h2', null, _('User actions'));
+ $this->out->elementStart('ul');
+ $this->out->elementStart('p', array('class' => 'profile_deleted'));
+ $this->out->text(_('User deletion in progress...'));
+ $this->out->elementEnd('p');
+ $this->out->elementEnd('ul');
+ $this->out->elementEnd('div');
+ return;
+ }
if (Event::handle('StartProfilePageActionsSection', array(&$this->out, $this->profile))) {
$cur = common_current_user();
diff --git a/lib/util.php b/lib/util.php
index 6a8494275..0f639df38 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -52,17 +52,43 @@ function common_init_language()
{
mb_internal_encoding('UTF-8');
- // gettext seems very picky... We first need to setlocale()
- // to a locale which _does_ exist on the system, and _then_
- // we can set in another locale that may not be set up
- // (say, ga_ES for Galego/Galician) it seems to take it.
- common_init_locale("en_US");
-
// Note that this setlocale() call may "fail" but this is harmless;
// gettext will still select the right language.
$language = common_language();
$locale_set = common_init_locale($language);
+ if (!$locale_set) {
+ // The requested locale doesn't exist on the system.
+ //
+ // gettext seems very picky... We first need to setlocale()
+ // to a locale which _does_ exist on the system, and _then_
+ // we can set in another locale that may not be set up
+ // (say, ga_ES for Galego/Galician) it seems to take it.
+ //
+ // For some reason C and POSIX which are guaranteed to work
+ // don't do the job. en_US.UTF-8 should be there most of the
+ // time, but not guaranteed.
+ $ok = common_init_locale("en_US");
+ if (!$ok) {
+ // Try to find a complete, working locale...
+ // @fixme shelling out feels awfully inefficient
+ // but I don't think there's a more standard way.
+ $all = `locale -a`;
+ foreach (explode("\n", $all) as $locale) {
+ if (preg_match('/\.utf[-_]?8$/i', $locale)) {
+ $ok = setlocale(LC_ALL, $locale);
+ if ($ok) {
+ break;
+ }
+ }
+ }
+ if (!$ok) {
+ common_log(LOG_ERR, "Unable to find a UTF-8 locale on this system; UI translations may not work.");
+ }
+ }
+ $locale_set = common_init_locale($language);
+ }
+
setlocale(LC_CTYPE, 'C');
// So we do not have to make people install the gettext locales
$path = common_config('site','locale_path');
@@ -133,6 +159,11 @@ function common_munge_password($password, $id)
function common_check_user($nickname, $password)
{
+ // empty nickname always unacceptable
+ if (empty($nickname)) {
+ return false;
+ }
+
$authenticatedUser = false;
if (Event::handle('StartCheckPassword', array($nickname, $password, &$authenticatedUser))) {
@@ -1453,7 +1484,15 @@ function common_copy_args($from)
$to = array();
$strip = get_magic_quotes_gpc();
foreach ($from as $k => $v) {
- $to[$k] = ($strip) ? stripslashes($v) : $v;
+ if($strip) {
+ if(is_array($v)) {
+ $to[$k] = common_copy_args($v);
+ } else {
+ $to[$k] = stripslashes($v);
+ }
+ } else {
+ $to[$k] = $v;
+ }
}
return $to;
}
diff --git a/locale/ar/LC_MESSAGES/statusnet.po b/locale/ar/LC_MESSAGES/statusnet.po
index 56029bc82..16ea19752 100644
--- a/locale/ar/LC_MESSAGES/statusnet.po
+++ b/locale/ar/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:16+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:39:53+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ar\n"
"X-Message-Group: out-statusnet\n"
@@ -94,7 +94,7 @@ msgstr "لا صÙحة كهذه"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -103,10 +103,8 @@ msgstr "لا صÙحة كهذه"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "لا مستخدم كهذا."
@@ -197,14 +195,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيلة API."
@@ -217,8 +215,8 @@ msgstr "لم يتم العثور على وسيلة API."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "تتطلب هذه الطريقة POST."
@@ -247,7 +245,7 @@ msgid "Could not save profile."
msgstr "لم يمكن Ø­Ùظ الملÙ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -331,7 +329,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "هذه الحالة Ù…Ùضلة بالÙعل."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "تعذّر إنشاء Ù…Ùضلة."
@@ -448,7 +446,7 @@ msgstr "لم توجد المجموعة!"
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -499,7 +497,7 @@ msgstr "حجم غير صالح."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -565,9 +563,9 @@ msgstr "الحساب"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "الاسم المستعار"
@@ -636,12 +634,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "نسق غير مدعوم."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -651,7 +649,7 @@ msgstr ""
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -661,7 +659,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "مسار %s الزمني العام"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -676,12 +674,12 @@ msgstr "كرر إلى %s"
msgid "Repeats of %s"
msgstr "تكرارات %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومة ب%s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -709,7 +707,7 @@ msgstr "لا حجم."
msgid "Invalid size."
msgstr "حجم غير صالح."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ø£Ùتار"
@@ -741,7 +739,7 @@ msgid "Preview"
msgstr "معاينة"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "احذÙ"
@@ -821,8 +819,8 @@ msgstr "Ùشل Ø­Ùظ معلومات المنع."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "لا مجموعة كهذه."
@@ -923,7 +921,7 @@ msgstr "أنت لست مالك هذا التطبيق."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -979,7 +977,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -1228,7 +1226,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعة."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1892,7 +1890,7 @@ msgstr "دعوة مستخدمين جدد"
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -1993,7 +1991,7 @@ msgstr "%1$s انضم للمجموعة %2$s"
msgid "You must be logged in to leave a group."
msgstr "يجب أن تلج لتغادر مجموعة."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "لست عضوا ÙÙŠ تلك المجموعة."
@@ -2103,12 +2101,12 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعة جديدة.
msgid "New message"
msgstr "رسالة جديدة"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "لا يمكنك إرسال رسائل إلى هذا المستخدم."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "لا محتوى!"
@@ -2116,7 +2114,7 @@ msgstr "لا محتوى!"
msgid "No recipient specified."
msgstr "لا مستلم Ø­Ùدّد."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2130,7 +2128,7 @@ msgstr "Ø£Ùرسلت الرسالة"
msgid "Direct message to %s sent."
msgstr "رسالة مباشرة ل%s تم إرسالها."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "خطأ أجاكس"
@@ -2243,7 +2241,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "حالة %1$s ÙÙŠ يوم %2$s"
@@ -2256,8 +2254,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@@ -2388,7 +2386,7 @@ msgstr "كلمة السر القديمة غير صحيحة"
msgid "Error saving user; invalid."
msgstr "خطأ أثناء Ø­Ùظ المستخدم؛ غير صالح."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "تعذّر Ø­Ùظ كلمة السر الجديدة."
@@ -2597,8 +2595,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 حرÙًا إنجليزيًا أو رقمًا بدون نقاط أو مساÙات"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "الاسم الكامل"
@@ -2625,9 +2623,9 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "الموقع"
@@ -2641,7 +2639,7 @@ msgstr "شارك مكاني الحالي عند إرسال إشعارات"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "الوسوم"
@@ -2872,7 +2870,7 @@ msgstr "أعد ضبط كلمة السر"
msgid "Recover password"
msgstr "استعد كلمة السر"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Ø·Ùلبت استعادة كلمة السر"
@@ -2892,41 +2890,41 @@ msgstr "أعد الضبط"
msgid "Enter a nickname or email address."
msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكتروني."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "خطأ أثناء Ø­Ùظ تأكيد العنوان."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "يجب أن تكون كلمة السر 6 محار٠أو أكثر."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "خطأ أثناء ضبط المستخدم."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3065,7 +3063,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "اشترك"
@@ -3101,7 +3099,7 @@ msgstr "لا يمكنك تكرار ملاحظتك الشخصية."
msgid "You already repeated that notice."
msgstr "أنت كررت هذه الملاحظة بالÙعل."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "مكرر"
@@ -3241,7 +3239,7 @@ msgstr "المنظمة"
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3357,67 +3355,67 @@ msgstr "مجموعة %s"
msgid "%1$s group, page %2$d"
msgstr "%1$s أعضاء المجموعة, الصÙحة %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "مل٠المجموعة الشخصي"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "مسار"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "ملاحظة"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "الكنى"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3432,7 +3430,7 @@ msgstr ""
"[انضم الآن](%%%%action.register%%%%) لتصبح عضوًا ÙÙŠ هذه المجموعة ومجموعات "
"أخرى عديدة! ([اقرأ المزيد](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3444,7 +3442,7 @@ msgstr ""
"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "الإداريون"
@@ -3969,12 +3967,12 @@ msgstr "لا مدخل هوية."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "مل٠المستخدم الشخصي"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "صورة"
@@ -4288,19 +4286,19 @@ msgstr "النسخة"
msgid "Author(s)"
msgstr "المؤلÙ(ون)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4338,44 +4336,44 @@ msgstr "تعذّر إدراج الرسالة."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "مشكلة ÙÙŠ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكلة أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
@@ -4405,29 +4403,29 @@ msgstr "لم يمكن حذ٠اشتراك ذاتي."
msgid "Couldn't delete subscription OMB token."
msgstr "تعذّر حذ٠الاشتراك."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "تعذّر حذ٠الاشتراك."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙŠ %1$s يا @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعة."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضوية المجموعة."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضوية المجموعة."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر Ø­Ùظ الاشتراك."
@@ -4633,7 +4631,7 @@ msgstr "الجسر"
msgid "StatusNet software license"
msgstr "رخصة برنامج StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4642,12 +4640,12 @@ msgstr ""
"**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4658,41 +4656,41 @@ msgstr ""
"المتوÙر تحت [رخصة غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "رخصة محتوى الموقع"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "الرخصة."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "بعد"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "قبل"
@@ -4708,6 +4706,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4795,7 +4797,7 @@ msgstr "ضبط المسارات"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4823,7 +4825,7 @@ msgstr "مسار المصدر"
#: lib/applicationeditform.php:218
msgid "URL of the homepage of this application"
-msgstr ""
+msgstr "مسار صÙحة هذا التطبيق"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
@@ -4869,11 +4871,11 @@ msgstr "اسحب"
msgid "Attachments"
msgstr "مرÙقات"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "المؤلÙ"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "المزود"
@@ -4893,37 +4895,50 @@ msgstr "تغيير كلمة السر Ùشل"
msgid "Password changing is not allowed"
msgstr "تغيير كلمة السر غير مسموح به"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "نتائج الأمر"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "اكتمل الأمر"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Ùشل الأمر"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "الملاحظة بهذا الرقم غير موجودة"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "ليس للمستخدم إشعار أخير"
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "لم يمكن إيجاد مستخدم بالاسم %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "التنبيه تم إرساله إلى %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -4934,169 +4949,167 @@ msgstr ""
"المشتركون: %2$s\n"
"الإشعارات: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "الملاحظة بهذا الرقم غير موجودة"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "ليس للمستخدم إشعار أخير"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "أنت بالÙعل عضو ÙÙŠ هذه المجموعة"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "لم يمكن ضم المستخدم %s إلى المجموعة %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s انضم إلى مجموعة %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "لم يمكن إزالة المستخدم %s من المجموعة %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s ترك المجموعة %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "الاسم الكامل: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "الموقع: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "الصÙحة الرئيسية: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "عن: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "رسالة مباشرة إلى %s تم إرسالها"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "لا يمكنك تكرار ملاحظتك الخاصة"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "كرر بالÙعل هذا الإشعار"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "الإشعار من %s مكرر"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "خطأ تكرار الإشعار."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "رÙد على رسالة %s"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "خطأ أثناء Ø­Ùظ الإشعار."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "لا مستخدم كهذا"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Ù…Ùشترك ب%s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "الأمر لم ÙŠÙجهزّ بعد."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "الإشعار Ù…ÙØ·ÙØ£."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "تعذّر إطÙاء الإشعارات."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "الإشعار يعمل."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "تعذّر تشغيل الإشعار."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "ألغ٠الاشتراك"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "لست Ù…Ùشتركًا بأي أحد."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "لست مشتركًا بأحد."
@@ -5106,11 +5119,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "لا أحد مشترك بك."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "لا أحد مشترك بك."
@@ -5120,11 +5133,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "لست عضوًا ÙÙŠ أي مجموعة."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "لست عضوًا ÙÙŠ أي مجموعة."
@@ -5134,7 +5147,7 @@ msgstr[3] "أنت عضو ÙÙŠ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5175,20 +5188,58 @@ msgid ""
"tracks - not yet implemented.\n"
"tracking - not yet implemented.\n"
msgstr ""
-
-#: lib/common.php:148
+"الأوامر:\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"
+"lose <nickname> - أجبر المستخدم على عدم تتبعك\n"
+"fav <nickname> - اجعل آخر إشعار من المستخدم Ù…Ùضلًا\n"
+"fav #<notice_id> - اجعل الإشعار ذا رقم الهوية المعطى Ù…Ùضلا\n"
+"repeat #<notice_id> - كرّر الإشعار ذا رقم الهوية المعطى\n"
+"repeat <nickname> - كرّر آخر إشعار من المستخدم\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:136
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -5362,49 +5413,49 @@ msgstr "وسوم ÙÙŠ إشعارات المجموعة %s"
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "هذا المل٠كبير جدًا. إن أقصى حجم للملÙات هو %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "نوع مل٠غير معروÙ"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "ميجابايت"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "كيلوبايت"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "مصدر صندوق وارد غير معرو٠%d."
@@ -5621,7 +5672,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "من"
@@ -5771,23 +5822,23 @@ msgstr "غ"
msgid "at"
msgstr "ÙÙŠ"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "ÙÙŠ السياق"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "مكرر بواسطة"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5929,7 +5980,7 @@ msgstr "كرّر هذا الإشعار"
msgid "Revoke the \"%s\" role from this user"
msgstr "امنع هذا المستخدم من هذه المجموعة"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6055,90 +6106,94 @@ msgstr "ألغ٠الاشتراك مع هذا المستخدم"
msgid "Unsubscribe"
msgstr "ألغ٠الاشتراك"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "عدّل الأÙتار"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "تصرÙات المستخدم"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "عدّل إعدادات المل٠الشخصي"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "عدّل"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "أرسل رسالة مباشرة إلى هذا المستخدم"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "رسالة"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "مل٠المستخدم الشخصي"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "إداري"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "مراقب"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
@@ -6152,7 +6207,7 @@ msgstr "%s ليس لونًا صحيحًا!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index aaf1d89bd..1426c4d04 100644
--- a/locale/arz/LC_MESSAGES/statusnet.po
+++ b/locale/arz/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:19+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:39:57+0000\n"
"Language-Team: Egyptian Spoken Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: arz\n"
"X-Message-Group: out-statusnet\n"
@@ -100,7 +100,7 @@ msgstr "لا صÙحه كهذه"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -109,10 +109,8 @@ msgstr "لا صÙحه كهذه"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "لا مستخدم كهذا."
@@ -203,14 +201,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "الـ API method مش موجوده."
@@ -223,8 +221,8 @@ msgstr "الـ API method مش موجوده."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "تتطلب هذه الطريقه POST."
@@ -253,7 +251,7 @@ msgid "Could not save profile."
msgstr "لم يمكن Ø­Ùظ الملÙ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -337,7 +335,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "الحاله دى موجوده Ùعلا ÙÙ‰ التÙضيلات."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "تعذّر إنشاء Ù…Ùضله."
@@ -454,7 +452,7 @@ msgstr "لم توجد المجموعة!"
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -505,7 +503,7 @@ msgstr "حجم غير صالح."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -571,9 +569,9 @@ msgstr "الحساب"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "الاسم المستعار"
@@ -642,12 +640,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "نسق غير مدعوم."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -657,7 +655,7 @@ msgstr ""
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -667,7 +665,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "مسار %s الزمنى العام"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -682,12 +680,12 @@ msgstr "كرر إلى %s"
msgid "Repeats of %s"
msgstr "تكرارات %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومه ب%s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -715,7 +713,7 @@ msgstr "لا حجم."
msgid "Invalid size."
msgstr "حجم غير صالح."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ø£Ùتار"
@@ -747,7 +745,7 @@ msgid "Preview"
msgstr "عاين"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "احذÙ"
@@ -827,8 +825,8 @@ msgstr "Ùشل Ø­Ùظ معلومات المنع."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "لا مجموعه كهذه."
@@ -931,7 +929,7 @@ msgstr "انت مش بتملك الapplication دى."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -990,7 +988,7 @@ msgstr "أمتأكد من أنك تريد حذ٠هذا الإشعار؟"
msgid "Do not delete this notice"
msgstr "لا تحذ٠هذا الإشعار"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "احذ٠هذا الإشعار"
@@ -1240,7 +1238,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعه."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1904,7 +1902,7 @@ msgstr "دعوه مستخدمين جدد"
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2006,7 +2004,7 @@ msgstr "%1$s دخل جروپ %2$s"
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "لست عضوا ÙÙ‰ تلك المجموعه."
@@ -2116,12 +2114,12 @@ msgstr "استخدم هذا النموذج لإنشاء مجموعه جديده.
msgid "New message"
msgstr "رساله جديدة"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "لا محتوى!"
@@ -2129,7 +2127,7 @@ msgstr "لا محتوى!"
msgid "No recipient specified."
msgstr "لا مستلم Ø­Ùدّد."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2143,7 +2141,7 @@ msgstr "Ø£Ùرسلت الرسالة"
msgid "Direct message to %s sent."
msgstr "رساله مباشره اتبعتت لـ%s."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "خطأ أجاكس"
@@ -2254,7 +2252,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr ""
@@ -2267,8 +2265,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr " مش نظام بيانات مدعوم."
@@ -2399,7 +2397,7 @@ msgstr "كلمه السر القديمه غير صحيحة"
msgid "Error saving user; invalid."
msgstr "خطأ أثناء Ø­Ùظ المستخدم؛ غير صالح."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "تعذّر Ø­Ùظ كلمه السر الجديده."
@@ -2608,8 +2606,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "الاسم الكامل"
@@ -2636,9 +2634,9 @@ msgid "Bio"
msgstr "السيرة"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "الموقع"
@@ -2652,7 +2650,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "الوسوم"
@@ -2882,7 +2880,7 @@ msgstr "أعد ضبط كلمه السر"
msgid "Recover password"
msgstr "استعد كلمه السر"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Ø·Ùلبت استعاده كلمه السر"
@@ -2902,41 +2900,41 @@ msgstr "أعد الضبط"
msgid "Enter a nickname or email address."
msgstr "أدخل اسمًا مستعارًا أو عنوان بريد إلكترونى."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "خطأ أثناء Ø­Ùظ تأكيد العنوان."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "يجب أن تكون كلمه السر 6 محار٠أو أكثر."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "خطأ أثناء ضبط المستخدم."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3075,7 +3073,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "اشترك"
@@ -3111,7 +3109,7 @@ msgstr "ما ينÙعش تكرر الملاحظه بتاعتك."
msgid "You already repeated that notice."
msgstr "انت عيدت الملاحظه دى Ùعلا."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "مكرر"
@@ -3251,7 +3249,7 @@ msgstr "المنظمه"
msgid "Description"
msgstr "الوصÙ"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3367,67 +3365,67 @@ msgstr "مجموعه %s"
msgid "%1$s group, page %2$d"
msgstr "%1$s أعضاء المجموعة, الصÙحه %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "مل٠المجموعه الشخصي"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "مسار"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "ملاحظة"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "الكنى"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3437,7 +3435,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3446,7 +3444,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "الإداريون"
@@ -3973,12 +3971,12 @@ msgstr "لا مدخل هويه."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "مل٠المستخدم الشخصي"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "صورة"
@@ -4291,19 +4289,19 @@ msgstr "النسخه"
msgid "Author(s)"
msgstr "المؤلÙ/ين"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4342,44 +4340,44 @@ msgstr "تعذّر إدراج الرساله."
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. طويل جدًا."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "مشكله ÙÙ‰ Ø­Ùظ الإشعار. مستخدم غير معروÙ."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكله أثناء Ø­Ùظ الإشعار."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
@@ -4409,29 +4407,29 @@ msgstr "ما Ù†Ùعش يمسح الاشتراك الشخصى."
msgid "Couldn't delete subscription OMB token."
msgstr "تعذّر حذ٠الاشتراك."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "تعذّر حذ٠الاشتراك."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم ÙÙ‰ %1$s يا @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعه."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضويه المجموعه."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضويه المجموعه."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر Ø­Ùظ الاشتراك."
@@ -4653,7 +4651,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4662,12 +4660,12 @@ msgstr ""
"**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4678,41 +4676,41 @@ msgstr ""
"المتوÙر تحت [رخصه غنو Ø£Ùيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "رخصه محتوى الموقع"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "الرخصه."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "بعد"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "قبل"
@@ -4728,6 +4726,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4821,7 +4823,7 @@ msgstr "ضبط المسارات"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4895,11 +4897,11 @@ msgstr "بطّل"
msgid "Attachments"
msgstr "مرÙقات"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "المؤلÙ"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "المزود"
@@ -4919,37 +4921,50 @@ msgstr "تغيير الپاسوورد Ùشل"
msgid "Password changing is not allowed"
msgstr "تغيير الپاسوورد مش مسموح"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "نتائج الأمر"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "اكتمل الأمر"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Ùشل الأمر"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "الملاحظه بالـID ده مالهاش وجود"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "ليس للمستخدم إشعار أخير"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "ما Ù†Ùعش يلاقى يوزر بإسم %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Nudge اتبعتت لـ %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -4960,170 +4975,167 @@ msgstr ""
"المشتركون: %2$s\n"
"الإشعارات: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "الملاحظه بالـID ده مالهاش وجود"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "ليس للمستخدم إشعار أخير"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "انت اصلا عضو ÙÙ‰ الجروپ ده"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "ما Ù†Ùعش يدخل اليوزر %s لجروپ %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s انضم إلى مجموعه %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "ما Ù†Ùعش يشيل اليوزر %s لجروپ %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s ساب الجروپ %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "الاسم الكامل: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "الموقع: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "الصÙحه الرئيسية: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "عن: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "رساله مباشره اتبعتت لـ %s"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "الملاحظه بتاعتك مش ناÙعه تتكرر"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "كرر بالÙعل هذا الإشعار"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "الإشعار من %s مكرر"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "خطأ تكرار الإشعار."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "رÙد على رساله %s"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "خطأ أثناء Ø­Ùظ الإشعار."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-#, fuzzy
-msgid "No such user"
-msgstr "لا مستخدم كهذا."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Ù…Ùشترك ب%s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "ألغ٠الاشتراك"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "لست Ù…Ùشتركًا بأى أحد."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "لست مشتركًا بأحد."
@@ -5133,11 +5145,11 @@ msgstr[3] "أنت مشترك بهؤلاء الأشخاص:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "لا أحد مشترك بك."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "لا أحد مشترك بك."
@@ -5147,11 +5159,11 @@ msgstr[3] "هؤلاء الأشخاص مشتركون بك:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "لست عضوًا ÙÙ‰ أى مجموعه."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "لست عضوًا ÙÙ‰ أى مجموعه."
@@ -5161,7 +5173,7 @@ msgstr[3] "أنت عضو ÙÙ‰ هذه المجموعات:"
msgstr[4] ""
msgstr[5] ""
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5203,19 +5215,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "اذهب إلى المÙثبّت."
@@ -5389,49 +5401,49 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "هذا المل٠كبير جدًا. إن أقصى حجم للملÙات هو %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "نوع مل٠غير معروÙ"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "ميجابايت"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "كيلوبايت"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "مصدر الـinbox مش معرو٠%d."
@@ -5626,7 +5638,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "من"
@@ -5777,23 +5789,23 @@ msgstr "غ"
msgid "at"
msgstr "ÙÙŠ"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "ÙÙ‰ السياق"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "متكرر من"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "رÙد على هذا الإشعار"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "رÙد"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "الإشعار مكرر"
@@ -5935,7 +5947,7 @@ msgstr "كرر هذا الإشعار"
msgid "Revoke the \"%s\" role from this user"
msgstr "امنع هذا المستخدم من هذه المجموعة"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6061,91 +6073,95 @@ msgstr "ألغ٠الاشتراك مع هذا المستخدم"
msgid "Unsubscribe"
msgstr "ألغ٠الاشتراك"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "عدّل الأÙتار"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "تصرÙات المستخدم"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "عدّل إعدادات المل٠الشخصي"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "عدّل"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "أرسل رساله مباشره إلى هذا المستخدم"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "رسالة"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "مل٠المستخدم الشخصي"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "الإداريون"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
@@ -6159,7 +6175,7 @@ msgstr "%s ليس لونًا صحيحًا!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index 3a6b5b047..83acdaab6 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:22+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:00+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
@@ -95,7 +95,7 @@ msgstr "ÐÑма такака Ñтраница."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -104,10 +104,8 @@ msgstr "ÐÑма такака Ñтраница."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "ÐÑма такъв потребител"
@@ -198,14 +196,14 @@ msgstr "Бележки от %1$s и приÑтели в %2$s."
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Ðе е открит методът в API."
@@ -218,8 +216,8 @@ msgstr "Ðе е открит методът в API."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Този метод изиÑква заÑвка POST."
@@ -248,7 +246,7 @@ msgid "Could not save profile."
msgstr "Грешка при запазване на профила."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -337,7 +335,7 @@ msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентифика
msgid "This status is already a favorite."
msgstr "Тази бележка вече е отбелÑзана като любима!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Грешка при отбелÑзване като любима."
@@ -459,7 +457,7 @@ msgstr "Групата не е открита."
msgid "You are already a member of that group."
msgstr "Вече членувате в тази група."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -510,7 +508,7 @@ msgstr "Ðеправилен размер."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -577,9 +575,9 @@ msgstr "Сметка"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "ПÑевдоним"
@@ -649,12 +647,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Ðеподдържан формат."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / ОтбелÑзани като любими от %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s бележки отбелÑзани като любими от %s / %s."
@@ -664,7 +662,7 @@ msgstr "%s бележки отбелÑзани като любими от %s / %
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Реплики на %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s реплики на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ %2$s / %3$s."
@@ -674,7 +672,7 @@ msgstr "%1$s реплики на ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¾Ñ‚ %2$s / %3$s."
msgid "%s public timeline"
msgstr "Общ поток на %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -689,12 +687,12 @@ msgstr "Повторено за %s"
msgid "Repeats of %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð¸Ñ Ð½Ð° %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Бележки Ñ ÐµÑ‚Ð¸ÐºÐµÑ‚ %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
@@ -723,7 +721,7 @@ msgstr "ÐÑма размер."
msgid "Invalid size."
msgstr "Ðеправилен размер."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватар"
@@ -756,7 +754,7 @@ msgid "Preview"
msgstr "Преглед"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Изтриване"
@@ -836,8 +834,8 @@ msgstr "Грешка при запиÑване данните за блокирÐ
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "ÐÑма такава група"
@@ -943,7 +941,7 @@ msgstr "Ðе членувате в тази група."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Имаше проблем ÑÑŠÑ ÑеÑиÑта ви в Ñайта."
@@ -1002,7 +1000,7 @@ msgstr "ÐаиÑтина ли иÑкате да изтриете тази бел
msgid "Do not delete this notice"
msgstr "Да не Ñе изтрива бележката"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Изтриване на бележката"
@@ -1268,7 +1266,7 @@ msgstr "ОпиÑанието е твърде дълго (до %d Ñимвола)
msgid "Could not update group."
msgstr "Грешка при обновÑване на групата."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Грешка при отбелÑзване като любима."
@@ -1969,7 +1967,7 @@ msgstr "Покани за нови потребители"
msgid "You are already subscribed to these users:"
msgstr "Вече Ñте абонирани за Ñледните потребители:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2101,7 +2099,7 @@ msgstr "%s Ñе приÑъедини към групата %s"
msgid "You must be logged in to leave a group."
msgstr "За напуÑнете група, Ñ‚Ñ€Ñбва да Ñте влезли."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Ðе членувате в тази група."
@@ -2219,12 +2217,12 @@ msgstr "Използвайте тази бланка за Ñъздаване нÐ
msgid "New message"
msgstr "Ðово Ñъобщение"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Ðе може да изпращате ÑÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð´Ð¾ този потребител."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "ÐÑма Ñъдържание!"
@@ -2232,7 +2230,7 @@ msgstr "ÐÑма Ñъдържание!"
msgid "No recipient specified."
msgstr "Ðе е указан получател."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2248,7 +2246,7 @@ msgstr "Съобщението е изпратено"
msgid "Direct message to %s sent."
msgstr "ПрÑкото Ñъобщение до %s е изпратено."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Грешка в Ajax"
@@ -2364,7 +2362,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Бележката нÑма профил"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Бележка на %1$s от %2$s"
@@ -2377,8 +2375,8 @@ msgstr "вид Ñъдържание "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Ðеподдържан формат на данните"
@@ -2516,7 +2514,7 @@ msgstr "Грешна Ñтара парола"
msgid "Error saving user; invalid."
msgstr "Грешка при запазване на потребител — невалидноÑÑ‚."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Грешка при запазване на новата парола."
@@ -2727,8 +2725,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "От 1 до 64 малки букви или цифри, без Ð¿ÑƒÐ½ÐºÑ‚Ð¾Ð°Ñ†Ð¸Ñ Ð¸ интервали"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Пълно име"
@@ -2755,9 +2753,9 @@ msgid "Bio"
msgstr "За мен"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "МеÑтоположение"
@@ -2771,7 +2769,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Етикети"
@@ -2999,7 +2997,7 @@ msgstr "Ðова парола"
msgid "Recover password"
msgstr "ВъзÑтановÑване на паролата"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "ПоиÑкано е възÑтановÑване на парола"
@@ -3019,19 +3017,19 @@ msgstr "ОбновÑване"
msgid "Enter a nickname or email address."
msgstr "Въведете пÑевдоним или е-поща."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "ÐÑма потребител Ñ Ñ‚Ð°ÐºÐ°Ð²Ð° е-поща или потребителÑко име."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "ÐÑма указана е-поща за този потребител."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Грешка при запазване на потвърждение за адреÑ"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3039,23 +3037,23 @@ msgstr ""
"Ðа е-пощата, Ñ ÐºÐ¾Ñто Ñте региÑтрирани Ñа изпратени инÑтрукции за "
"възÑтановÑване на паролата."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Ðеочаквано подновÑване на паролата."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Паролата Ñ‚Ñ€Ñбва да е от поне 6 знака."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Паролата и потвърждението й не Ñъвпадат."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Грешка в наÑтройките на потребителÑ."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Ðовата парола е запазена. ВлÑзохте уÑпешно."
@@ -3218,7 +3216,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° профила ви в друга, ÑъвмеÑтима уÑлуга за микроблогване"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Ðбониране"
@@ -3256,7 +3254,7 @@ msgstr "Ðе можете да повтарÑте ÑобÑтвена бележÐ
msgid "You already repeated that notice."
msgstr "Вече Ñте повторили тази бележка."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Повторено"
@@ -3400,7 +3398,7 @@ msgstr "ОрганизациÑ"
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
@@ -3513,67 +3511,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Членове на групата %s, Ñтраница %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Профил на групата"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Бележка"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ПÑевдоними"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "ЕмиÑÐ¸Ñ Ñ Ð±ÐµÐ»ÐµÐ¶ÐºÐ¸ на %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "ИзходÑща ÐºÑƒÑ‚Ð¸Ñ Ð·Ð° %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Членове"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Ð’Ñички членове"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Създадена на"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3583,7 +3581,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3592,7 +3590,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -4134,12 +4132,12 @@ msgstr "ÐÑма такъв документ."
msgid "Tag %s"
msgstr "Етикети"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "ПотребителÑки профил"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Снимка"
@@ -4471,19 +4469,19 @@ msgstr "ВерÑиÑ"
msgid "Author(s)"
msgstr "Ðвтор(и)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4526,28 +4524,28 @@ msgstr "Грешка при вмъкване на Ñъобщението."
msgid "Could not update message with new URI."
msgstr "Грешка при обновÑване на бележката Ñ Ð½Ð¾Ð² URL-адреÑ."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Грешка при запиÑване на бележката. Ðепознат потребител."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4556,20 +4554,20 @@ msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново Ñлед нÑколко минути."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Забранено ви е да публикувате бележки в този Ñайт."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Проблем при запиÑване на бележката."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4602,30 +4600,30 @@ msgstr "Грешка при изтриване на абонамента."
msgid "Couldn't delete subscription OMB token."
msgstr "Грешка при изтриване на абонамента."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Грешка при изтриване на абонамента."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добре дошли в %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Грешка при Ñъздаване на групата."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Грешка при Ñъздаване на нов абонамент."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "Грешка при Ñъздаване на нов абонамент."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Грешка при Ñъздаване на нов абонамент."
@@ -4850,7 +4848,7 @@ msgstr "Табелка"
msgid "StatusNet software license"
msgstr "Лиценз на програмата StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4859,12 +4857,12 @@ msgstr ""
"**%%site.name%%** е уÑлуга за микроблогване, предоÑтавена ви от [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е уÑлуга за микроблогване. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4875,41 +4873,41 @@ msgstr ""
"доÑтъпна под [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Лиценз на Ñъдържанието"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Ð’Ñички "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "лиценз."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Страниране"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "След"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Преди"
@@ -4925,6 +4923,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5022,7 +5024,7 @@ msgstr "ÐаÑтройка на пътищата"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5101,11 +5103,11 @@ msgstr "Премахване"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Ðвтор"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "ДоÑтавчик"
@@ -5127,37 +5129,51 @@ msgstr "Паролата е запиÑана."
msgid "Password changing is not allowed"
msgstr "Паролата е запиÑана."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Резултат от командата"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Командата е изпълнена"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Грешка при изпълнение на командата"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "За Ñъжаление тази команда вÑе още не Ñе поддържа."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентификатор."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "ПотребителÑÑ‚ нÑма поÑледна бележка"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Грешка при обновÑване на потребител Ñ Ð¿Ð¾Ñ‚Ð²ÑŠÑ€Ð´ÐµÐ½ email адреÑ."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Грешка при обновÑване на потребител Ñ Ð¿Ð¾Ñ‚Ð²ÑŠÑ€Ð´ÐµÐ½ email адреÑ."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "За Ñъжаление тази команда вÑе още не Ñе поддържа."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Изпратено е побутване на %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5168,198 +5184,196 @@ msgstr ""
"Ðбонати: %2$s\n"
"Бележки: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Ðе е открита бележка Ñ Ñ‚Ð°ÐºÑŠÐ² идентификатор."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "ПотребителÑÑ‚ нÑма поÑледна бележка"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Бележката е отбелÑзана като любима."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Вече членувате в тази група."
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s Ñе приÑъедини към групата %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "Грешка при проÑледÑване — потребителÑÑ‚ не е намерен."
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s напуÑна групата %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Пълно име: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "МеÑтоположение: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Домашна Ñтраница: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "ОтноÑно: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"Съобщението е твърде дълго. Ðай-много може да е 140 знака, а Ñте въвели %d."
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "ПрÑкото Ñъобщение до %s е изпратено."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Грешка при изпращане на прÑкото Ñъобщение"
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Ðе можете да повтарÑте ÑобÑтвена бележка"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Вече Ñте повторили тази бележка."
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Бележката от %s е повторена"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Грешка при повтарÑне на бележката."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"Съобщението е твърде дълго. Ðай-много може да е 140 знака, а Ñте въвели %d."
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Отговорът до %s е изпратен"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Грешка при запиÑване на бележката."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Уточнете името на потребителÑ, за когото Ñе абонирате."
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "ÐÑма такъв потребител"
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Ðе Ñте абонирани за този профил"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Ðбонирани Ñте за %s."
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Уточнете името на потребителÑ, от когото Ñе отпиÑвате."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "ОтпиÑани Ñте от %s."
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Командата вÑе още не Ñе поддържа."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Уведомлението е изключено."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Грешка при изключване на уведомлението."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Уведомлението е включено."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Грешка при включване на уведомлението."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "ОтпиÑани Ñте от %s."
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Ðе Ñте абонирани за никого."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Вече Ñте абонирани за Ñледните потребители:"
msgstr[1] "Вече Ñте абонирани за Ñледните потребители:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ðикой не е абониран за ваÑ."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Грешка при абониране на друг потребител за ваÑ."
msgstr[1] "Грешка при абониране на друг потребител за ваÑ."
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Ðе членувате в нито една група."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе членувате в тази група."
msgstr[1] "Ðе членувате в тази група."
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5401,19 +5415,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Ðе е открит файл Ñ Ð½Ð°Ñтройки. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "Влизане в Ñайта"
@@ -5593,50 +5607,50 @@ msgstr "Етикети в бележките към групата %s"
msgid "This page is not available in a media type you accept"
msgstr "Страницата не е доÑтъпна във вида медиÑ, който приемате"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Форматът на файла Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾ не Ñе поддържа."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Може да качите лого за групата ви."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "ЧаÑтично качване на файла."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "СиÑтемна грешка при качване на файл."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Файлът не е изображение или е повреден."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Форматът на файла Ñ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÑ‚Ð¾ не Ñе поддържа."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "ÐÑма такава бележка."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Ðеподдържан вид файл"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Ðепознат език \"%s\""
@@ -5841,7 +5855,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "от"
@@ -5995,23 +6009,23 @@ msgstr "З"
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "в контекÑÑ‚"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Повторено от"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "ОтговарÑне на тази бележка"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Отговор"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Бележката е повторена."
@@ -6157,7 +6171,7 @@ msgstr "ПовтарÑне на тази бележка"
msgid "Revoke the \"%s\" role from this user"
msgstr "СпиÑък Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ð¸Ñ‚Ðµ в тази група."
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6289,91 +6303,95 @@ msgstr "ОтпиÑване от този потребител"
msgid "Unsubscribe"
msgstr "ОтпиÑване"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Редактиране на аватара"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "ПотребителÑки дейÑтвиÑ"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Редактиране на профила"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Редактиране"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Изпращате на прÑко Ñъобщение до този потребител."
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Съобщение"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "ПотребителÑки профил"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "ÐдминиÑтратори"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "преди нÑколко Ñекунди"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "преди около чаÑ"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d чаÑа"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "преди около меÑец"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "преди около %d меÑеца"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "преди около година"
@@ -6387,7 +6405,7 @@ msgstr "%s не е допуÑтим цвÑÑ‚!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s не е допуÑтим цвÑÑ‚! Използвайте 3 или 6 шеÑтнадеÑетични знака."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po
index 2197b9e74..6e241f553 100644
--- a/locale/br/LC_MESSAGES/statusnet.po
+++ b/locale/br/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:25+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:14+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: br\n"
"X-Message-Group: out-statusnet\n"
@@ -93,7 +93,7 @@ msgstr "N'eus ket eus ar bajenn-se"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -102,10 +102,8 @@ msgstr "N'eus ket eus ar bajenn-se"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "N'eus ket eus an implijer-se."
@@ -196,14 +194,14 @@ msgstr "Hizivadennoù %1$s ha mignoned e %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "N'eo ket bet kavet an hentenn API !"
@@ -216,8 +214,8 @@ msgstr "N'eo ket bet kavet an hentenn API !"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Ezhomm en deus an argerzh-mañ eus ur POST."
@@ -246,7 +244,7 @@ msgid "Could not save profile."
msgstr "Diposubl eo enrollañ ar profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -278,11 +276,11 @@ msgstr "Ne c'helloc'h ket ho stankañ ho unan !"
#: actions/apiblockcreate.php:126
msgid "Block user failed."
-msgstr "N'eo ket bet stanke an implijer."
+msgstr "N'eus ket bet tu da stankañ an implijer."
#: actions/apiblockdestroy.php:114
msgid "Unblock user failed."
-msgstr "N'eus ket bet tu distankañ an implijer."
+msgstr "N'eus ket bet tu da zistankañ an implijer."
#: actions/apidirectmessage.php:89
#, php-format
@@ -332,7 +330,7 @@ msgstr "N'eo bet kavet statud ebet gant an ID-mañ."
msgid "This status is already a favorite."
msgstr "Ur pennroll eo dija an ali-mañ."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Diposupl eo krouiñ ar pennroll-mañ."
@@ -450,7 +448,7 @@ msgstr "N'eo ket bet kavet ar strollad"
msgid "You are already a member of that group."
msgstr "Un ezel eus ar strollad-mañ eo dija."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Stanket oc'h bet eus ar strollad-mañ gant ur merour."
@@ -500,7 +498,7 @@ msgstr "Fichenn direizh."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -564,9 +562,9 @@ msgstr "Kont"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Lesanv"
@@ -635,12 +633,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Diembreget eo ar furmad-se."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Pennroll %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s statud pennroll da %2$s / %2$s."
@@ -650,7 +648,7 @@ msgstr "%1$s statud pennroll da %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Hizivadennoù a veneg %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -660,7 +658,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "Oberezhioù publik %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s statud an holl !"
@@ -675,12 +673,12 @@ msgstr "Adkemeret evit %s"
msgid "Repeats of %s"
msgstr "Adkemeret eus %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Alioù merket gant %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -708,7 +706,7 @@ msgstr "Ment ebet."
msgid "Invalid size."
msgstr "Ment direizh."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -740,7 +738,7 @@ msgid "Preview"
msgstr "Rakwelet"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Diverkañ"
@@ -820,8 +818,8 @@ msgstr "Diposubl eo enrollañ an titouroù stankañ."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "N'eus ket eus ar strollad-se."
@@ -850,7 +848,7 @@ msgstr "Distankañ"
#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
msgid "Unblock this user"
-msgstr "Distankañ an implijer-se"
+msgstr "Distankañ an implijer-mañ"
#: actions/bookmarklet.php:50
msgid "Post to "
@@ -923,7 +921,7 @@ msgstr "N'oc'h ket perc'henn ar poellad-se."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -979,13 +977,13 @@ msgstr "Ha sur oc'h ho peus c'hoant dilemel an ali-mañ ?"
msgid "Do not delete this notice"
msgstr "Arabat dilemel an ali-mañ"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Dilemel an ali-mañ"
#: actions/deleteuser.php:67
msgid "You cannot delete users."
-msgstr "Ne c'helloc'h ket diverkañ implijerien"
+msgstr "N'hallit ket diverkañ implijerien."
#: actions/deleteuser.php:74
msgid "You can only delete local users."
@@ -1003,7 +1001,7 @@ msgstr ""
#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
-msgstr "Diverkañ an implijer-se"
+msgstr "Diverkañ an implijer-mañ"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/groupnav.php:119
@@ -1228,7 +1226,7 @@ msgstr "re hir eo an deskrivadur (%d arouezenn d'ar muiañ)."
msgid "Could not update group."
msgstr "Diposubl eo hizivaat ar strollad."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Diposubl eo krouiñ an aliasoù."
@@ -1341,7 +1339,7 @@ msgstr "Penndibaboù enrollet"
#: actions/emailsettings.php:320
msgid "No email address."
-msgstr "N'eus chomlec'h postel ebet."
+msgstr "Chomlec'h postel ebet."
#: actions/emailsettings.php:327
msgid "Cannot normalize that email address"
@@ -1881,7 +1879,7 @@ msgstr "Fall eo ar postel : %s"
#: actions/invite.php:110
msgid "Invitation(s) sent"
-msgstr "Kaset eo bet ar bedadenn(où)"
+msgstr "Pedadenn(où) kaset"
#: actions/invite.php:112
msgid "Invite new users"
@@ -1891,7 +1889,7 @@ msgstr "Pediñ implijerien nevez"
msgid "You are already subscribed to these users:"
msgstr "Koumanantet oc'h dija d'an implijerien-mañ :"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -1928,7 +1926,7 @@ msgstr "Chomlec'hioù an implijerien da bediñ (unan dre linenn)"
#: actions/invite.php:192
msgid "Personal message"
-msgstr "Kemenadenn bersonel"
+msgstr "Kemennadenn bersonel"
#: actions/invite.php:194
msgid "Optionally add a personal message to the invitation."
@@ -1993,7 +1991,7 @@ msgstr "%1$s a zo bet er strollad %2$s"
msgid "You must be logged in to leave a group."
msgstr "Ret eo deoc'h bezañ kevreet evit kuitaat ur strollad"
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "N'oc'h ket un ezel eus ar strollad-mañ."
@@ -2110,12 +2108,12 @@ msgstr "Implijit ar furmskrid-mañ a-benn krouiñ ur strollad nevez."
msgid "New message"
msgstr "Kemennadenn nevez"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Goullo eo !"
@@ -2123,7 +2121,7 @@ msgstr "Goullo eo !"
msgid "No recipient specified."
msgstr "N'o peus ket lakaet a resever."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2132,14 +2130,14 @@ msgstr ""
#: actions/newmessage.php:181
msgid "Message sent"
-msgstr "Kaset eo bet ar gemenadenn"
+msgstr "Kemennadenn kaset"
#: actions/newmessage.php:185
#, php-format
msgid "Direct message to %s sent."
msgstr "Kaset eo bet da %s ar gemennadenn war-eeun."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Fazi Ajax"
@@ -2250,7 +2248,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "N'en deus ket an ali a profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Statud %1$s war %2$s"
@@ -2263,8 +2261,8 @@ msgstr "seurt an danvez "
msgid "Only "
msgstr "Hepken "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2352,7 +2350,7 @@ msgstr "Kemmañ ho ger tremen."
#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
msgid "Password change"
-msgstr "Kemmañ ar ger-tremen"
+msgstr "Kemmañ ger-tremen"
#: actions/passwordsettings.php:104
msgid "Old password"
@@ -2389,13 +2387,13 @@ msgstr "Ne glot ket ar gerioù-tremen."
#: actions/passwordsettings.php:165
msgid "Incorrect old password"
-msgstr "ger-termen kozh amreizh"
+msgstr "Ger-termen kozh direizh"
#: actions/passwordsettings.php:181
msgid "Error saving user; invalid."
msgstr "Ur fazi 'zo bet e-pad enolladenn an implijer ; diwiriek."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Dibosupl eo enrollañ ar ger-tremen nevez."
@@ -2538,7 +2536,7 @@ msgstr "Atav"
#: actions/pathsadminpanel.php:329
msgid "Use SSL"
-msgstr "Implij SSl"
+msgstr "Implijout SSL"
#: actions/pathsadminpanel.php:330
msgid "When to use SSL"
@@ -2604,8 +2602,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Anv klok"
@@ -2632,9 +2630,9 @@ msgid "Bio"
msgstr "Buhezskrid"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Lec'hiadur"
@@ -2648,7 +2646,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Balizennoù"
@@ -2872,7 +2870,7 @@ msgstr "Adderaouekaat ar ger-tremen"
msgid "Recover password"
msgstr "Adtapout ar ger-tremen"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Goulennet eo an adtapout gerioù-tremen"
@@ -2892,41 +2890,41 @@ msgstr "Adderaouekaat"
msgid "Enter a nickname or email address."
msgstr "Lakait ul lesanv pe ur chomlec'h postel."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr ""
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr ""
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3065,7 +3063,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "En em enskrivañ"
@@ -3101,7 +3099,7 @@ msgstr "Ne c'helloc'h ket adkemer ho ali deoc'h."
msgid "You already repeated that notice."
msgstr "Adkemeret o peus dija an ali-mañ."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Adlavaret"
@@ -3159,7 +3157,7 @@ msgstr ""
#: actions/repliesrss.php:72
#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr ""
+msgstr "Respontoù da %1$s war %2$s !"
#: actions/revokerole.php:75
#, fuzzy
@@ -3168,7 +3166,7 @@ msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
#: actions/revokerole.php:82
msgid "User doesn't have this role."
-msgstr ""
+msgstr "n'en deus ket an implijer-mañ ar rol-se."
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
@@ -3239,7 +3237,7 @@ msgstr ""
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Stadegoù"
@@ -3350,67 +3348,67 @@ msgstr "strollad %s"
msgid "%1$s group, page %2$d"
msgstr ""
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Profil ar strollad"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Notenn"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasoù"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Oberoù ar strollad"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Izili"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(hini ebet)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "An holl izili"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Krouet"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3420,7 +3418,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3429,7 +3427,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Merourien"
@@ -3528,7 +3526,7 @@ msgstr ""
#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
-msgstr ""
+msgstr "Adkemeret eus %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3638,9 +3636,8 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
msgid "Site Notice"
-msgstr "Ali"
+msgstr "Ali al lec'hienn"
#: actions/sitenoticeadminpanel.php:67
#, fuzzy
@@ -3954,12 +3951,12 @@ msgstr ""
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr ""
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Skeudenn"
@@ -4271,19 +4268,19 @@ msgstr "Stumm"
msgid "Author(s)"
msgstr "Aozer(ien)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4321,43 +4318,43 @@ msgstr "Diposubl eo ensoc'hañ ur gemenadenn"
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4387,28 +4384,28 @@ msgstr ""
msgid "Couldn't delete subscription OMB token."
msgstr "Diposubl eo dilemel ar postel kadarnadur."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr ""
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr ""
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr ""
@@ -4612,19 +4609,19 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4632,41 +4629,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Pep tra "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "aotre implijout."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Pajennadur"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "War-lerc'h"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Kent"
@@ -4682,6 +4679,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4769,7 +4770,7 @@ msgstr ""
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4843,11 +4844,11 @@ msgstr ""
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Aozer"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Pourvezer"
@@ -4867,37 +4868,50 @@ msgstr ""
msgid "Password changing is not allowed"
msgstr ""
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr ""
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
msgstr ""
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr ""
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr ""
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr ""
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -4905,198 +4919,196 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr ""
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr ""
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr ""
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
-msgstr "%s zo emezelet er strollad %s"
+msgstr "emezelet eo %s er strollad %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr ""
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s {{Gender:.|en|he}} deus kuitaet ar strollad %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Anv klok : %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Diwar-benn : %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr ""
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr ""
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr ""
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr ""
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr ""
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr ""
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr ""
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:711
+#: lib/command.php:754
#, fuzzy
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "You are subscribed to this person:"
msgstr[1] "You are subscribed to these people:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:733
+#: lib/command.php:776
#, fuzzy
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "This person is subscribed to you:"
msgstr[1] "These people are subscribed to you:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:755
+#: lib/command.php:798
#, fuzzy
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "You are a member of this group:"
msgstr[1] "You are a member of these groups:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5138,19 +5150,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5324,49 +5336,49 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "Mo"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "Ko"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5561,7 +5573,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "eus"
@@ -5711,23 +5723,23 @@ msgstr "K"
msgid "at"
msgstr "e"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Respont"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr ""
@@ -5869,7 +5881,7 @@ msgstr "Adkregiñ gant an ali-mañ"
msgid "Revoke the \"%s\" role from this user"
msgstr "Stankañ an implijer-mañ eus ar strollad-se"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5995,92 +6007,96 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Kemmañ an Avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Obererezh an implijer"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr ""
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Aozañ"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Kemennadenn"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Habaskaat"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Strolladoù implijerien"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Merourien"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "Habaskaat"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "un nebeud eilennoù zo"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "1 vunutenn zo well-wazh"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "%d munutenn zo well-wazh"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "1 eurvezh zo well-wazh"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "%d eurvezh zo well-wazh"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "1 devezh zo well-wazh"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "%d devezh zo well-wazh"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "miz zo well-wazh"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "%d miz zo well-wazh"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "bloaz zo well-wazh"
@@ -6094,7 +6110,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index bd7c5cd5a..3ed2516c9 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:29+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:17+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
@@ -101,7 +101,7 @@ msgstr "No existeix la pàgina."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -110,10 +110,8 @@ msgstr "No existeix la pàgina."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "No existeix aquest usuari."
@@ -206,14 +204,14 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "No s'ha trobat el mètode API!"
@@ -227,8 +225,8 @@ msgstr "No s'ha trobat el mètode API!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Aquest mètode requereix POST."
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "No s'ha pogut guardar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -349,7 +347,7 @@ msgstr "No s'ha trobat cap estatus amb aquesta ID."
msgid "This status is already a favorite."
msgstr "Aquest estat ja és un preferit!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "No es pot crear favorit."
@@ -473,7 +471,7 @@ msgstr "No s'ha trobat el grup!"
msgid "You are already a member of that group."
msgstr "Ja sou membre del grup."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "L'administrador us ha blocat del grup."
@@ -524,7 +522,7 @@ msgstr "Mida invàlida."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -593,9 +591,9 @@ msgstr "Compte"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Sobrenom"
@@ -668,12 +666,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "El format no està implementat."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Preferits de %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s actualitzacions favorites per %s / %s."
@@ -683,7 +681,7 @@ msgstr "%s actualitzacions favorites per %s / %s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Notificacions contestant a %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s notificacions que responen a notificacions de %2$s / %3$s."
@@ -693,7 +691,7 @@ msgstr "%1$s notificacions que responen a notificacions de %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s línia temporal pública"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s notificacions de tots!"
@@ -708,12 +706,12 @@ msgstr "Respostes a %s"
msgid "Repeats of %s"
msgstr "Repeticions de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Aviso etiquetats amb %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualitzacions etiquetades amb %1$s el %2$s!"
@@ -741,7 +739,7 @@ msgstr "Cap mida."
msgid "Invalid size."
msgstr "Mida invàlida."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -774,7 +772,7 @@ msgid "Preview"
msgstr "Vista prèvia"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Suprimeix"
@@ -856,8 +854,8 @@ msgstr "Error al guardar la informació del block."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "No s'ha trobat el grup."
@@ -963,7 +961,7 @@ msgstr "No sou un membre del grup."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Ha ocorregut algun problema amb la teva sessió."
@@ -1026,7 +1024,7 @@ msgstr "N'estàs segur que vols eliminar aquesta notificació?"
msgid "Do not delete this notice"
msgstr "No es pot esborrar la notificació."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Eliminar aquesta nota"
@@ -1288,7 +1286,7 @@ msgstr "la descripció és massa llarga (màx. %d caràcters)."
msgid "Could not update group."
msgstr "No s'ha pogut actualitzar el grup."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "No s'han pogut crear els àlies."
@@ -1991,7 +1989,7 @@ msgstr "Invitar nous usuaris"
msgid "You are already subscribed to these users:"
msgstr "Ja estàs subscrit a aquests usuaris:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2124,7 +2122,7 @@ msgstr "%1$s s'ha unit al grup %2$s"
msgid "You must be logged in to leave a group."
msgstr "Has d'haver entrat per a poder marxar d'un grup."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "No ets membre d'aquest grup."
@@ -2245,12 +2243,12 @@ msgstr "Utilitza aquest formulari per crear un nou grup."
msgid "New message"
msgstr "Nou missatge"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "No podeu enviar un misssatge a aquest usuari."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Cap contingut!"
@@ -2258,7 +2256,7 @@ msgstr "Cap contingut!"
msgid "No recipient specified."
msgstr "No has especificat el destinatari."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "No t'enviïs missatges a tu mateix, simplement dir-te això."
@@ -2272,7 +2270,7 @@ msgstr "S'ha enviat el missatge"
msgid "Direct message to %s sent."
msgstr "S'ha enviat un missatge directe a %s."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax Error"
@@ -2389,7 +2387,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Avís sense perfil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "estat de %1$s a %2$s"
@@ -2402,8 +2400,8 @@ msgstr "tipus de contingut "
msgid "Only "
msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@@ -2541,7 +2539,7 @@ msgstr "Contrasenya antiga incorrecta"
msgid "Error saving user; invalid."
msgstr "Error en guardar usuari; invàlid."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "No es pot guardar la nova contrasenya."
@@ -2757,8 +2755,8 @@ msgstr ""
"1-64 lletres en minúscula o números, sense signes de puntuació o espais"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nom complet"
@@ -2786,9 +2784,9 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Ubicació"
@@ -2802,7 +2800,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Etiquetes"
@@ -3040,7 +3038,7 @@ msgstr "Restablir contrasenya"
msgid "Recover password"
msgstr "Recuperar contrasenya"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Recuperació de contrasenya sol·licitada"
@@ -3060,19 +3058,19 @@ msgstr "Restablir"
msgid "Enter a nickname or email address."
msgstr "Escriu un sobrenom o una adreça de correu electrònic."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "No hi ha cap usuari amb aquesta direcció o usuari."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Cap adreça de correu electrònic registrada per aquest usuari."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Error en guardar confirmació de l'adreça."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3080,23 +3078,23 @@ msgstr ""
"S'han enviat instruccions per a recuperar la teva contrasenya a l'adreça de "
"correu electrònic registrada."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Restabliment de contrasenya inesperat."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "La contrasenya ha de tenir 6 o més caràcters."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "La contrasenya i la confirmació no coincideixen."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Error en configurar l'usuari."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nova contrasenya guardada correctament. Has iniciat una sessió."
@@ -3260,7 +3258,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del teu perfil en un altre servei de microblogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscriure's"
@@ -3303,7 +3301,7 @@ msgstr "No pots registrar-te si no estàs d'acord amb la llicència."
msgid "You already repeated that notice."
msgstr "Ja heu blocat l'usuari."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repetit"
@@ -3451,7 +3449,7 @@ msgstr "Paginació"
msgid "Description"
msgstr "Descripció"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadístiques"
@@ -3564,67 +3562,67 @@ msgstr "%s grup"
msgid "%1$s group, page %2$d"
msgstr "%s membre/s en el grup, pàgina %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Perfil del grup"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Avisos"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Àlies"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Accions del grup"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Safata de sortida per %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Cap)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Tots els membres"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "S'ha creat"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3634,7 +3632,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3645,7 +3643,7 @@ msgstr ""
"**%s** és un grup d'usuaris a %%%%site.name%%%%, un servei de [microblogging]"
"(http://ca.wikipedia.org/wiki/Microblogging)"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administradors"
@@ -4197,12 +4195,12 @@ msgstr "No argument de la id."
msgid "Tag %s"
msgstr "Etiqueta %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Perfil de l'usuari"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4537,19 +4535,19 @@ msgstr "Sessions"
msgid "Author(s)"
msgstr "Autoria"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4591,28 +4589,28 @@ msgstr "No s'ha pogut inserir el missatge."
msgid "Could not update message with new URI."
msgstr "No s'ha pogut inserir el missatge amb la nova URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Hashtag de l'error de la base de dades:%s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problema al guardar la notificació. Usuari desconegut."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4621,20 +4619,20 @@ msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Ha estat bandejat de publicar notificacions en aquest lloc."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4666,29 +4664,29 @@ msgstr "No s'ha pogut eliminar la subscripció."
msgid "Couldn't delete subscription OMB token."
msgstr "No s'ha pogut eliminar la subscripció."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "No s'ha pogut eliminar la subscripció."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Us donem la benvinguda a %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "No s'ha pogut crear el grup."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "No s'ha pogut guardar la subscripció."
@@ -4911,7 +4909,7 @@ msgstr "Insígnia"
msgid "StatusNet software license"
msgstr "Llicència del programari StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4920,12 +4918,12 @@ msgstr ""
"**%%site.name%%** és un servei de microblogging de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** és un servei de microblogging."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4936,41 +4934,41 @@ msgstr ""
"%s, disponible sota la [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Llicència de contingut del lloc"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Tot "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "llicència."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginació"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Posteriors"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Anteriors"
@@ -4986,6 +4984,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5083,7 +5085,7 @@ msgstr "Configuració dels camins"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5162,11 +5164,11 @@ msgstr "Suprimeix"
msgid "Attachments"
msgstr "Adjuncions"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autoria"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Proveïdor"
@@ -5187,37 +5189,51 @@ msgstr "El canvi de contrasenya ha fallat"
msgid "Password changing is not allowed"
msgstr "Contrasenya canviada."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultats de les comandes"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Comanda completada"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Comanda fallida"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Perdona, aquesta comanda no està implementada."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "No hi ha cap perfil amb aquesta id."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "L'usuari no té última nota"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "No es pot actualitzar l'usuari amb el correu electrònic confirmat"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "No es pot actualitzar l'usuari amb el correu electrònic confirmat"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Perdona, aquesta comanda no està implementada."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Reclamació enviada"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5225,202 +5241,200 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "No hi ha cap perfil amb aquesta id."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "L'usuari no té última nota"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Nota marcada com a favorita."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Ja sou membre del grup."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "No s'ha pogut afegir l'usuari %s al grup %s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s s'ha pogut afegir al grup %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "No s'ha pogut eliminar l'usuari %s del grup %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s ha abandonat el grup %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nom complet: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localització: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pàgina web: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Sobre tu: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message 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:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Missatge directe per a %s enviat"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Error al enviar el missatge directe."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "No es poden posar en on les notificacions."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Eliminar aquesta nota"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Notificació publicada"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Problema en guardar l'avís."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
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:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "S'ha enviat la resposta a %s"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Problema en guardar l'avís."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Especifica el nom de l'usuari a que vols subscriure't"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "No existeix aquest usuari."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "No estàs subscrit a aquest perfil."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Subscrit a %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifica el nom de l'usuari del que vols deixar d'estar subscrit"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Has deixat d'estar subscrit a %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Comanda encara no implementada."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificacions off."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "No es poden posar en off les notificacions."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificacions on."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "No es poden posar en on les notificacions."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Has deixat d'estar subscrit a %s"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "No estàs subscrit a aquest perfil."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "No pots subscriure a un altre a tu mateix."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "No sou membre de cap grup."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Sou un membre d'aquest grup:"
msgstr[1] "Sou un membre d'aquests grups:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5462,19 +5476,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "No s'ha trobat cap fitxer de configuració. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Podeu voler executar l'instal·lador per a corregir-ho."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Vés a l'instal·lador."
@@ -5650,49 +5664,49 @@ msgstr "Etiquetes en les notificacions del grup %s"
msgid "This page is not available in a media type you accept"
msgstr "Aquesta pàgina no està disponible en un tipus de mèdia que acceptis."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Format d'imatge no suportat."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Pots pujar una imatge de logo per al grup."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Càrrega parcial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Error del sistema en pujar el fitxer."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "No és una imatge o és un fitxer corrupte."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Format d'imatge no suportat."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Hem perdut el nostre arxiu."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tipus de fitxer desconegut"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Llengua desconeguda «%s»"
@@ -5903,7 +5917,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "de"
@@ -6058,23 +6072,23 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "en context"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repetit per"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "respondre a aquesta nota"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Respon"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Notificació publicada"
@@ -6221,7 +6235,7 @@ msgstr "Repeteix l'avís"
msgid "Revoke the \"%s\" role from this user"
msgstr "Bloca l'usuari del grup"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6350,92 +6364,96 @@ msgstr "Deixar d'estar subscrit des d'aquest usuari"
msgid "Unsubscribe"
msgstr "Cancel·lar subscripció"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Edita l'avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Accions de l'usuari"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Edita la configuració del perfil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Edita"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Enviar un missatge directe a aquest usuari"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Missatge"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Modera"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Perfil de l'usuari"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Administradors"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "Modera"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "fa pocs segons"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "fa un any"
@@ -6449,7 +6467,7 @@ msgstr "%s no és un color vàlid!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s no és un color vàlid! Feu servir 3 o 6 caràcters hexadecimals."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Missatge massa llarg - màxim és 140 caràcters, tu has enviat %d"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index a48ec5885..4790caf6c 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:32+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:20+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
@@ -101,7 +101,7 @@ msgstr "Žádné takové oznámení."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -110,10 +110,8 @@ msgstr "Žádné takové oznámení."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Žádný takový uživatel."
@@ -205,14 +203,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Potvrzující kód nebyl nalezen"
@@ -226,8 +224,8 @@ msgstr "Potvrzující kód nebyl nalezen"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "Nelze uložit profil"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -345,7 +343,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "Toto je již vaše Jabber"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -468,7 +466,7 @@ msgstr "Žádný požadavek nebyl nalezen!"
msgid "You are already a member of that group."
msgstr "Již jste přihlášen"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -520,7 +518,7 @@ msgstr "Neplatná velikost"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -588,9 +586,9 @@ msgstr "O nás"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Přezdívka"
@@ -664,12 +662,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Nepodporovaný formát obrázku."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1 statusů na %2"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Mikroblog od %s"
@@ -679,7 +677,7 @@ msgstr "Mikroblog od %s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1 statusů na %2"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -689,7 +687,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -704,12 +702,12 @@ msgstr "Odpovědi na %s"
msgid "Repeats of %s"
msgstr "Odpovědi na %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mikroblog od %s"
@@ -739,7 +737,7 @@ msgstr "Žádná velikost"
msgid "Invalid size."
msgstr "Neplatná velikost"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Obrázek"
@@ -772,7 +770,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Odstranit"
@@ -855,8 +853,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "Žádné takové oznámení."
@@ -965,7 +963,7 @@ msgstr "Neodeslal jste nám profil"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1025,7 +1023,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Žádné takové oznámení."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Odstranit toto oznámení"
@@ -1291,7 +1289,7 @@ msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
msgid "Could not update group."
msgstr "Nelze aktualizovat uživatele"
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Nelze uložin informace o obrázku"
@@ -1998,7 +1996,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2100,7 +2098,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "Neodeslal jste nám profil"
@@ -2216,12 +2214,12 @@ msgstr ""
msgid "New message"
msgstr ""
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Žádný obsah!"
@@ -2229,7 +2227,7 @@ msgstr "Žádný obsah!"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2243,7 +2241,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2358,7 +2356,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Sdělení nemá profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1 statusů na %2"
@@ -2372,8 +2370,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2513,7 +2511,7 @@ msgstr "Neplatné heslo"
msgid "Error saving user; invalid."
msgstr "Chyba při ukládaní uživatele; neplatný"
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Nelze uložit nové heslo"
@@ -2737,8 +2735,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 znaků nebo Äísel, bez teÄek, Äárek a mezer"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Celé jméno"
@@ -2765,9 +2763,9 @@ msgid "Bio"
msgstr "O mÄ›"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Umístění"
@@ -2781,7 +2779,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -3011,7 +3009,7 @@ msgstr "Resetovat heslo"
msgid "Recover password"
msgstr "Obnovit"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Žádost o obnovu hesla"
@@ -3031,19 +3029,19 @@ msgstr "Reset"
msgid "Enter a nickname or email address."
msgstr "Zadej přezdívku nebo emailovou adresu"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Žádný registrovaný email pro tohoto uživatele."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Chyba při ukládání potvrzení adresy"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3051,23 +3049,23 @@ msgstr ""
"Návod jak obnovit heslo byl odeslát na vaší emailovou adresu zaregistrovanou "
"u vaÅ¡eho úÄtu."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "NeÄekané resetování hesla."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Heslo musí být alespoň 6 znaků dlouhé"
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Heslo a potvrzení nesouhlasí"
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Chyba nastavení uživatele"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nové heslo bylo uloženo. Nyní jste přihlášen."
@@ -3214,7 +3212,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Adresa profilu na jiných kompatibilních mikroblozích."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Odebírat"
@@ -3255,7 +3253,7 @@ msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
msgid "You already repeated that notice."
msgstr "Již jste přihlášen"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Vytvořit"
@@ -3404,7 +3402,7 @@ msgstr "Umístění"
msgid "Description"
msgstr "Odběry"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiky"
@@ -3515,70 +3513,70 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Všechny odběry"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "Žádné takové oznámení."
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Poznámka"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "ÄŒlenem od"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "Vytvořit"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3588,7 +3586,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3597,7 +3595,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4137,13 +4135,13 @@ msgstr "Žádný takový dokument."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "Uživatel nemá profil."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4480,19 +4478,19 @@ msgstr "Osobní"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4534,46 +4532,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4606,31 +4604,31 @@ msgstr "Nelze smazat odebírání"
msgid "Couldn't delete subscription OMB token."
msgstr "Nelze smazat odebírání"
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Nelze smazat odebírání"
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "Nelze uložin informace o obrázku"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Nelze vytvořit odebírat"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "Nelze vytvořit odebírat"
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Nelze vytvořit odebírat"
@@ -4852,7 +4850,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4861,12 +4859,12 @@ msgstr ""
"**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** je služba mikroblogů."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4877,43 +4875,43 @@ msgstr ""
"dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "Nové sdělení"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "« Novější"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "Starší »"
@@ -4930,6 +4928,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5026,7 +5028,7 @@ msgstr "Potvrzení emailové adresy"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5105,11 +5107,11 @@ msgstr "Odstranit"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Poskytovatel"
@@ -5131,37 +5133,52 @@ msgstr "Heslo uloženo"
msgid "Password changing is not allowed"
msgstr "Heslo uloženo"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Vzdálený profil s nesouhlasícím profilem"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "Uživatel nemá profil."
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Nelze aktualizovat uživatele"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Nelze aktualizovat uživatele"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Odpovědi na %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5169,209 +5186,205 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Vzdálený profil s nesouhlasícím profilem"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Uživatel nemá profil."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Již jste přihlášen"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Nelze přesměrovat na server: %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%1 statusů na %2"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "Nelze vytvořit OpenID z: %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "%1 statusů na %2"
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "Celé jméno"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Nemůžete se registrovat, pokud nesouhlasíte s licencí."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Odstranit toto oznámení"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Sdělení"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Problém při ukládání sdělení"
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Odpovědi na %s"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Problém při ukládání sdělení"
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "Žádný takový uživatel."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Neodeslal jste nám profil"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Odhlásit"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Vzdálený odběr"
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Neodeslal jste nám profil"
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5413,20 +5426,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Žádný potvrzující kód."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5608,50 +5621,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "Tato stránka není k dispozici v typu média která přijímáte."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Nepodporovaný formát obrázku."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Je to příliš dlouhé. Maximální sdělení délka je 140 znaků"
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "ČásteÄné náhrání."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Chyba systému při nahrávání souboru"
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Není obrázkem, nebo jde o poškozený soubor."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Nepodporovaný formát obrázku."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "Žádné takové oznámení."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5855,7 +5868,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " od "
@@ -6012,26 +6025,26 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "Žádný obsah!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Vytvořit"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
#, fuzzy
msgid "Reply"
msgstr "odpovÄ›Ä"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Sdělení"
@@ -6179,7 +6192,7 @@ msgstr "Odstranit toto oznámení"
msgid "Revoke the \"%s\" role from this user"
msgstr "Žádný takový uživatel."
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6312,91 +6325,95 @@ msgstr ""
msgid "Unsubscribe"
msgstr "Odhlásit"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Upravit avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Akce uživatele"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Nastavené Profilu"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Zpráva"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Uživatel nemá profil."
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "před pár sekundami"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "asi před rokem"
@@ -6410,7 +6427,7 @@ msgstr "Stránka není platnou URL."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index 4bad95b9e..014c75565 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -15,12 +15,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-08 21:10:39+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:23+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63415); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
@@ -100,7 +100,7 @@ msgstr "Seite nicht vorhanden"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -109,10 +109,8 @@ msgstr "Seite nicht vorhanden"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Unbekannter Benutzer."
@@ -213,14 +211,14 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-Methode nicht gefunden."
@@ -233,8 +231,8 @@ msgstr "API-Methode nicht gefunden."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Diese Methode benötigt ein POST."
@@ -263,7 +261,7 @@ msgid "Could not save profile."
msgstr "Konnte Profil nicht speichern."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -352,7 +350,7 @@ msgstr "Keine Nachricht mit dieser ID gefunden."
msgid "This status is already a favorite."
msgstr "Diese Nachricht ist bereits ein Favorit!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Konnte keinen Favoriten erstellen."
@@ -472,7 +470,7 @@ msgstr "Gruppe nicht gefunden!"
msgid "You are already a member of that group."
msgstr "Du bist bereits Mitglied dieser Gruppe"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Der Admin dieser Gruppe hat dich gesperrt."
@@ -510,9 +508,8 @@ msgid "No oauth_token parameter provided."
msgstr "Kein oauth_token Parameter angegeben."
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Ungültige Größe."
+msgstr "Ungültiges Token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -523,7 +520,7 @@ msgstr "Ungültige Größe."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -537,9 +534,8 @@ msgid "Invalid nickname / password!"
msgstr "Benutzername oder Passwort falsch."
#: actions/apioauthauthorize.php:159
-#, fuzzy
msgid "Database error deleting OAuth application user."
-msgstr "Fehler bei den Nutzereinstellungen."
+msgstr "Datenbank Fehler beim Löschen des OAuth Anwendungs Nutzers."
#: actions/apioauthauthorize.php:185
msgid "Database error inserting OAuth application user."
@@ -583,6 +579,9 @@ msgid ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
msgstr ""
+"Das Programm <strong>%1$s</strong> von <strong>%2$s</strong> würde gerne "
+"<strong>%3$s</strong> bei deinem %4$s Zugang. Du solltest nur "
+"vertrauenswürdigen Quellen Erlaubnis zu deinem %4$s Zugang geben."
#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
@@ -590,9 +589,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Nutzername"
@@ -664,12 +663,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Bildformat wird nicht unterstützt."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoriten von %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s."
@@ -679,7 +678,7 @@ msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Aktualisierungen erwähnen %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten."
@@ -689,7 +688,7 @@ msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten."
msgid "%s public timeline"
msgstr "%s öffentliche Zeitleiste"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s Nachrichten von allen!"
@@ -704,12 +703,12 @@ msgstr "Antworten an %s"
msgid "Repeats of %s"
msgstr "Antworten von %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Nachrichten, die mit %s getagt sind"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualisierungen mit %1$s getagt auf %2$s!"
@@ -737,7 +736,7 @@ msgstr "Keine Größe."
msgid "Invalid size."
msgstr "Ungültige Größe."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -770,7 +769,7 @@ msgid "Preview"
msgstr "Vorschau"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Löschen"
@@ -854,8 +853,8 @@ msgstr "Konnte Blockierungsdaten nicht speichern."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Keine derartige Gruppe."
@@ -956,7 +955,7 @@ msgstr "Du bist Besitzer dieses Programms"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Es gab ein Problem mit deinem Sessiontoken."
@@ -1016,7 +1015,7 @@ msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
msgid "Do not delete this notice"
msgstr "Diese Nachricht nicht löschen"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Nachricht löschen"
@@ -1270,7 +1269,7 @@ msgstr "Die Beschreibung ist zu lang (max. %d Zeichen)."
msgid "Could not update group."
msgstr "Konnte Gruppe nicht aktualisieren."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Konnte keinen Favoriten erstellen."
@@ -1598,9 +1597,8 @@ msgid "This role is reserved and cannot be set."
msgstr "Diese Aufgabe ist reserviert und kann nicht gesetzt werden"
#: actions/grantrole.php:75
-#, fuzzy
msgid "You cannot grant user roles on this site."
-msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+msgstr "Auf dieser Seite können keine Benutzerrollen gewährt werden."
#: actions/grantrole.php:82
msgid "User already has this role."
@@ -1981,7 +1979,7 @@ msgstr "Lade neue Leute ein"
msgid "You are already subscribed to these users:"
msgstr "Du hast diese Benutzer bereits abonniert:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2115,7 +2113,7 @@ msgstr "%1$s ist der Gruppe %2$s beigetreten"
msgid "You must be logged in to leave a group."
msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Du bist kein Mitglied dieser Gruppe."
@@ -2184,9 +2182,9 @@ msgid "%1$s is already an admin for group \"%2$s\"."
msgstr "%1$s ist bereits Administrator der Gruppe \"%2$s\"."
#: actions/makeadmin.php:133
-#, fuzzy, php-format
+#, php-format
msgid "Can't get membership record for %1$s in group %2$s."
-msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
+msgstr "Konnte keinen Mitgliedseintrag für %1$s aus Gruppe %2$s empfangen."
#: actions/makeadmin.php:146
#, php-format
@@ -2229,12 +2227,12 @@ msgstr "Benutzer dieses Formular, um eine neue Gruppe zu erstellen."
msgid "New message"
msgstr "Neue Nachricht"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Kein Inhalt!"
@@ -2242,7 +2240,7 @@ msgstr "Kein Inhalt!"
msgid "No recipient specified."
msgstr "Kein Empfänger angegeben."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2257,7 +2255,7 @@ msgstr "Nachricht gesendet"
msgid "Direct message to %s sent."
msgstr "Direkte Nachricht an %s abgeschickt"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax-Fehler"
@@ -2382,7 +2380,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Nachricht hat kein Profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s Status auf %2$s"
@@ -2395,8 +2393,8 @@ msgstr "Content-Typ "
msgid "Only "
msgstr "Nur "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@@ -2449,14 +2447,12 @@ msgid "No login token specified."
msgstr "Kein Zugangstoken angegeben."
#: actions/otp.php:90
-#, fuzzy
msgid "No login token requested."
-msgstr "Keine Profil-ID in der Anfrage."
+msgstr "Kein Login-Token angefordert."
#: actions/otp.php:95
-#, fuzzy
msgid "Invalid login token specified."
-msgstr "Token ungültig oder abgelaufen."
+msgstr "Login-Token ungültig oder abgelaufen."
#: actions/otp.php:104
msgid "Login token expired."
@@ -2530,7 +2526,7 @@ msgstr "Altes Passwort falsch"
msgid "Error saving user; invalid."
msgstr "Fehler beim Speichern des Nutzers, ungültig."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Konnte neues Passwort nicht speichern"
@@ -2746,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 Kleinbuchstaben oder Ziffern, keine Sonder- oder Leerzeichen"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Vollständiger Name"
@@ -2775,9 +2771,9 @@ msgid "Bio"
msgstr "Biografie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Aufenthaltsort"
@@ -2791,7 +2787,7 @@ msgstr "Teile meine aktuelle Position wenn ich Nachrichten sende"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Stichwörter"
@@ -3037,7 +3033,7 @@ msgstr "Passwort zurücksetzen"
msgid "Recover password"
msgstr "Stelle Passwort wieder her"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Wiederherstellung des Passworts angefordert"
@@ -3057,19 +3053,19 @@ msgstr "Zurücksetzen"
msgid "Enter a nickname or email address."
msgstr "Gib einen Spitznamen oder eine E-Mail-Adresse ein."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Kein Benutzer mit dieser E-Mail-Adresse oder mit diesem Nutzernamen."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Der Nutzer hat keine registrierte E-Mail-Adresse."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Fehler beim Speichern der Adressbestätigung."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3077,23 +3073,23 @@ msgstr ""
"Anweisungen für die Wiederherstellung deines Passworts wurden an deine "
"hinterlegte E-Mail-Adresse geschickt."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Unerwarteter Passwortreset."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Passwort muss mehr als 6 Zeichen enthalten"
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Passwort und seine Bestätigung stimmen nicht überein."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Fehler bei den Nutzereinstellungen."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Neues Passwort erfolgreich gespeichert. Du bist jetzt angemeldet."
@@ -3261,7 +3257,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Profil-URL bei einem anderen kompatiblen Microbloggingdienst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Abonnieren"
@@ -3298,7 +3294,7 @@ msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
msgid "You already repeated that notice."
msgstr "Nachricht bereits wiederholt"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Wiederholt"
@@ -3347,6 +3343,8 @@ msgid ""
"You can engage other users in a conversation, subscribe to more people or "
"[join groups](%%action.groups%%)."
msgstr ""
+"Du kannst andere Nutzer ansprechen, mehr Leuten folgen oder [Gruppen "
+"beitreten](%%action.groups%%)."
#: actions/replies.php:206
#, php-format
@@ -3376,9 +3374,8 @@ msgid "StatusNet"
msgstr "StatusNet"
#: actions/sandbox.php:65 actions/unsandbox.php:65
-#, fuzzy
msgid "You cannot sandbox users on this site."
-msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+msgstr "Du kannst Benutzer auf dieser Seite nicht auf den Spielplaz schicken."
#: actions/sandbox.php:72
msgid "User is already sandboxed."
@@ -3420,9 +3417,8 @@ msgid "You must be logged in to view an application."
msgstr "Du musst angemeldet sein, um aus dieses Programm zu betrachten."
#: actions/showapplication.php:157
-#, fuzzy
msgid "Application profile"
-msgstr "Nachricht hat kein Profil"
+msgstr "Anwendungsprofil"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
@@ -3442,7 +3438,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Beschreibung"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiken"
@@ -3525,6 +3521,9 @@ 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 ""
+"Du hast noch keine Lieblingsnachrichten gewählt. Klicke den Favorisieren-"
+"Button bei einer Nachricht, die dir gefällt um die Aufmerksamkeit auf sie zu "
+"richten und sie in deine Lesezeichen aufzunehmen."
#: actions/showfavorites.php:208
#, php-format
@@ -3555,67 +3554,67 @@ msgstr "%s Gruppe"
msgid "%1$s group, page %2$d"
msgstr "%1$s Gruppe, Seite %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Gruppenprofil"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Nachricht"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Pseudonyme"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Gruppenaktionen"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Nachrichtenfeed der Gruppe %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Postausgang von %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Mitglieder"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Kein)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Alle Mitglieder"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Erstellt"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3625,7 +3624,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3638,7 +3637,7 @@ msgstr ""
"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
"kurze Nachrichten über Ihr Leben und Interessen. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administratoren"
@@ -3816,9 +3815,8 @@ msgid "Contact email address for your site"
msgstr "Kontakt-E-Mail-Adresse für Deine Site."
#: actions/siteadminpanel.php:245
-#, fuzzy
msgid "Local"
-msgstr "Lokale Ansichten"
+msgstr "Lokal"
#: actions/siteadminpanel.php:256
msgid "Default timezone"
@@ -3835,6 +3833,8 @@ msgstr "Bevorzugte Sprache"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
msgstr ""
+"Sprache der Seite für den Fall, dass die automatische Erkennung anhand der "
+"Browser-Einstellungen nicht verfügbar ist."
#: actions/siteadminpanel.php:271
msgid "Limits"
@@ -4183,12 +4183,12 @@ msgstr "Kein ID Argument."
msgid "Tag %s"
msgstr "Tag %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Benutzerprofil"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4415,7 +4415,7 @@ msgstr "Profiladresse '%s' ist für einen lokalen Benutzer."
#: actions/userauthorization.php:345
#, php-format
msgid "Avatar URL ‘%s’ is not valid."
-msgstr ""
+msgstr "Avatar Adresse '%s' ist nicht gültig."
#: actions/userauthorization.php:350
#, php-format
@@ -4528,7 +4528,7 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Autor(en)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4537,12 +4537,12 @@ msgstr ""
"Keine Datei darf größer als %d Bytes sein und die Datei die du verschicken "
"wolltest ist %d Bytes groß. Bitte eine kleinere Datei hoch laden."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4566,9 +4566,9 @@ msgid "Could not update local group."
msgstr "Konnte Gruppe nicht aktualisieren."
#: classes/Login_token.php:76
-#, fuzzy, php-format
+#, php-format
msgid "Could not create login token for %s"
-msgstr "Konnte keinen Favoriten erstellen."
+msgstr "Konnte keinen Login-Token für %s erstellen"
#: classes/Message.php:45
msgid "You are banned from sending direct messages."
@@ -4582,27 +4582,27 @@ msgstr "Konnte Nachricht nicht einfügen."
msgid "Could not update message with new URI."
msgstr "Konnte Nachricht nicht mit neuer URI versehen."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4610,20 +4610,20 @@ msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
"Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4653,32 +4653,30 @@ msgstr "Konnte Abonnement nicht löschen."
msgid "Couldn't delete subscription OMB token."
msgstr "Konnte OMB-Abonnement nicht löschen."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Konnte Abonnement nicht löschen."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Herzlich willkommen bei %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Konnte Gruppe nicht erstellen."
-#: classes/User_group.php:486
-#, fuzzy
+#: classes/User_group.php:489
msgid "Could not set group URI."
-msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
+msgstr "Konnte die Gruppen URI nicht setzen."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
-#: classes/User_group.php:521
-#, fuzzy
+#: classes/User_group.php:524
msgid "Could not save local group info."
-msgstr "Konnte Abonnement nicht erstellen."
+msgstr "Konnte die lokale Gruppen Information nicht speichern."
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
@@ -4880,7 +4878,7 @@ msgstr "Plakette"
msgid "StatusNet software license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4889,12 +4887,12 @@ msgstr ""
"**%%site.name%%** ist ein Microbloggingdienst von [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ist ein Microbloggingdienst."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4905,49 +4903,51 @@ msgstr ""
"(Version %s) betrieben, die unter der [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html) erhältlich ist."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Inhalt und Daten urheberrechtlich geschützt durch %1$s. Alle Rechte "
"vorbehalten."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
+"Urheberrecht von Inhalt und Daten liegt bei den Beteiligten. Alle Rechte "
+"vorbehalten."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Alle "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "Lizenz."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Seitenerstellung"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Später"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Vorher"
#: lib/activity.php:453
msgid "Can't handle remote content yet."
-msgstr ""
+msgstr "Fremdinhalt kann noch nicht eingebunden werden."
#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
@@ -4955,6 +4955,10 @@ msgstr "Kann eingebundenen XML Inhalt nicht verarbeiten."
#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
+msgstr "Eingebundener Base64 Inhalt kann noch nicht verarbeitet werden."
+
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
msgstr ""
#. TRANS: Client error message
@@ -5044,7 +5048,7 @@ msgstr "SMS-Konfiguration"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5076,7 +5080,7 @@ msgstr "Adresse der Homepage dieses Programms"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
-msgstr ""
+msgstr "Für diese Anwendung verantwortliche Organisation"
#: lib/applicationeditform.php:230
msgid "URL for the homepage of the organization"
@@ -5120,11 +5124,11 @@ msgstr "Entfernen"
msgid "Attachments"
msgstr "Anhänge"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Anbieter"
@@ -5144,37 +5148,50 @@ msgstr "Passwort konnte nicht geändert werden"
msgid "Password changing is not allowed"
msgstr "Passwort kann nicht geändert werden"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Befehl-Ergebnisse"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Befehl ausgeführt"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Befehl fehlgeschlagen"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Leider ist dieser Befehl noch nicht implementiert."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Nachricht mit dieser ID existiert nicht"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Benutzer hat keine letzte Nachricht"
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Die bestätigte E-Mail-Adresse konnte nicht gespeichert werden."
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Konnte keinen lokalen Nutzer mit dem Nick %s finden"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Leider ist dieser Befehl noch nicht implementiert."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Es macht keinen Sinn dich selbst anzustupsen!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Stups an %s geschickt"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5185,195 +5202,195 @@ msgstr ""
"Abonnenten: %2$s\n"
"Mitteilungen: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Nachricht mit dieser ID existiert nicht"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Benutzer hat keine letzte Nachricht"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Nachricht als Favorit markiert."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Du bist bereits Mitglied dieser Gruppe"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Konnte Benutzer %s nicht der Gruppe %s hinzufügen"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s ist der Gruppe %s beigetreten"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s hat die Gruppe %s verlassen"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Vollständiger Name: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Standort: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Homepage: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Ãœber: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s ist ein entferntes Profil; man kann direkte Nachrichten nur an Nutzer auf "
+"dem selben Server senden."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Nachricht zu lang - maximal %d Zeichen erlaubt, du hast %d gesendet"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Direkte Nachricht an %s abgeschickt"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Fehler beim Senden der Nachricht"
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Du kannst deine eigenen Nachrichten nicht wiederholen."
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Nachricht bereits wiederholt"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Nachricht von %s wiederholt"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Fehler beim Wiederholen der Nachricht"
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Nachricht zu lange - maximal %d Zeichen erlaubt, du hast %d gesendet"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Antwort an %s gesendet"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Problem beim Speichern der Nachricht."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Gib den Namen des Benutzers an, den du abonnieren möchtest"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Unbekannter Benutzer."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "OMB Profile können nicht mit einem Kommando abonniert werden."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "%s abonniert"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Gib den Namen des Benutzers ein, den du nicht mehr abonnieren möchtest"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s nicht mehr abonniert"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Befehl noch nicht implementiert."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Benachrichtigung deaktiviert."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Konnte Benachrichtigung nicht deaktivieren."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Benachrichtigung aktiviert."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Konnte Benachrichtigung nicht aktivieren."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Anmeldung ist abgeschaltet"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "Der Link ist nur einmal benutzbar und für eine Dauer von 2 Minuten: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "%s nicht mehr abonniert"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Du hast niemanden abonniert."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Niemand hat Dich abonniert."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Du bist in keiner Gruppe Mitglied."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du bist Mitglied dieser Gruppe:"
msgstr[1] "Du bist Mitglied dieser Gruppen:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5414,20 +5431,58 @@ msgid ""
"tracks - not yet implemented.\n"
"tracking - not yet implemented.\n"
msgstr ""
+"Befehle:\n"
+"on - Benachrichtigung einschalten\n"
+"off - Benachrichtigung ausschalten\n"
+"help - diese Hilfe anzeigen\n"
+"follow <nickname> - einem Nutzer folgen\n"
+"groups - Gruppen auflisten in denen du Mitglied bist\n"
+"subscriptions - Leute auflisten denen du folgst\n"
+"subscribers - Leute auflisten die dir folgen\n"
+"leave <nickname> - einem Nutzer nicht mehr folgen\n"
+"d <nickname> <text> - Direkte Nachricht an einen Nutzer schicken\n"
+"get <nickname> - letzte Nachricht eines Nutzers abrufen\n"
+"whois <nickname> - Profil eines Nutzers abrufen\n"
+"lose <nickname> - Nutzer zwingen dir nicht mehr zu folgen\n"
+"fav <nickname> - letzte Nachricht eines Nutzers als Favorit markieren\n"
+"fav #<notice_id> - Nachricht mit bestimmter ID als Favorit markieren\n"
+"repeat #<notice_id> - Nachricht mit bestimmter ID wiederholen\n"
+"repeat <nickname> - letzte Nachricht eines Nutzers wiederholen\n"
+"reply #<notice_id> - Nachricht mit bestimmter ID beantworten\n"
+"reply <nickname> - letzte Nachricht eines Nutzers beantworten\n"
+"join <group> - Gruppe beitreten\n"
+"login - Link zum Anmelden auf der Webseite anfordern\n"
+"drop <group> - Gruppe verlassen\n"
+"stats - deine Statistik abrufen\n"
+"stop - Äquivalent zu 'off'\n"
+"quit - Äquivalent zu '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"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Keine Konfigurationsdatei gefunden."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Bitte die Installation erneut starten um das Problem zu beheben."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Zur Installation gehen."
@@ -5554,6 +5609,8 @@ msgstr ""
#, php-format
msgid "Extra nicknames for the group, comma- or space- separated, max %d"
msgstr ""
+"Zusätzliche Spitznamen für die Gruppe, Komma oder Leerzeichen getrennt, max %"
+"d"
#: lib/groupnav.php:85
msgid "Group"
@@ -5604,52 +5661,52 @@ msgstr "Stichworte in den Nachrichten der Gruppe %s"
msgid "This page is not available in a media type you accept"
msgstr "Dies Seite liegt in keinem von dir akzeptierten Mediatype vor."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Bildformat wird nicht unterstützt."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Du kannst ein Logo für Deine Gruppe hochladen."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Unvollständiges Hochladen."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Systemfehler beim hochladen der Datei."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Kein Bild oder defekte Datei."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Bildformat wird nicht unterstützt."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Daten verloren."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Unbekannter Dateityp"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
-#, fuzzy, php-format
+#: lib/jabber.php:408
+#, php-format
msgid "Unknown inbox source %d."
-msgstr "Unbekannte Sprache „%s“"
+msgstr "Unbekannte inbox Quelle %d."
#: lib/joinform.php:114
msgid "Join"
@@ -5867,6 +5924,16 @@ msgid ""
"Faithfully yours,\n"
"%6$s\n"
msgstr ""
+"%1$s (@%7$s) hat gerade deine Mitteilung von %2$s als Favorit hinzugefügt.\n"
+"Die Adresse der Nachricht ist:\n"
+"%3$s\n"
+"Der Text der Nachricht ist:\n"
+"%4$s\n"
+"Die Favoritenliste von %1$s ist hier:\n"
+"%5$s\n"
+"\n"
+"Gruß,\n"
+"%6$s\n"
#: lib/mail.php:635
#, php-format
@@ -5902,7 +5969,7 @@ msgstr ""
"schicken, um sie in eine Konversation zu verwickeln. Andere Leute können Dir "
"Nachrichten schicken, die nur Du sehen kannst."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "von"
@@ -5972,9 +6039,8 @@ msgid "File could not be moved to destination directory."
msgstr "Datei konnte nicht in das Zielverzeichnis verschoben werden."
#: lib/mediafile.php:201 lib/mediafile.php:237
-#, fuzzy
msgid "Could not determine file's MIME type."
-msgstr "Konnte öffentlichen Stream nicht abrufen."
+msgstr "Konnte den MIME-Typ nicht feststellen."
#: lib/mediafile.php:270
#, php-format
@@ -6039,7 +6105,7 @@ msgstr ""
#: lib/noticelist.php:429
#, php-format
msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
-msgstr ""
+msgstr "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
#: lib/noticelist.php:430
msgid "N"
@@ -6061,23 +6127,23 @@ msgstr "W"
msgid "at"
msgstr "in"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "im Zusammenhang"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Wiederholt von"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Auf diese Nachricht antworten"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Antworten"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Nachricht wiederholt"
@@ -6220,9 +6286,9 @@ msgstr "Diese Nachricht wiederholen"
msgid "Revoke the \"%s\" role from this user"
msgstr "Widerrufe die \"%s\" Rolle von diesem Benutzer"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
-msgstr ""
+msgstr "Kein einzelner Nutzer für den Ein-Benutzer-Modus ausgewählt."
#: lib/sandboxform.php:67
msgid "Sandbox"
@@ -6346,89 +6412,93 @@ msgstr "Lösche dein Abonnement von diesem Benutzer"
msgid "Unsubscribe"
msgstr "Abbestellen"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Avatar bearbeiten"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Benutzeraktionen"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Profil Einstellungen ändern"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Bearbeiten"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Direkte Nachricht an Benutzer verschickt"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Nachricht"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderieren"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Benutzerrolle"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Administrator"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "vor einem Jahr"
@@ -6442,7 +6512,7 @@ msgstr "%s ist keine gültige Farbe!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s ist keine gültige Farbe! Verwenden Sie 3 oder 6 Hex-Zeichen."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index 0ebe84fe7..d2552a088 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -1,6 +1,7 @@
# Translation of StatusNet to Greek
#
# Author@translatewiki.net: Crazymadlover
+# Author@translatewiki.net: Dead3y3
# Author@translatewiki.net: Omnipaedista
# --
# This file is distributed under the same license as the StatusNet package.
@@ -9,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:37+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:26+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
@@ -28,31 +29,30 @@ msgstr "ΠÏόσβαση"
#. TRANS: Page notice
#: actions/accessadminpanel.php:67
-#, fuzzy
msgid "Site access settings"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Ρυθμίσεις Ï€Ïόσβασης ιστοτόπου"
#. TRANS: Form legend for registration form.
#: actions/accessadminpanel.php:161
-#, fuzzy
msgid "Registration"
-msgstr "ΠεÏιγÏαφή"
+msgstr "ΕγγÏαφή"
#. TRANS: Checkbox instructions for admin setting "Private"
#: actions/accessadminpanel.php:165
msgid "Prohibit anonymous users (not logged in) from viewing site?"
msgstr ""
+"ΑπαγόÏευση ανωνÏμων χÏηστών (μη συνδεδεμένων) από το να βλέπουν τον ιστότοπο;"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
msgctxt "LABEL"
msgid "Private"
-msgstr ""
+msgstr "Ιδιωτικό"
#. TRANS: Checkbox instructions for admin setting "Invite only"
#: actions/accessadminpanel.php:174
msgid "Make registration invitation only."
-msgstr ""
+msgstr "Κάντε την εγγÏαφή να είναι με Ï€Ïόσκληση μόνο."
#. TRANS: Checkbox label for configuring site as invite only.
#: actions/accessadminpanel.php:176
@@ -62,24 +62,22 @@ msgstr ""
#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
#: actions/accessadminpanel.php:183
msgid "Disable new registrations."
-msgstr ""
+msgstr "ΑπενεÏγοποίηση των νέων εγγÏαφών"
#. TRANS: Checkbox label for disabling new user registrations.
#: actions/accessadminpanel.php:185
msgid "Closed"
-msgstr ""
+msgstr "Κλειστό"
#. TRANS: Title / tooltip for button to save access settings in site admin panel
#: actions/accessadminpanel.php:202
-#, fuzzy
msgid "Save access settings"
-msgstr "Ρυθμίσεις OpenID"
+msgstr "Αποθήκευση Ïυθμίσεων Ï€Ïόσβασης"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
-msgstr "ΑποχώÏηση"
+msgstr "Αποθήκευση"
#. TRANS: Server error when page not found (404)
#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
@@ -97,7 +95,7 @@ msgstr "Δεν υπάÏχει τέτοια σελίδα"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,18 +104,16 @@ msgstr "Δεν υπάÏχει τέτοια σελίδα"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Κανένας τέτοιος χÏήστης."
#. TRANS: Page title. %1$s is user nickname, %2$d is page number
#: actions/all.php:86
-#, fuzzy, php-format
+#, php-format
msgid "%1$s and friends, page %2$d"
-msgstr "%s και οι φίλοι του/της"
+msgstr "%1$s και φίλοι, σελίδα 2%$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
@@ -152,6 +148,8 @@ msgstr "Ροή φίλων του/της %s (Atom)"
msgid ""
"This is the timeline for %s and friends but no one has posted anything yet."
msgstr ""
+"Αυτό είναι το χÏονοδιάγÏαμμα για %s και φίλους, αλλά κανείς δεν έχει κάνει "
+"καμία αποστολή ακόμα."
#: actions/all.php:139
#, php-format
@@ -159,6 +157,8 @@ msgid ""
"Try subscribing to more people, [join a group](%%action.groups%%) or post "
"something yourself."
msgstr ""
+"Δοκιμάστε την εγγÏαφή σε πεÏισσότεÏους ανθÏώπους, [ενταχθείτε σε μια ομάδα] "
+"(%%action.groups%%) ή αποστείλετε κάτι ο ίδιος."
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:142
@@ -200,14 +200,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!"
@@ -221,8 +221,8 @@ msgstr "Η μέθοδος του ΑΡΙ δε βÏέθηκε!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -253,7 +253,7 @@ msgid "Could not save profile."
msgstr "Απέτυχε η αποθήκευση του Ï€Ïοφίλ."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -338,7 +338,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr ""
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -460,7 +460,7 @@ msgstr "Η ομάδα δεν βÏέθηκε!"
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -511,7 +511,7 @@ msgstr "Μήνυμα"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -577,9 +577,9 @@ msgstr "ΛογαÏιασμός"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Ψευδώνυμο"
@@ -650,12 +650,12 @@ msgstr ""
msgid "Unsupported format."
msgstr ""
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -665,7 +665,7 @@ msgstr ""
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -675,7 +675,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -690,12 +690,12 @@ msgstr ""
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -723,7 +723,7 @@ msgstr ""
msgid "Invalid size."
msgstr ""
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr ""
@@ -755,7 +755,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "ΔιαγÏαφή"
@@ -838,8 +838,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -945,7 +945,7 @@ msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1006,7 +1006,7 @@ msgstr "Είσαι σίγουÏος ότι θες να διαγÏάψεις αυ
msgid "Do not delete this notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr ""
@@ -1268,7 +1268,7 @@ msgstr "Το βιογÏαφικό είναι Ï€Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î¿ (μέγιστ
msgid "Could not update group."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
@@ -1958,7 +1958,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2059,7 +2059,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr ""
@@ -2175,12 +2175,12 @@ msgstr ""
msgid "New message"
msgstr ""
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr ""
@@ -2188,7 +2188,7 @@ msgstr ""
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2202,7 +2202,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2314,7 +2314,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr ""
@@ -2328,8 +2328,8 @@ msgstr "ΣÏνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2467,7 +2467,7 @@ msgstr "Λάθος παλιός κωδικός"
msgid "Error saving user; invalid."
msgstr ""
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "ΑδÏνατη η αποθήκευση του νέου κωδικοÏ"
@@ -2683,8 +2683,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 μικÏά γÏάμματα ή αÏιθμοί, χωÏίς σημεία στίξης ή κενά"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Ονοματεπώνυμο"
@@ -2712,9 +2712,9 @@ msgid "Bio"
msgstr "ΒιογÏαφικό"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Τοποθεσία"
@@ -2728,7 +2728,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -2958,7 +2958,7 @@ msgstr ""
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2978,19 +2978,19 @@ msgstr ""
msgid "Enter a nickname or email address."
msgstr "Εισάγετε ψευδώνυμο ή διεÏθυνση email."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr ""
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -2998,23 +2998,23 @@ msgstr ""
"Οδηγίες για την ανάκτηση του ÎºÏ‰Î´Î¹ÎºÎ¿Ï ÏƒÎ±Ï‚ έχουν σταλεί στην διεÏθυνση email "
"που έχετε καταχωÏίσει στον λογαÏιασμό σας."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Ο κωδικός Ï€Ïέπει να είναι 6 χαÏακτήÏες ή πεÏισσότεÏοι."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Ο κωδικός και η επιβεβαίωση του δεν ταυτίζονται."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3174,7 +3174,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr ""
@@ -3213,7 +3213,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "ΔημιουÏγία"
@@ -3357,7 +3357,7 @@ msgstr "ΠÏοσκλήσεις"
msgid "Description"
msgstr "ΠεÏιγÏαφή"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3469,68 +3469,68 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Μέλη"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "ΔημιουÏγημένος"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3540,7 +3540,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3549,7 +3549,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "ΔιαχειÏιστές"
@@ -4082,12 +4082,12 @@ msgstr ""
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "ΠÏοφίλ χÏήστη"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4407,19 +4407,19 @@ msgstr "ΠÏοσωπικά"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4461,43 +4461,43 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4529,30 +4529,30 @@ msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
msgid "Couldn't delete subscription OMB token."
msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Απέτυχε η διαγÏαφή συνδÏομής."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Δεν ήταν δυνατή η δημιουÏγία ομάδας."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
@@ -4769,7 +4769,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, fuzzy, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4778,13 +4778,13 @@ msgstr ""
"To **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου) που "
"έφεÏε κοντά σας το [%%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, fuzzy, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
"Το **%%site.name%%** είναι μία υπηÏεσία microblogging (μικÏο-ιστολογίου). "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4792,41 +4792,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr ""
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr ""
@@ -4842,6 +4842,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4937,7 +4941,7 @@ msgstr "Επιβεβαίωση διεÏθυνσης email"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5012,11 +5016,11 @@ msgstr ""
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr ""
@@ -5038,37 +5042,50 @@ msgstr "Ο κωδικός αποθηκεÏτηκε."
msgid "Password changing is not allowed"
msgstr "Ο κωδικός αποθηκεÏτηκε."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
msgstr ""
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr ""
+
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Απέτυχε η ενημέÏωση χÏήστη μέσω επιβεβαιωμένης email διεÏθυνσης."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Απέτυχε η ενημέÏωση χÏήστη μέσω επιβεβαιωμένης email διεÏθυνσης."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr ""
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5076,201 +5093,198 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr ""
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Ομάδες με τα πεÏισσότεÏα μέλη"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "ΑδÏνατη η αποθήκευση των νέων πληÏοφοÏιών του Ï€Ïοφίλ"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "ομάδες των χÏηστών %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "ομάδες των χÏηστών %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "Ονοματεπώνυμο"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος."
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Ρυθμίσεις OpenID"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr ""
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr ""
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr ""
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-#, fuzzy
-msgid "No such user"
-msgstr "Κανένας τέτοιος χÏήστης."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Απέτυχε η συνδÏομή."
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
msgstr[1] "Δεν επιτÏέπεται να κάνεις συνδÏομητές του λογαÏÎ¹Î±ÏƒÎ¼Î¿Ï ÏƒÎ¿Ï… άλλους."
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Δεν είστε μέλος καμίας ομάδας."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ομάδες με τα πεÏισσότεÏα μέλη"
msgstr[1] "Ομάδες με τα πεÏισσότεÏα μέλη"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5312,20 +5326,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Ο κωδικός επιβεβαίωσης δεν βÏέθηκε."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5501,50 +5515,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "ΑδÏνατη η αποθήκευση του Ï€Ïοφίλ."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5741,7 +5755,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "από"
@@ -5894,23 +5908,23 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Επαναλαμβάνεται από"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Ρυθμίσεις OpenID"
@@ -6056,7 +6070,7 @@ msgstr "Αδυναμία διαγÏαφής Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… μηνÏματος
msgid "Revoke the \"%s\" role from this user"
msgstr ""
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6186,91 +6200,95 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr ""
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "ΕπεξεÏγασία Ïυθμίσεων Ï€Ïοφίλ"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "ΕπεξεÏγασία"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Μήνυμα"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "ΠÏοφίλ χÏήστη"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "ΔιαχειÏιστές"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr ""
@@ -6284,7 +6302,7 @@ msgstr "Το %s δεν είναι ένα έγκυÏο χÏώμα!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index 8d846c4e2..361270cbb 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:40+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:29+0000\n"
"Language-Team: British English\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
@@ -96,7 +96,7 @@ msgstr "No such page"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -105,10 +105,8 @@ msgstr "No such page"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "No such user."
@@ -206,14 +204,14 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API method not found."
@@ -226,8 +224,8 @@ msgstr "API method not found."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "This method requires a POST."
@@ -260,7 +258,7 @@ msgid "Could not save profile."
msgstr "Couldn't save profile."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "No status found with that ID."
msgid "This status is already a favorite."
msgstr "This status is already a favourite."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Could not create favourite."
@@ -463,7 +461,7 @@ msgstr "Group not found!"
msgid "You are already a member of that group."
msgstr "You are already a member of that group."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "You have been blocked from that group by the admin."
@@ -513,7 +511,7 @@ msgstr "Invalid token."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -582,9 +580,9 @@ msgstr "Account"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Nickname"
@@ -653,12 +651,12 @@ msgstr "Max notice size is %d chars, including attachment URL."
msgid "Unsupported format."
msgstr "Unsupported format."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favourites from %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates favourited by %2$s / %2$s."
@@ -668,7 +666,7 @@ msgstr "%1$s updates favourited by %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Updates mentioning %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s updates that reply to updates from %2$s / %3$s."
@@ -678,7 +676,7 @@ msgstr "%1$s updates that reply to updates from %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s public timeline"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates from everyone!"
@@ -693,12 +691,12 @@ msgstr "Repeated to %s"
msgid "Repeats of %s"
msgstr "Repeats of %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notices tagged with %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates tagged with %1$s on %2$s!"
@@ -726,7 +724,7 @@ msgstr "No size."
msgid "Invalid size."
msgstr "Invalid size."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -758,7 +756,7 @@ msgid "Preview"
msgstr "Preview"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Delete"
@@ -841,8 +839,8 @@ msgstr "Failed to save block information."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "No such group."
@@ -943,7 +941,7 @@ msgstr "You are not the owner of this application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "There was a problem with your session token."
@@ -1004,7 +1002,7 @@ msgstr "Are you sure you want to delete this notice?"
msgid "Do not delete this notice"
msgstr "Do not delete this notice"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Delete this notice"
@@ -1257,7 +1255,7 @@ msgstr "description is too long (max %d chars)."
msgid "Could not update group."
msgstr "Could not update group."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Could not create aliases"
@@ -1952,7 +1950,7 @@ msgstr "Invite new users"
msgid "You are already subscribed to these users:"
msgstr "You are already subscribed to these users:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2083,7 +2081,7 @@ msgstr "%1$s joined group %2$s"
msgid "You must be logged in to leave a group."
msgstr "You must be logged in to leave a group."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "You are not a member of that group."
@@ -2196,12 +2194,12 @@ msgstr "Use this form to create a new group."
msgid "New message"
msgstr "New message"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "You can't send a message to this user."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "No content!"
@@ -2209,7 +2207,7 @@ msgstr "No content!"
msgid "No recipient specified."
msgstr "No recipient specified."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2224,7 +2222,7 @@ msgstr "Message sent"
msgid "Direct message to %s sent."
msgstr "Could not create application."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax Error"
@@ -2342,7 +2340,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Notice has no profile"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s's status on %2$s"
@@ -2355,8 +2353,8 @@ msgstr "content type "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Not a supported data format."
@@ -2487,7 +2485,7 @@ msgstr "Incorrect old password"
msgid "Error saving user; invalid."
msgstr "Error saving user; invalid."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Can't save new password."
@@ -2699,8 +2697,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 lowercase letters or numbers, no punctuation or spaces"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Full name"
@@ -2727,9 +2725,9 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Location"
@@ -2743,7 +2741,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Tags"
@@ -2978,7 +2976,7 @@ msgstr "Reset password"
msgid "Recover password"
msgstr "Recover password"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Password recovery requested"
@@ -2998,19 +2996,19 @@ msgstr "Reset"
msgid "Enter a nickname or email address."
msgstr "Enter a nickname or e-mail address."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "No user with that e-mail address or username."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "No registered e-mail address for that user."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Error saving address confirmation."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3018,23 +3016,23 @@ msgstr ""
"Instructions for recovering your password have been sent to the e-mail "
"address registered to your account."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Unexpected password reset."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Password must be 6 chars or more."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Password and confirmation do not match."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Error setting user."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "New password successfully saved. You are now logged in."
@@ -3194,7 +3192,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL of your profile on another compatible microblogging service"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscribe"
@@ -3230,7 +3228,7 @@ msgstr "You can't repeat your own notice."
msgid "You already repeated that notice."
msgstr "You already repeated that notice."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repeated"
@@ -3373,7 +3371,7 @@ msgstr "Organization"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistics"
@@ -3491,67 +3489,67 @@ msgstr "%s group"
msgid "%1$s group, page %2$d"
msgstr "%1$s group, page %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Group profile"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Note"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Group actions"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Notice feed for %s group (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Notice feed for %s group (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Notice feed for %s group (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Outbox for %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Members"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(None)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "All members"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Created"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3566,7 +3564,7 @@ msgstr ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3579,7 +3577,7 @@ msgstr ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Admins"
@@ -4117,12 +4115,12 @@ msgstr "No ID argument."
msgid "Tag %s"
msgstr "Tag %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "User profile"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Photo"
@@ -4460,19 +4458,19 @@ msgstr "Version"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4510,26 +4508,26 @@ msgstr "Could not insert message."
msgid "Could not update message with new URI."
msgstr "Could not update message with new URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "DB error inserting hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problem saving notice. Too long."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problem saving notice. Unknown user."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Too many notices too fast; take a breather and post again in a few minutes."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4537,19 +4535,19 @@ msgstr ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "You are banned from posting notices on this site."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problem saving notice."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problem saving group inbox."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4580,28 +4578,28 @@ msgstr "Couldn't delete self-subscription."
msgid "Couldn't delete subscription OMB token."
msgstr "Couldn't delete subscription."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Couldn't delete subscription."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welcome to %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Could not create group."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Could not set group URI."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Could not set group membership."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Could not save local group info."
@@ -4822,7 +4820,7 @@ msgstr "Badge"
msgid "StatusNet software license"
msgstr "StatusNet software licence"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4831,12 +4829,12 @@ msgstr ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is a microblogging service."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4847,41 +4845,41 @@ msgstr ""
"s, available under the [GNU Affero General Public Licence](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Site content license"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "All "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licence."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "After"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Before"
@@ -4897,6 +4895,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4987,7 +4989,7 @@ msgstr "Paths configuration"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5061,11 +5063,11 @@ msgstr "Revoke"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Provider"
@@ -5085,37 +5087,50 @@ msgstr "Password changing failed"
msgid "Password changing is not allowed"
msgstr "Password changing is not allowed"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Command results"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Command complete"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Command failed"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Notice with that id does not exist"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "User has no last notice"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Could not find a user with nickname %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Could not find a user with nickname %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Sorry, this command is not yet implemented."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Nudge sent to %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5123,195 +5138,194 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Notice with that id does not exist"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "User has no last notice"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Notice marked as fave."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "You are already a member of that group."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Could not join user %s to group %s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s joined group %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Could not remove user %s to group %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s left group %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Fullname: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Location: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Homepage: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "About: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Message too long - maximum is %d characters, you sent %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Direct message to %s sent"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Error sending direct message."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Cannot repeat your own notice."
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Already repeated that notice."
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Notice from %s repeated"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Error repeating notice."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Notice too long - maximum is %d characters, you sent %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Reply to %s sent"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Error saving notice."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Specify the name of the user to subscribe to"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "No such user."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "You are not subscribed to that profile."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Subscribed to %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specify the name of the user to unsubscribe from"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Unsubscribed from %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Command not yet implemented."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notification off."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Can't turn off notification."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notification on."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Can't turn on notification."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Unsubscribed %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "You are not subscribed to anyone."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "No one is subscribed to you."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "You are not a member of any groups."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5353,19 +5367,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "No configuration file found"
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Go to the installer."
@@ -5541,49 +5555,49 @@ msgstr "Tags in %s group's notices"
msgid "This page is not available in a media type you accept"
msgstr "This page is not available in a media type you accept"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Unsupported image file format."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "That file is too big. The maximum file size is %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Partial upload."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "System error uploading file."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Not an image or corrupt file."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Unsupported image file format."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Lost our file."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Unknown file type"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5796,7 +5810,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "from"
@@ -5946,23 +5960,23 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repeated by"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Reply to this notice"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Reply"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Notice repeated"
@@ -6104,7 +6118,7 @@ msgstr "Repeat this notice"
msgid "Revoke the \"%s\" role from this user"
msgstr "Block this user from this group"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6230,91 +6244,95 @@ msgstr "Unsubscribe from this user"
msgid "Unsubscribe"
msgstr "Unsubscribe"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Edit Avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "User actions"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Edit profile settings"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Send a direct message to this user"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "User profile"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Admins"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "a few seconds ago"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "about a year ago"
@@ -6328,7 +6346,7 @@ msgstr "%s is not a valid colour!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s is not a valid colour! Use 3 or 6 hex chars."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Message too long - maximum is %1$d characters, you sent %2$d."
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index cdc0184e4..9b21560f9 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -13,12 +13,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:43+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:32+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
@@ -47,7 +47,6 @@ msgstr "¿Prohibir a los usuarios anónimos (no conectados) ver el sitio?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privado"
@@ -78,7 +77,6 @@ msgid "Save access settings"
msgstr "Guardar la configuración de acceso"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Guardar"
@@ -99,7 +97,7 @@ msgstr "No existe tal página"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -108,10 +106,8 @@ msgstr "No existe tal página"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "No existe ese usuario."
@@ -210,14 +206,14 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método de API no encontrado."
@@ -230,8 +226,8 @@ msgstr "Método de API no encontrado."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requiere un POST."
@@ -262,7 +258,7 @@ msgid "Could not save profile."
msgstr "No se pudo guardar el perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -348,7 +344,7 @@ msgstr "No se encontró estado para ese ID"
msgid "This status is already a favorite."
msgstr "Este status ya está en favoritos."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "No se pudo crear favorito."
@@ -467,7 +463,7 @@ msgstr "¡No se ha encontrado el grupo!"
msgid "You are already a member of that group."
msgstr "Ya eres miembro de ese grupo"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Has sido bloqueado de ese grupo por el administrador."
@@ -517,7 +513,7 @@ msgstr "Token inválido."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -589,9 +585,9 @@ msgstr "Cuenta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Apodo"
@@ -662,12 +658,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Formato no soportado."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritos de %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
@@ -677,7 +673,7 @@ msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Actualizaciones que mencionan %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s"
@@ -687,7 +683,7 @@ msgstr "actualizaciones de %1$s en respuesta a las de %2$s / %3$s"
msgid "%s public timeline"
msgstr "línea temporal pública de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "¡Actualizaciones de todos en %s!"
@@ -702,12 +698,12 @@ msgstr "Repetido a %s"
msgid "Repeats of %s"
msgstr "Repeticiones de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Avisos marcados con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizaciones etiquetadas con %1$s en %2$s!"
@@ -735,7 +731,7 @@ msgstr "Ningún tamaño."
msgid "Invalid size."
msgstr "Tamaño inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -767,7 +763,7 @@ msgid "Preview"
msgstr "Vista previa"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Borrar"
@@ -850,8 +846,8 @@ msgstr "No se guardó información de bloqueo."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "No existe ese grupo."
@@ -953,7 +949,7 @@ msgstr "No eres el propietario de esta aplicación."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Hubo problemas con tu clave de sesión."
@@ -1014,7 +1010,7 @@ msgstr "¿Estás seguro de que quieres eliminar este aviso?"
msgid "Do not delete this notice"
msgstr "No eliminar este mensaje"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Borrar este aviso"
@@ -1267,7 +1263,7 @@ msgstr "La descripción es muy larga (máx. %d caracteres)."
msgid "Could not update group."
msgstr "No se pudo actualizar el grupo."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "No fue posible crear alias."
@@ -1586,23 +1582,20 @@ msgid "Cannot read file."
msgstr "No se puede leer archivo."
#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
msgid "Invalid role."
-msgstr "Token inválido."
+msgstr "Función no válida."
#: actions/grantrole.php:66 actions/revokerole.php:66
msgid "This role is reserved and cannot be set."
-msgstr ""
+msgstr "Esta función es reservada y no puede asignarse."
#: actions/grantrole.php:75
-#, fuzzy
msgid "You cannot grant user roles on this site."
-msgstr "No puedes enviar mensaje a este usuario."
+msgstr "No puedes conceder funciones de usuario en este sitio."
#: actions/grantrole.php:82
-#, fuzzy
msgid "User already has this role."
-msgstr "El usuario te ha bloqueado."
+msgstr "El usuario ya tiene esta función."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1978,7 +1971,7 @@ msgstr "Invitar nuevos usuarios:"
msgid "You are already subscribed to these users:"
msgstr "Ya estás suscrito a estos usuarios:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2025,7 +2018,6 @@ msgstr "Opcionalmente añada un mensaje personalizado a su invitación."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
@@ -2097,9 +2089,8 @@ msgid "You must be logged in to join a group."
msgstr "Debes estar conectado para unirte a un grupo."
#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
msgid "No nickname or ID."
-msgstr "Ningún apodo."
+msgstr "Ningún nombre de usuario o ID."
#: actions/joingroup.php:141
#, php-format
@@ -2110,7 +2101,7 @@ msgstr "%1$s se ha unido al grupo %2$"
msgid "You must be logged in to leave a group."
msgstr "Debes estar conectado para dejar un grupo."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "No eres miembro de este grupo."
@@ -2226,12 +2217,12 @@ msgstr "Usa este formulario para crear un grupo nuevo."
msgid "New message"
msgstr "Nuevo Mensaje "
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "No puedes enviar mensaje a este usuario."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "¡Ningún contenido!"
@@ -2239,7 +2230,7 @@ msgstr "¡Ningún contenido!"
msgid "No recipient specified."
msgstr "No se especificó receptor."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "No te auto envíes un mensaje; dícetelo a ti mismo."
@@ -2253,7 +2244,7 @@ msgstr "Mensaje enviado"
msgid "Direct message to %s sent."
msgstr "Se ha enviado un mensaje directo a %s."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Error de Ajax"
@@ -2376,7 +2367,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Aviso sin perfil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "estado de %1$s en %2$s"
@@ -2389,8 +2380,8 @@ msgstr "tipo de contenido "
msgid "Only "
msgstr "Sólo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@@ -2522,7 +2513,7 @@ msgstr "Contraseña antigua incorrecta."
msgid "Error saving user; invalid."
msgstr "Error al guardar el usuario; inválido."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "No se puede guardar la nueva contraseña."
@@ -2538,6 +2529,7 @@ msgstr "Rutas"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
msgstr ""
+"Configuración de la ruta de acceso y del servidor de este sitio StatusNet."
#: actions/pathsadminpanel.php:157
#, php-format
@@ -2580,9 +2572,8 @@ msgid "Path"
msgstr "Ruta"
#: actions/pathsadminpanel.php:242
-#, fuzzy
msgid "Site path"
-msgstr "Aviso de sitio"
+msgstr "Ruta del sitio"
#: actions/pathsadminpanel.php:246
msgid "Path to locales"
@@ -2610,7 +2601,7 @@ msgstr "Servidor de los temas"
#: actions/pathsadminpanel.php:268
msgid "Theme path"
-msgstr ""
+msgstr "Ruta del tema"
#: actions/pathsadminpanel.php:272
msgid "Theme directory"
@@ -2643,7 +2634,7 @@ msgstr "Servidor de fondo"
#: actions/pathsadminpanel.php:309
msgid "Background path"
-msgstr ""
+msgstr "Ruta del fondo"
#: actions/pathsadminpanel.php:313
msgid "Background directory"
@@ -2682,9 +2673,8 @@ msgid "Server to direct SSL requests to"
msgstr "Servidor hacia el cual dirigir las solicitudes SSL"
#: actions/pathsadminpanel.php:352
-#, fuzzy
msgid "Save paths"
-msgstr "Aviso de sitio"
+msgstr "Guardar rutas"
#: actions/peoplesearch.php:52
#, php-format
@@ -2739,8 +2729,8 @@ msgstr ""
"1-64 letras en minúscula o números, sin signos de puntuación o espacios"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nombre completo"
@@ -2767,9 +2757,9 @@ msgid "Bio"
msgstr "Biografía"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Ubicación"
@@ -2783,7 +2773,7 @@ msgstr "Compartir mi ubicación actual al publicar los mensajes"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Tags"
@@ -3024,7 +3014,7 @@ msgstr "Restablecer contraseña"
msgid "Recover password"
msgstr "Recuperar contraseña"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Recuperación de contraseña solicitada"
@@ -3044,19 +3034,19 @@ msgstr "Restablecer"
msgid "Enter a nickname or email address."
msgstr "Ingresa un apodo o correo electronico"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "No hay ningún usuario con esa dirección de correo o nombre de usuario."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ninguna dirección de correo electrónico registrada por este usuario."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Error al guardar confirmación de la dirección."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3064,23 +3054,23 @@ msgstr ""
"Se enviaron instrucciones para recuperar tu contraseña a la dirección de "
"correo registrada."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Restablecimiento de contraseña inesperado."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "La contraseña debe tener 6 o más caracteres."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "La contraseña y la confirmación no coinciden."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Error al configurar el usuario."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nueva contraseña guardada correctamente. Has iniciado una sesión."
@@ -3244,7 +3234,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "El URL de tu perfil en otro servicio de microblogueo compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Suscribirse"
@@ -3282,7 +3272,7 @@ msgstr "No puedes repetir tus propios mensajes."
msgid "You already repeated that notice."
msgstr "Ya has repetido este mensaje."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repetido"
@@ -3343,14 +3333,12 @@ msgid "Replies to %1$s on %2$s!"
msgstr "Respuestas a %1$s en %2$s!"
#: actions/revokerole.php:75
-#, fuzzy
msgid "You cannot revoke user roles on this site."
-msgstr "No puedes enviar mensaje a este usuario."
+msgstr "No puedes revocar funciones de usuario en este sitio."
#: actions/revokerole.php:82
-#, fuzzy
msgid "User doesn't have this role."
-msgstr "Usuario sin perfil coincidente."
+msgstr "El usuario no tiene esta función."
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
@@ -3424,7 +3412,7 @@ msgstr "Organización"
msgid "Description"
msgstr "Descripción"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadísticas"
@@ -3536,68 +3524,67 @@ msgstr "Grupo %s"
msgid "%1$s group, page %2$d"
msgstr "Miembros del grupo %s, página %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Perfil del grupo"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Acciones del grupo"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Bandeja de salida para %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
-#, fuzzy
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Miembros"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ninguno)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Todos los miembros"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Creado"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3607,7 +3594,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3618,7 +3605,7 @@ msgstr ""
"**%s** es un grupo de usuarios en %%%%site.name%%%%, un servicio [micro-"
"blogging](http://en.wikipedia.org/wiki/Micro-blogging) "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administradores"
@@ -3806,9 +3793,8 @@ msgid "Default timezone for the site; usually UTC."
msgstr "Zona horaria predeterminada del sitio; generalmente UTC."
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Idioma predeterminado del sitio"
+msgstr "!Idioma predeterminado"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
@@ -3835,9 +3821,8 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr "Cuántos segundos es necesario esperar para publicar lo mismo de nuevo."
#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
msgid "Site Notice"
-msgstr "Aviso de sitio"
+msgstr "Aviso del sitio"
#: actions/sitenoticeadminpanel.php:67
#, fuzzy
@@ -4165,12 +4150,12 @@ msgstr "No existe argumento de ID."
msgid "Tag %s"
msgstr "%s tag"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Perfil de usuario"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4503,19 +4488,19 @@ msgstr "Sesiones"
msgid "Author(s)"
msgstr "Autor(es)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4556,27 +4541,27 @@ msgstr "No se pudo insertar mensaje."
msgid "Could not update message with new URI."
msgstr "No se pudo actualizar mensaje con nuevo URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Error de la BD al insertar la etiqueta clave: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4585,20 +4570,20 @@ msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Tienes prohibido publicar avisos en este sitio."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4630,30 +4615,30 @@ msgstr "No se pudo eliminar la suscripción."
msgid "Couldn't delete subscription OMB token."
msgstr "No se pudo eliminar la suscripción."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "No se pudo eliminar la suscripción."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenido a %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "No se pudo crear grupo."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "No se pudo configurar miembros de grupo."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "No se pudo configurar miembros de grupo."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "No se ha podido guardar la suscripción."
@@ -4875,7 +4860,7 @@ msgstr "Insignia"
msgid "StatusNet software license"
msgstr "Licencia de software de StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4884,12 +4869,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblogueo de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblogueo."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4900,43 +4885,43 @@ msgstr ""
"disponible bajo la [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licencia de contenido del sitio"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Derechos de autor de contenido y datos por los colaboradores. Todos los "
"derechos reservados."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Todo"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "Licencia."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginación"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Después"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Antes"
@@ -4952,6 +4937,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5047,7 +5036,7 @@ msgstr "SMS confirmación"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5124,11 +5113,11 @@ msgstr "Revocar"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Proveedor"
@@ -5149,37 +5138,50 @@ msgstr "El cambio de contraseña ha fallado"
msgid "Password changing is not allowed"
msgstr "Cambio de contraseña "
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultados de comando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Comando completo"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Comando falló"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Disculpa, todavía no se implementa este comando."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "No existe ningún mensaje con ese id"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Usuario no tiene último aviso"
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "No se pudo encontrar a nadie con el nombre de usuario %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "No se pudo encontrar a nadie con el nombre de usuario %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Disculpa, todavía no se implementa este comando."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "zumbido enviado a %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5187,200 +5189,199 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "No existe ningún mensaje con ese id"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Usuario no tiene último aviso"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Aviso marcado como favorito."
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Ya eres miembro de ese grupo"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "No se puede unir usuario %s a grupo %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s se unió a grupo %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "No se pudo eliminar a usuario %s de grupo %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s dejó grupo %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nombre completo: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Lugar: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Página de inicio: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Sobre: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Se envió mensaje directo a %s"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Error al enviar mensaje directo."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "No se puede activar notificación."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Borrar este aviso"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Aviso publicado"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Hubo un problema al guardar el aviso."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Responder este aviso."
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Hubo un problema al guardar el aviso."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Especificar el nombre del usuario a suscribir"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "No existe ese usuario."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "No te has suscrito a ese perfil."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Suscrito a %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especificar el nombre del usuario para desuscribirse de"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Desuscrito de %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Todavía no se implementa comando."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificación no activa."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "No se puede desactivar notificación."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificación activada."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "No se puede activar notificación."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Desuscrito de %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "No estás suscrito a nadie."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Nadie está suscrito a ti."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "No eres miembro de ningún grupo"
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Eres miembro de este grupo:"
msgstr[1] "Eres miembro de estos grupos:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5422,19 +5423,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Ningún archivo de configuración encontrado. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Ir al instalador."
@@ -5614,49 +5615,49 @@ msgstr "Tags en avisos del grupo %s"
msgid "This page is not available in a media type you accept"
msgstr "Esta página no está disponible en el tipo de medio que aceptas."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato de imagen no soportado."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Puedes cargar una imagen de logo para tu grupo."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Carga parcial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Error del sistema al cargar el archivo."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "No es una imagen o es un fichero corrupto."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato de imagen no soportado."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Se perdió nuestro archivo."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tipo de archivo desconocido"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5867,7 +5868,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "desde"
@@ -6023,24 +6024,24 @@ msgstr ""
msgid "at"
msgstr "en"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "en contexto"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Responder este aviso."
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Aviso borrado"
@@ -6188,7 +6189,7 @@ msgstr "Responder este aviso."
msgid "Revoke the \"%s\" role from this user"
msgstr "Bloquear este usuario de este grupo"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6321,92 +6322,96 @@ msgstr "Desuscribirse de este usuario"
msgid "Unsubscribe"
msgstr "Cancelar suscripción"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "editar avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Acciones de usuario"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Editar configuración del perfil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Enviar un mensaje directo a este usuario"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Mensaje"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderar"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Perfil de usuario"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Administradores"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "Moderar"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "hace unos segundos"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "hace un año"
@@ -6420,7 +6425,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensaje muy largo - máximo 140 caracteres, enviaste %d"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
index 955efd243..7d948015a 100644
--- a/locale/fa/LC_MESSAGES/statusnet.po
+++ b/locale/fa/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:48+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:38+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -20,7 +20,7 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#. TRANS: Page title
@@ -101,7 +101,7 @@ msgstr "چنین صÙحه‌ای وجود ندارد"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -110,10 +110,8 @@ msgstr "چنین صÙحه‌ای وجود ندارد"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "چنین کاربری وجود ندارد."
@@ -210,14 +208,14 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "رابط مورد نظر پیدا نشد."
@@ -230,8 +228,8 @@ msgstr "رابط مورد نظر پیدا نشد."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "برای استÙاده از این روش باید اطلاعات را به صورت پست بÙرستید"
@@ -260,7 +258,7 @@ msgid "Could not save profile."
msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "هیچ وضعیتی با آن شناسه پیدا نشد."
msgid "This status is already a favorite."
msgstr "این وضعیت درحال حاضر یک وضعیت مورد علاقه است!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "نمی‌توان وضعیت را موردعلاقه کرد."
@@ -465,7 +463,7 @@ msgstr "گروه یاÙت نشد!"
msgid "You are already a member of that group."
msgstr "شما از پیش یک عضو این گروه هستید."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "دسترسی شما به گروه توسط مدیر آن محدود شده است."
@@ -516,7 +514,7 @@ msgstr "اندازه‌ی نادرست"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -581,9 +579,9 @@ msgstr "حساب کاربری"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "نام کاربری"
@@ -654,12 +652,12 @@ msgstr "حداکثر طول پیام %d حر٠است Ú©Ù‡ شامل ضمیمه Ù
msgid "Unsupported format."
msgstr "قالب پشتیبانی نشده."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / دوست داشتنی از %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s به روز رسانی های دوست داشتنی %s / %s"
@@ -669,7 +667,7 @@ msgstr "%s به روز رسانی های دوست داشتنی %s / %s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%$1s / به روز رسانی های شامل %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s به روز رسانی هایی که در پاسخ به $2$s / %3$s"
@@ -679,7 +677,7 @@ msgstr "%1$s به روز رسانی هایی که در پاسخ به $2$s / %3$s
msgid "%s public timeline"
msgstr "%s خط‌زمانی عمومی"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s به روز رسانی های عموم"
@@ -694,12 +692,12 @@ msgstr ""
msgid "Repeats of %s"
msgstr "تکرار %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "پیام‌هایی که با %s نشانه گزاری شده اند."
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s"
@@ -727,7 +725,7 @@ msgstr "بدون اندازه."
msgid "Invalid size."
msgstr "اندازه‌ی نادرست"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "چهره"
@@ -760,7 +758,7 @@ msgid "Preview"
msgstr "پیش‌نمایش"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "حذÙ"
@@ -844,8 +842,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "چنین گروهی وجود ندارد."
@@ -950,7 +948,7 @@ msgstr "شما یک عضو این گروه نیستید."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1014,7 +1012,7 @@ msgstr "آیا اطمینان دارید Ú©Ù‡ می‌خواهید این پیاÙ
msgid "Do not delete this notice"
msgstr "این پیام را پاک نکن"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "این پیام را پاک کن"
@@ -1277,7 +1275,7 @@ msgstr "توصی٠بسیار زیاد است (حداکثر %d حرÙ)."
msgid "Could not update group."
msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "نمی‌توان نام‌های مستعار را ساخت."
@@ -1971,7 +1969,7 @@ msgstr "دعوت کردن کاربران تازه"
msgid "You are already subscribed to these users:"
msgstr "هم اکنون شما این کاربران را دنبال می‌کنید: "
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2076,7 +2074,7 @@ msgstr "ملحق شدن به گروه"
msgid "You must be logged in to leave a group."
msgstr "برای ترک یک گروه، شما باید وارد شده باشید."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "شما یک کاربر این گروه نیستید."
@@ -2193,12 +2191,12 @@ msgstr "از این Ùرم برای ساختن یک گروه جدید استÙا
msgid "New message"
msgstr "پیام جدید"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "شما نمی توانید به این کاربر پیام بÙرستید."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "بدون محتوا!"
@@ -2206,7 +2204,7 @@ msgstr "بدون محتوا!"
msgid "No recipient specified."
msgstr "هیچ گیرنده ای مشخص نشده"
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "یک پیام را به خودتان Ù†Ùرستید؛ در عوض آن را آهسته برای خود بگویید."
@@ -2220,7 +2218,7 @@ msgstr "پیام Ùرستاده‌شد"
msgid "Direct message to %s sent."
msgstr "پیام مستقیم به %s Ùرستاده شد."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "اشکال آژاکسی"
@@ -2342,7 +2340,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "ابن خبر ذخیره ای ندارد ."
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "وضعیت %1$s در %2$s"
@@ -2355,8 +2353,8 @@ msgstr "نوع محتوا "
msgid "Only "
msgstr " Ùقط"
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
@@ -2494,7 +2492,7 @@ msgstr "گذرواژه قدیمی اشتباه است"
msgid "Error saving user; invalid."
msgstr "خطا هنگام ذخیره ی کاربر؛ نا معتبر."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد."
@@ -2708,8 +2706,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "Û±-Û¶Û´ کاراکتر Ú©ÙˆÚ†Ú© یا اعداد، بدون نقطه گذاری یا Ùاصله"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "نام‌کامل"
@@ -2736,9 +2734,9 @@ msgid "Bio"
msgstr "شرح‌حال"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "موقعیت"
@@ -2752,7 +2750,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "برچسب‌ها"
@@ -2978,7 +2976,7 @@ msgstr "ریست کردن کلمه ی عبور"
msgid "Recover password"
msgstr "بازیابی کلمه ی عبور"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "بازیابی کلمه ی عبور درخواست شد"
@@ -2998,19 +2996,19 @@ msgstr "ریست( راه انداری مجدد )"
msgid "Enter a nickname or email address."
msgstr "یک نام کاربری یا آدرس ایمیل وارد کنید."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "هیچ کاربری با آن آدرس ایمیل یا نام کاربری وجود ندارد."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "برای آن کاربر آدرس ایمیل ثبت شده وجود ندارد."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "خطا هنگام ذخیره ی تاییدیه ی آدرس."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3018,23 +3016,23 @@ msgstr ""
"دستورالعمل چگونگی بازیابی کلمه ی عبور به آدرس ایمیل ثبت شده در حساب شما "
"ارسال شده است."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "کلمه ی عبور به طور غیر منتظره ریست شد."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "کلمه ی عبور باید ۶ کاراکتر یا بیشتر باشد."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "کلمه ی عبور و تاییدیه ی آن با هم تطابق ندارند."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "کلمه ÛŒ عبور جدید با موÙقیت ذخیره شد. شما الان وارد شده اید."
@@ -3177,7 +3175,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr ""
@@ -3213,7 +3211,7 @@ msgstr "شما نمی توانید Ø¢Ú¯Ù‡ÛŒ خودتان را تکرار Ú©Ù†ÛŒØ
msgid "You already repeated that notice."
msgstr "شما قبلا آن آگهی را تکرار کردید."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr ""
@@ -3360,7 +3358,7 @@ msgstr "صÙحه بندى"
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "آمار"
@@ -3473,67 +3471,67 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "اعضای گروه %sØŒ صÙحهٔ %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "نام های مستعار"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "اعضا"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "هیچ"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "همه ی اعضا"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "ساخته شد"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3543,7 +3541,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3552,7 +3550,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4091,12 +4089,12 @@ msgstr ""
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "پروÙایل کاربر"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4411,19 +4409,19 @@ msgstr "شخصی"
msgid "Author(s)"
msgstr "مؤلÙ"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4463,27 +4461,27 @@ msgstr "پیغام نمی تواند درج گردد"
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"تعداد خیلی زیاد آگهی و بسیار سریع؛ استراحت کنید و مجددا دقایقی دیگر ارسال "
"کنید."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4491,20 +4489,20 @@ msgstr ""
"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
"ارسال کنید."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "شما از Ùرستادن پست در این سایت مردود شدید ."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4534,29 +4532,29 @@ msgstr ""
msgid "Couldn't delete subscription OMB token."
msgstr "نمی‌توان تصدیق پست الکترونیک را پاک کرد."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr ""
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "خوش امدید به %1$s , @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "نمیتوان گروه را تشکیل داد"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "نمیتوان گروه را تشکیل داد"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
@@ -4777,19 +4775,19 @@ msgstr ""
msgid "StatusNet software license"
msgstr "StatusNet مجوز نرم اÙزار"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4797,41 +4795,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "مجوز محتویات سایت"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "همه "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "مجوز."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "صÙحه بندى"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "بعد از"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "قبل از"
@@ -4847,6 +4845,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4941,7 +4943,7 @@ msgstr "پیکره بندی اصلی سایت"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5017,11 +5019,11 @@ msgstr "حذÙ"
msgid "Attachments"
msgstr "ضمائم"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "مؤلÙ"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "مهیا کننده"
@@ -5043,37 +5045,50 @@ msgstr "تغییر گذرواژه"
msgid "Password changing is not allowed"
msgstr "تغییر گذرواژه"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "نتیجه دستور"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "دستور انجام شد"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Ùرمان شکست خورد"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "متاسÙانه این دستور هنوز اجرا نشده."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "خبری با این مشخصه ایجاد نشد"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "کاربر آگهی آخر ندارد"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "پیدا نشد %s کاریری یا نام مستعار"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "پیدا نشد %s کاریری یا نام مستعار"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "متاسÙانه این دستور هنوز اجرا نشده."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Ùرتادن اژیر"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5084,197 +5099,195 @@ msgstr ""
"مشترک : %2$s\n"
"خبر : %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "خبری با این مشخصه ایجاد نشد"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "کاربر آگهی آخر ندارد"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "شما از پیش یک عضو این گروه هستید."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "عضویت %s در گروه %s نا موÙÙ‚ بود."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "ملحق شدن به گروه"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "خارج شدن %s از گروه %s نا موÙÙ‚ بود"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s گروه %s را ترک کرد."
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "نام کامل : %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "موقعیت : %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "صÙحه خانگی : %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "درباره ی : %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"پیغام بسیار طولانی است - بیشترین اندازه امکان پذیر %d کاراکتر است , شما %d "
"تا Ùرستادید"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "پیام مستقیم به %s Ùرستاده شد."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "خطا در Ùرستادن پیام مستقیم."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "نمی توان آگهی خودتان را تکرار کرد"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "آن آگهی قبلا تکرار شده است."
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "آگهی تکرار شد"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "خطا هنگام تکرار آگهی."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"پیغام بسیار طولانی است - بیشترین اندازه امکان پذیر %d کاراکتر است , شما %d "
"تا Ùرستادید"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "به این آگهی جواب دهید"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "خطا هنگام ذخیره ی آگهی"
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "چنین کاربری وجود ندارد."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "شما به این پروÙيل متعهد نشدید"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "دستور هنوز اجرا نشده"
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "ناتوان در خاموش کردن آگاه سازی."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "آگاه سازی Ùعال است."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "ناتوان در روشن کردن آگاه سازی."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Ùرمان ورود از کار اÙتاده است"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "مشترک‌ها"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "شما توسط هیچ کس تصویب نشده اید ."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "هم اکنون شما این کاربران را دنبال می‌کنید: "
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "هیچکس شما را تایید نکرده ."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "هیچکس شما را تایید نکرده ."
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "شما در هیچ گروهی عضو نیستید ."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "شما یک عضو این گروه نیستید."
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5316,19 +5329,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "شما ممکن است بخواهید نصاب را اجرا کنید تا این را تعمیر کند."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "برو به نصاب."
@@ -5503,50 +5516,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Ùرمت(Ùایل) عکس پشتیبانی نشده."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
"است . این Ùایل بسیار یزرگ است %s بیشترین مقدار قابل قبول برای اندازه ÛŒ Ùایل."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "خطای سیستم ارسال Ùایل."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "تصویر یا Ùایل خرابی نیست"
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Ùرمت(Ùایل) عکس پشتیبانی نشده."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Ùایلمان Ú¯Ù… شده"
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "نوع Ùایل پشتیبانی نشده"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "مگابایت"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "کیلوبایت"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5747,7 +5760,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "از"
@@ -5902,23 +5915,23 @@ msgstr ""
msgid "at"
msgstr "در"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "در زمینه"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "تکرار از"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "به این آگهی جواب دهید"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "جواب دادن"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "آگهی تکرار شد"
@@ -6061,7 +6074,7 @@ msgstr ""
msgid "Revoke the \"%s\" role from this user"
msgstr "دسترسی کاربر را به گروه مسدود کن"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6187,90 +6200,94 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "ویرایش اواتور"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "ویرایش تنظیمات پروÙيل"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "ویرایش"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "پیام مستقیم به این کاربر بÙرستید"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "پیام"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "پروÙایل کاربر"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "چند ثانیه پیش"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "حدود یک دقیقه پیش"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "حدود %d دقیقه پیش"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "حدود یک ساعت پیش"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "حدود %d ساعت پیش"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "حدود یک روز پیش"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "حدود %d روز پیش"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "حدود یک ماه پیش"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "حدود %d ماه پیش"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "حدود یک سال پیش"
@@ -6284,7 +6301,7 @@ msgstr "%s یک رنگ صحیح نیست!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s یک رنگ صحیح نیست! از Û³ یا Û¶ حر٠مبنای شانزده استÙاده کنید"
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index 68a63537b..7892ef932 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:46+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:35+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
@@ -102,7 +102,7 @@ msgstr "Sivua ei ole."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -111,10 +111,8 @@ msgstr "Sivua ei ole."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Käyttäjää ei ole."
@@ -211,14 +209,14 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metodia ei löytynyt!"
@@ -232,8 +230,8 @@ msgstr "API-metodia ei löytynyt!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Tämä metodi edellyttää POST sanoman."
@@ -264,7 +262,7 @@ msgid "Could not save profile."
msgstr "Ei voitu tallentaa profiilia."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -353,7 +351,7 @@ msgstr "Käyttäjätunnukselle ei löytynyt statusviestiä."
msgid "This status is already a favorite."
msgstr "Tämä päivitys on jo suosikki!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Ei voitu lisätä suosikiksi."
@@ -476,7 +474,7 @@ msgstr "Ryhmää ei löytynyt!"
msgid "You are already a member of that group."
msgstr "Sinä kuulut jo tähän ryhmään."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Sinut on estetty osallistumasta tähän ryhmään ylläpitäjän toimesta."
@@ -527,7 +525,7 @@ msgstr "Koko ei kelpaa."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -596,9 +594,9 @@ msgstr "Käyttäjätili"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Tunnus"
@@ -671,12 +669,12 @@ msgstr "Maksimikoko päivitykselle on %d merkkiä, mukaan lukien URL-osoite."
msgid "Unsupported format."
msgstr "Formaattia ei ole tuettu."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Käyttäjän %s suosikit"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen."
@@ -686,7 +684,7 @@ msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Vastaukset päivitykseen %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -697,7 +695,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "%s julkinen aikajana"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s päivitykset kaikilta!"
@@ -712,12 +710,12 @@ msgstr "Vastaukset käyttäjälle %s"
msgid "Repeats of %s"
msgstr "Vastaukset käyttäjälle %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Päivitykset joilla on tagi %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
@@ -745,7 +743,7 @@ msgstr "Kokoa ei ole."
msgid "Invalid size."
msgstr "Koko ei kelpaa."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Kuva"
@@ -777,7 +775,7 @@ msgid "Preview"
msgstr "Esikatselu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Poista"
@@ -858,8 +856,8 @@ msgstr "Käyttäjän estotiedon tallennus epäonnistui."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Tuota ryhmää ei ole."
@@ -966,7 +964,7 @@ msgstr "Sinä et kuulu tähän ryhmään."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Istuntoavaimesi kanssa oli ongelma."
@@ -1027,7 +1025,7 @@ msgstr "Oletko varma että haluat poistaa tämän päivityksen?"
msgid "Do not delete this notice"
msgstr "Älä poista tätä päivitystä"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Poista tämä päivitys"
@@ -1298,7 +1296,7 @@ msgstr "kuvaus on liian pitkä (max %d merkkiä)."
msgid "Could not update group."
msgstr "Ei voitu päivittää ryhmää."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Ei voitu lisätä aliasta."
@@ -2002,7 +2000,7 @@ msgstr "Kutsu uusia käyttäjiä"
msgid "You are already subscribed to these users:"
msgstr "Olet jos tilannut seuraavien käyttäjien päivitykset:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2135,7 +2133,7 @@ msgstr "%s liittyi ryhmään %s"
msgid "You must be logged in to leave a group."
msgstr "Sinun pitää olla kirjautunut sisään, jotta voit erota ryhmästä."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Sinä et kuulu tähän ryhmään."
@@ -2256,12 +2254,12 @@ msgstr "Käytä tätä lomaketta luodaksesi ryhmän."
msgid "New message"
msgstr "Uusi viesti"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Et voi lähettää viestiä tälle käyttäjälle."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ei sisältöä!"
@@ -2269,7 +2267,7 @@ msgstr "Ei sisältöä!"
msgid "No recipient specified."
msgstr "Vastaanottajaa ei ole määritelty."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Älä lähetä viestiä itsellesi, vaan kuiskaa se vain hiljaa itsellesi."
@@ -2283,7 +2281,7 @@ msgstr "Viesti lähetetty"
msgid "Direct message to %s sent."
msgstr "Suora viesti käyttäjälle %s lähetetty"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax-virhe"
@@ -2404,7 +2402,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Päivitykselle ei ole profiilia"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Käyttäjän %1$s päivitys %2$s"
@@ -2418,8 +2416,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@@ -2557,7 +2555,7 @@ msgstr "Väärä vanha salasana"
msgid "Error saving user; invalid."
msgstr "Virhe tapahtui käyttäjän tallentamisessa; epäkelpo."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Uutta salasanaa ei voida tallentaa."
@@ -2786,8 +2784,8 @@ msgstr ""
"välilyöntejä"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Koko nimi"
@@ -2814,9 +2812,9 @@ msgid "Bio"
msgstr "Tietoja"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Kotipaikka"
@@ -2830,7 +2828,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Tagit"
@@ -3064,7 +3062,7 @@ msgstr "Vaihda salasana"
msgid "Recover password"
msgstr "Salasanan palautus"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Salasanan palautuspyyntö lähetetty."
@@ -3084,19 +3082,19 @@ msgstr "Vaihda"
msgid "Enter a nickname or email address."
msgstr "Syötä käyttäjätunnus tai sähköpostiosoite"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Käyttäjää tuolla sähköpostilla tai käyttäjätunnuksella ei ole."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Rekisteröityä sähköpostiosoitetta ei ole tälle käyttäjälle."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Virhe tapahtui osoitevahvistuksen tallentamisessa"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3104,23 +3102,23 @@ msgstr ""
"Ohjeet salasanan palauttamiseksi on lähetetty sähköpostiisiosoitteeseen, "
"joka on rekisteröity käyttäjätunnuksellesi."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Odottamaton salasanan uudelleenasetus."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Salasanassa pitää olla 6 tai useampia merkkejä."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Salasana ja salasanan vahvistus eivät täsmää."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Virhe tapahtui käyttäjän asettamisessa."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
"Uusi salasana tallennettiin onnistuneesti. Olet nyt kirjautunut sisään."
@@ -3288,7 +3286,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Profiilisi URL-osoite toisessa yhteensopivassa mikroblogauspalvelussa"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Tilaa"
@@ -3332,7 +3330,7 @@ msgstr "Et voi rekisteröityä, jos et hyväksy lisenssiehtoja."
msgid "You already repeated that notice."
msgstr "Sinä olet jo estänyt tämän käyttäjän."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Luotu"
@@ -3486,7 +3484,7 @@ msgstr "Sivutus"
msgid "Description"
msgstr "Kuvaus"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tilastot"
@@ -3598,67 +3596,67 @@ msgstr "Ryhmä %s"
msgid "%1$s group, page %2$d"
msgstr "Ryhmän %s jäsenet, sivu %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Ryhmän profiili"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Huomaa"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliakset"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Ryhmän toiminnot"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syöte ryhmän %s päivityksille (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Käyttäjän %s lähetetyt viestit"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Jäsenet"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Tyhjä)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Kaikki jäsenet"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Luotu"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3668,7 +3666,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3679,7 +3677,7 @@ msgstr ""
"**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Ylläpitäjät"
@@ -4230,12 +4228,12 @@ msgstr "Ei id parametria."
msgid "Tag %s"
msgstr "Tagi %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Käyttäjän profiili"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Kuva"
@@ -4578,19 +4576,19 @@ msgstr "Omat"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4633,28 +4631,28 @@ msgstr "Viestin tallennus ei onnistunut."
msgid "Could not update message with new URI."
msgstr "Viestin päivittäminen uudella URI-osoitteella ei onnistunut."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4662,20 +4660,20 @@ msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Päivityksesi tähän palveluun on estetty."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4708,29 +4706,29 @@ msgstr "Ei voitu poistaa tilausta."
msgid "Couldn't delete subscription OMB token."
msgstr "Ei voitu poistaa tilausta."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Ei voitu poistaa tilausta."
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Ryhmän luonti ei onnistunut."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Tilausta ei onnistuttu tallentamaan."
@@ -4954,7 +4952,7 @@ msgstr "Tönäise"
msgid "StatusNet software license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4963,12 +4961,12 @@ msgstr ""
"**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** on mikroblogipalvelu. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4979,42 +4977,42 @@ msgstr ""
"versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Kaikki "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "lisenssi."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Sivutus"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Myöhemmin"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Aiemmin"
@@ -5030,6 +5028,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5131,7 +5133,7 @@ msgstr "SMS vahvistus"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5210,11 +5212,11 @@ msgstr "Poista"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "Profiili"
@@ -5237,37 +5239,51 @@ msgstr "Salasanan vaihto"
msgid "Password changing is not allowed"
msgstr "Salasanan vaihto"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Komennon tulos"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Komento suoritettu"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Komento epäonnistui"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Valitettavasti tätä komentoa ei ole vielä toteutettu."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Ei profiilia tuolla id:llä."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Käyttäjällä ei ole viimeistä päivitystä"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Ei voitu päivittää käyttäjälle vahvistettua sähköpostiosoitetta."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Valitettavasti tätä komentoa ei ole vielä toteutettu."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Tönäisy lähetetty"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5275,203 +5291,201 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Ei profiilia tuolla id:llä."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Käyttäjällä ei ole viimeistä päivitystä"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Päivitys on merkitty suosikiksi."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Sinä kuulut jo tähän ryhmään."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Käyttäjä %s ei voinut liittyä ryhmään %s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s liittyi ryhmään %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Ei voitu poistaa käyttäjää %s ryhmästä %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s erosi ryhmästä %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Koko nimi: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Kotipaikka: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Kotisivu: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Tietoa: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Suora viesti käyttäjälle %s lähetetty"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Tapahtui virhe suoran viestin lähetyksessä."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Ilmoituksia ei voi pistää päälle."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Poista tämä päivitys"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Päivitys lähetetty"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Vastaa tähän päivitykseen"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Anna käyttäjätunnus, jonka päivitykset haluat tilata"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Käyttäjää ei ole."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Käyttäjän %s päivitykset tilattu"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Anna käyttäjätunnus, jonka päivityksien tilauksen haluat lopettaa"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Komentoa ei ole vielä toteutettu."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Ilmoitukset pois päältä."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Ilmoituksia ei voi pistää pois päältä."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Ilmoitukset päällä."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Ilmoituksia ei voi pistää päälle."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Käyttäjän %s päivitysten tilaus lopetettu"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Toista ei voitu asettaa tilaamaan sinua."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Sinä et kuulu tähän ryhmään."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5513,20 +5527,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Varmistuskoodia ei ole annettu."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "Kirjaudu sisään palveluun"
@@ -5709,49 +5723,49 @@ msgstr "Tagit ryhmän %s päivityksissä"
msgid "This page is not available in a media type you accept"
msgstr "Tämä sivu ei ole saatavilla sinulle sopivassa mediatyypissä."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Kuvatiedoston formaattia ei ole tuettu."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Voit ladata ryhmälle logon."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Osittain ladattu palvelimelle."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Tiedoston lähetyksessä tapahtui järjestelmävirhe."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Tuo ei ole kelvollinen kuva tai tiedosto on rikkoutunut."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Kuvatiedoston formaattia ei ole tuettu."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Tiedosto hävisi."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tunnistamaton tiedoston tyyppi"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5966,7 +5980,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " lähteestä "
@@ -6122,25 +6136,25 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "Ei sisältöä!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Luotu"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Vastaa tähän päivitykseen"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Vastaus"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Päivitys on poistettu."
@@ -6289,7 +6303,7 @@ msgstr "Vastaa tähän päivitykseen"
msgid "Revoke the \"%s\" role from this user"
msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6423,93 +6437,97 @@ msgstr "Peruuta tämän käyttäjän tilaus"
msgid "Unsubscribe"
msgstr "Peruuta tilaus"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Kuva"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Käyttäjän toiminnot"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Profiiliasetukset"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Lähetä suora viesti tälle käyttäjälle"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Viesti"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Käyttäjän profiili"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Ylläpitäjät"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "muutama sekunti sitten"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "noin vuosi sitten"
@@ -6523,7 +6541,7 @@ msgstr "Kotisivun verkko-osoite ei ole toimiva."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Viesti oli liian pitkä - maksimikoko on 140 merkkiä, lähetit %d"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 4c9429e21..70155e450 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -14,12 +14,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:51+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:41+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
@@ -98,7 +98,7 @@ msgstr "Page non trouvée"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -107,10 +107,8 @@ msgstr "Page non trouvée"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Utilisateur non trouvé."
@@ -210,14 +208,14 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Méthode API non trouvée !"
@@ -230,8 +228,8 @@ msgstr "Méthode API non trouvée !"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Ce processus requiert un POST."
@@ -262,7 +260,7 @@ msgid "Could not save profile."
msgstr "Impossible d’enregistrer le profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -350,7 +348,7 @@ msgstr "Aucun statut trouvé avec cet identifiant. "
msgid "This status is already a favorite."
msgstr "Cet avis est déjà un favori."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Impossible de créer le favori."
@@ -469,7 +467,7 @@ msgstr "Groupe non trouvé !"
msgid "You are already a member of that group."
msgstr "Vous êtes déjà membre de ce groupe."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Vous avez été bloqué de ce groupe par l’administrateur."
@@ -519,7 +517,7 @@ msgstr "Jeton incorrect."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -595,9 +593,9 @@ msgstr "Compte"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Pseudo"
@@ -668,12 +666,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Format non supporté."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoris de %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s statuts favoris de %2$s / %2$s."
@@ -683,7 +681,7 @@ msgstr "%1$s statuts favoris de %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Mises à jour mentionnant %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s statuts en réponses aux statuts de %2$s / %3$s."
@@ -693,7 +691,7 @@ msgstr "%1$s statuts en réponses aux statuts de %2$s / %3$s."
msgid "%s public timeline"
msgstr "Activité publique %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s statuts de tout le monde !"
@@ -708,12 +706,12 @@ msgstr "Repris pour %s"
msgid "Repeats of %s"
msgstr "Reprises de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Avis marqués avec %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mises à jour marquées avec %1$s dans %2$s !"
@@ -741,7 +739,7 @@ msgstr "Aucune taille"
msgid "Invalid size."
msgstr "Taille incorrecte."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -775,7 +773,7 @@ msgid "Preview"
msgstr "Aperçu"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Supprimer"
@@ -858,8 +856,8 @@ msgstr "Impossible d’enregistrer les informations de blocage."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Aucun groupe trouvé."
@@ -960,7 +958,7 @@ msgstr "Vous n’êtes pas le propriétaire de cette application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Un problème est survenu avec votre jeton de session."
@@ -1021,7 +1019,7 @@ msgstr "Voulez-vous vraiment supprimer cet avis ?"
msgid "Do not delete this notice"
msgstr "Ne pas supprimer cet avis"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Supprimer cet avis"
@@ -1274,7 +1272,7 @@ msgstr "la description est trop longue (%d caractères maximum)."
msgid "Could not update group."
msgstr "Impossible de mettre à jour le groupe."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Impossible de créer les alias."
@@ -1604,7 +1602,7 @@ msgstr "Vous ne pouvez pas attribuer des rôles aux utilisateurs sur ce site."
#: actions/grantrole.php:82
msgid "User already has this role."
-msgstr "L'utilisateur a déjà ce rôle."
+msgstr "L’utilisateur a déjà ce rôle."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1985,7 +1983,7 @@ msgstr "Inviter de nouveaux utilisateurs"
msgid "You are already subscribed to these users:"
msgstr "Vous êtes déjà abonné à ces utilisateurs :"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2118,7 +2116,7 @@ msgstr "%1$s a rejoint le groupe %2$s"
msgid "You must be logged in to leave a group."
msgstr "Vous devez ouvrir une session pour quitter un groupe."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Vous n’êtes pas membre de ce groupe."
@@ -2239,12 +2237,12 @@ msgstr "Remplissez les champs ci-dessous pour créer un nouveau groupe :"
msgid "New message"
msgstr "Nouveau message"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Vous ne pouvez pas envoyer de messages à cet utilisateur."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Aucun contenu !"
@@ -2252,7 +2250,7 @@ msgstr "Aucun contenu !"
msgid "No recipient specified."
msgstr "Aucun destinataire n’a été spécifié."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2267,7 +2265,7 @@ msgstr "Message envoyé"
msgid "Direct message to %s sent."
msgstr "Message direct envoyé à %s."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Erreur Ajax"
@@ -2390,7 +2388,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "L’avis n’a pas de profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Statut de %1$s sur %2$s"
@@ -2403,8 +2401,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@@ -2536,7 +2534,7 @@ msgstr "Ancien mot de passe incorrect"
msgid "Error saving user; invalid."
msgstr "Erreur lors de l’enregistrement de l’utilisateur ; invalide."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Impossible de sauvegarder le nouveau mot de passe."
@@ -2752,8 +2750,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 à 64 lettres minuscules ou chiffres, sans ponctuation ni espaces"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nom complet"
@@ -2780,9 +2778,9 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Emplacement"
@@ -2796,7 +2794,7 @@ msgstr "Partager ma localisation lorsque je poste des avis"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Marques"
@@ -3043,7 +3041,7 @@ msgstr "Réinitialiser le mot de passe"
msgid "Recover password"
msgstr "Récupérer le mot de passe"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Récupération de mot de passe demandée"
@@ -3063,19 +3061,19 @@ msgstr "Réinitialiser"
msgid "Enter a nickname or email address."
msgstr "Entrez un pseudo ou une adresse courriel."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Aucun utilisateur trouvé avec ce courriel ou ce nom."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Aucune adresse courriel enregistrée pour cet utilisateur."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Erreur lors de l’enregistrement de la confirmation du courriel."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3083,23 +3081,23 @@ msgstr ""
"Les instructions pour récupérer votre mot de passe ont été envoyées à "
"l’adresse courriel indiquée dans votre compte."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Réinitialisation inattendue du mot de passe."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Le mot de passe doit contenir au moins 6 caractères."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Le mot de passe et sa confirmation ne correspondent pas."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Erreur lors de la configuration de l’utilisateur."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
"Nouveau mot de passe créé avec succès. Votre session est maintenant ouverte."
@@ -3267,7 +3265,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de votre profil sur un autre service de micro-blogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "S’abonner"
@@ -3304,7 +3302,7 @@ msgstr "Vous ne pouvez pas reprendre votre propre avis."
msgid "You already repeated that notice."
msgstr "Vous avez déjà repris cet avis."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repris"
@@ -3450,7 +3448,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiques"
@@ -3571,67 +3569,67 @@ msgstr "Groupe %s"
msgid "%1$s group, page %2$d"
msgstr "Groupe %1$s, page %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Profil du groupe"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Note"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Actions du groupe"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fil des avis du groupe %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fil des avis du groupe %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fil des avis du groupe %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "ami d’un ami pour le groupe %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(aucun)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Tous les membres"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Créé"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3647,7 +3645,7 @@ msgstr ""
"action.register%%%%) pour devenir membre de ce groupe et bien plus ! ([En "
"lire plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3660,7 +3658,7 @@ msgstr ""
"logiciel libre [StatusNet](http://status.net/). Ses membres partagent des "
"messages courts à propos de leur vie et leurs intérêts. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administrateurs"
@@ -4220,12 +4218,12 @@ msgstr "Aucun argument d’identifiant."
msgid "Tag %s"
msgstr "Marque %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Profil de l’utilisateur"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Photo"
@@ -4572,7 +4570,7 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Auteur(s)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4581,12 +4579,12 @@ msgstr ""
"Un fichier ne peut pas être plus gros que %d octets et le fichier que vous "
"avez envoyé pesait %d octets. Essayez d’importer une version moins grosse."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Un fichier aussi gros dépasserai votre quota utilisateur de %d octets."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Un fichier aussi gros dépasserai votre quota mensuel de %d octets."
@@ -4624,27 +4622,27 @@ msgstr "Impossible d’insérer le message."
msgid "Could not update message with new URI."
msgstr "Impossible de mettre à jour le message avec un nouvel URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problème lors de l’enregistrement de l’avis ; trop long."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques "
"minutes."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4652,19 +4650,19 @@ msgstr ""
"Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau "
"dans quelques minutes."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Il vous est interdit de poster des avis sur ce site."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problème lors de l’enregistrement de l’avis."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4693,28 +4691,28 @@ msgstr "Impossible de supprimer l’abonnement à soi-même."
msgid "Couldn't delete subscription OMB token."
msgstr "Impossible de supprimer le jeton OMB de l'abonnement ."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Impossible de cesser l’abonnement"
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenue à %1$s, @%2$s !"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Impossible de créer le groupe."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Impossible de définir l'URI du groupe."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Impossible d’établir l’inscription au groupe."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Impossible d’enregistrer les informations du groupe local."
@@ -4918,7 +4916,7 @@ msgstr "Insigne"
msgid "StatusNet software license"
msgstr "Licence du logiciel StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4927,12 +4925,12 @@ msgstr ""
"**%%site.name%%** est un service de microblogging qui vous est proposé par "
"[%%site.broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** est un service de micro-blogging."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4943,45 +4941,45 @@ msgstr ""
"version %s, disponible sous la licence [GNU Affero General Public License] "
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licence du contenu du site"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Le contenu et les données de %1$s sont privés et confidentiels."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur de %1$s. Tous droits "
"réservés."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur du contributeur. Tous "
"droits réservés."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Tous "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licence."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Après"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Avant"
@@ -4997,6 +4995,10 @@ msgstr "Impossible de gérer le contenu XML embarqué pour le moment."
msgid "Can't handle embedded Base64 content yet."
msgstr "Impossible de gérer le contenu en Base64 embarqué pour le moment."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5085,7 +5087,7 @@ msgstr ""
"La ressource de l’API a besoin de l’accès en lecture et en écriture, mais "
"vous n’y avez accès qu’en lecture."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5163,11 +5165,11 @@ msgstr "Révoquer"
msgid "Attachments"
msgstr "Pièces jointes"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Auteur"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Fournisseur"
@@ -5187,37 +5189,50 @@ msgstr "La modification du mot de passe a échoué"
msgid "Password changing is not allowed"
msgstr "La modification du mot de passe n’est pas autorisée"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Résultats de la commande"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Commande complétée"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Échec de la commande"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Désolé, cette commande n’a pas encore été implémentée."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Aucun avis avec cet identifiant n’existe"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Aucun avis récent pour cet utilisateur"
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Impossible de trouver un utilisateur avec le pseudo %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Impossible de trouver un utilisateur local portant le pseudo %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Désolé, cette commande n’a pas encore été implémentée."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Ça n’a pas de sens de se faire un clin d’œil à soi-même !"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Clin d’œil envoyé à %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5228,201 +5243,201 @@ msgstr ""
"Abonnés : %2$s\n"
"Messages : %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Aucun avis avec cet identifiant n’existe"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Aucun avis récent pour cet utilisateur"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Avis ajouté aux favoris."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Vous êtes déjà membre de ce groupe"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Impossible d’inscrire l’utilisateur %s au groupe %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s a rejoint le groupe %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Impossible de retirer l’utilisateur %s du groupe %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s a quitté le groupe %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nom complet : %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Emplacement : %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Site Web : %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "À propos : %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s est un profil distant ; vous ne pouvez envoyer de messages directs qu'aux "
+"utilisateurs du même serveur."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"Message trop long ! La taille maximale est de %d caractères ; vous en avez "
"entré %d."
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Message direct envoyé à %s."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Une erreur est survenue pendant l’envoi de votre message."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Impossible de reprendre votre propre avis"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Avis déjà repris"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Avis de %s repris"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Erreur lors de la reprise de l’avis."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"Avis trop long ! La taille maximale est de %d caractères ; vous en avez "
"entré %d."
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Réponse à %s envoyée"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Problème lors de l’enregistrement de l’avis."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Indiquez le nom de l’utilisateur auquel vous souhaitez vous abonner"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Utilisateur non trouvé."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Impossible de s'inscrire aux profils OMB par cette commande."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Abonné à %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Indiquez le nom de l’utilisateur duquel vous souhaitez vous désabonner"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Désabonné de %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Cette commande n’a pas encore été implémentée."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Avertissements désactivés."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Impossible de désactiver les avertissements."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Avertissements activés."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Impossible d’activer les avertissements."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "La commande d’ouverture de session est désactivée"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Ce lien n’est utilisable qu’une seule fois, et est valable uniquement "
"pendant 2 minutes : %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Désabonné de %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Vous n’êtes abonné(e) à personne."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Personne ne s’est abonné à vous."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Vous n’êtes membre d’aucun groupe."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5503,20 +5518,20 @@ msgstr ""
"tracks - pas encore implémenté.\n"
"tracking - pas encore implémenté.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Aucun fichier de configuration n’a été trouvé. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
"J’ai cherché des fichiers de configuration dans les emplacements suivants : "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Vous pouvez essayer de lancer l’installeur pour régler ce problème."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Aller au programme d’installation"
@@ -5697,49 +5712,49 @@ msgid "This page is not available in a media type you accept"
msgstr ""
"Cette page n’est pas disponible dans un des formats que vous avez autorisés."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Format de fichier d’image non supporté."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Ce fichier est trop grand. La taille maximale est %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Transfert partiel."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Erreur système lors du transfert du fichier."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Ceci n’est pas une image, ou c’est un fichier corrompu."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Format de fichier d’image non supporté."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Fichier perdu."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Type de fichier inconnu"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "Mo"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "Ko"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Source %d inconnue pour la boîte de réception."
@@ -6020,7 +6035,7 @@ msgstr ""
"pour démarrer des conversations avec d’autres utilisateurs. Ceux-ci peuvent "
"vous envoyer des messages destinés à vous seul(e)."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "de"
@@ -6176,23 +6191,23 @@ msgstr "O"
msgid "at"
msgstr "chez"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "dans le contexte"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repris par"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Répondre à cet avis"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Répondre"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Avis repris"
@@ -6334,7 +6349,7 @@ msgstr "Reprendre cet avis"
msgid "Revoke the \"%s\" role from this user"
msgstr "Révoquer le rôle « %s » de cet utilisateur"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur."
@@ -6460,89 +6475,93 @@ msgstr "Ne plus suivre cet utilisateur"
msgid "Unsubscribe"
msgstr "Désabonnement"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Modifier l’avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Actions de l’utilisateur"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Modifier les paramètres du profil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Modifier"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Envoyer un message à cet utilisateur"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Modérer"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Rôle de l'utilisateur"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Administrateur"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Modérateur"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "il y a environ 1 an"
@@ -6557,7 +6576,7 @@ msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
"%s n’est pas une couleur valide ! Utilisez 3 ou 6 caractères hexadécimaux."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index dea9dd11c..9d7775580 100644
--- a/locale/ga/LC_MESSAGES/statusnet.po
+++ b/locale/ga/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:54+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:44+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ga\n"
"X-Message-Group: out-statusnet\n"
@@ -102,7 +102,7 @@ msgstr "Non existe a etiqueta."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -111,10 +111,8 @@ msgstr "Non existe a etiqueta."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Ningún usuario."
@@ -206,14 +204,14 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Método da API non atopado"
@@ -227,8 +225,8 @@ msgstr "Método da API non atopado"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método require un POST."
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "Non se puido gardar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -349,7 +347,7 @@ msgstr "Non se atopou un estado con ese ID."
msgid "This status is already a favorite."
msgstr "Este chío xa é un favorito!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Non se puido crear o favorito."
@@ -474,7 +472,7 @@ msgstr "Método da API non atopado"
msgid "You are already a member of that group."
msgstr "Xa estas suscrito a estes usuarios:"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -525,7 +523,7 @@ msgstr "Tamaño inválido."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -593,9 +591,9 @@ msgstr "Sobre"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Alcume"
@@ -670,12 +668,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Formato de ficheiro de imaxe non soportado."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Favoritos dende %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s updates favorited by %s / %s."
@@ -685,7 +683,7 @@ msgstr "%s updates favorited by %s / %s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Chíos que respostan a %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "Hai %1$s chíos en resposta a chíos dende %2$s / %3$s."
@@ -695,7 +693,7 @@ msgstr "Hai %1$s chíos en resposta a chíos dende %2$s / %3$s."
msgid "%s public timeline"
msgstr "Liña de tempo pública de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s chíos de calquera!"
@@ -710,12 +708,12 @@ msgstr "Replies to %s"
msgid "Repeats of %s"
msgstr "Replies to %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Chíos tagueados con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizacións dende %1$s en %2$s!"
@@ -744,7 +742,7 @@ msgstr "Sen tamaño."
msgid "Invalid size."
msgstr "Tamaño inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -777,7 +775,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
#, fuzzy
msgid "Delete"
msgstr "eliminar"
@@ -865,8 +863,8 @@ msgstr "Erro ao gardar información de bloqueo."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "Non existe a etiqueta."
@@ -976,7 +974,7 @@ msgstr "Non estás suscrito a ese perfil"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
@@ -1040,7 +1038,7 @@ msgstr "Estas seguro que queres eliminar este chío?"
msgid "Do not delete this notice"
msgstr "Non se pode eliminar este chíos."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
#, fuzzy
msgid "Delete this notice"
msgstr "Eliminar chío"
@@ -1319,7 +1317,7 @@ msgstr "O teu Bio é demasiado longo (max 140 car.)."
msgid "Could not update group."
msgstr "Non se puido actualizar o usuario."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Non se puido crear o favorito."
@@ -2036,7 +2034,7 @@ msgstr "Invitar a novos usuarios"
msgid "You are already subscribed to these users:"
msgstr "Xa estas suscrito a estes usuarios:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2168,7 +2166,7 @@ msgstr "%s / Favoritos dende %s"
msgid "You must be logged in to leave a group."
msgstr "Debes estar logueado para invitar a outros usuarios a empregar %s"
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "Non estás suscrito a ese perfil"
@@ -2287,12 +2285,12 @@ msgstr ""
msgid "New message"
msgstr "Nova mensaxe"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Non podes enviar mensaxes a este usurio."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Sen contido!"
@@ -2300,7 +2298,7 @@ msgstr "Sen contido!"
msgid "No recipient specified."
msgstr "Non se especificou ningún destinatario"
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2317,7 +2315,7 @@ msgstr "Non hai mensaxes de texto!"
msgid "Direct message to %s sent."
msgstr "Mensaxe directo a %s enviado"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Erro de Ajax"
@@ -2435,7 +2433,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "O chío non ten perfil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Estado de %1$s en %2$s"
@@ -2449,8 +2447,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@@ -2590,7 +2588,7 @@ msgstr "Contrasinal actual incorrecta"
msgid "Error saving user; invalid."
msgstr "Acounteceu un erro gardando o usuario: é inválido."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Non se pode gardar a contrasinal."
@@ -2817,8 +2815,8 @@ msgstr ""
"De 1 a 64 letras minúsculas ou númeors, nin espazos nin signos de puntuación"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nome completo"
@@ -2846,9 +2844,9 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Localización"
@@ -2862,7 +2860,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Tags"
@@ -3103,7 +3101,7 @@ msgstr "Restaurar contrasinal"
msgid "Recover password"
msgstr "Recuperar contrasinal"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Petición de recuperación de contrasinal"
@@ -3123,19 +3121,19 @@ msgstr "Restaurar"
msgid "Enter a nickname or email address."
msgstr "Insire o teu alcume ou enderezo de correo."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Non hai ningún usuario con isa dirección de correo ou nome de usuario."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Non hai un enderezo de correo rexistrado para ese usuario."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Acounteceu un erro gardando a confirmación de enderezo."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3143,23 +3141,23 @@ msgstr ""
"As instruccións para recuperar a túa contrasinal foron enviadas ó enderezo "
"de correo da túa conta."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Restauración de contrasinal non esperada."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "A contrasinal debe ter 6 caracteres ou máis."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "A contrasinal e a súa confirmación non coinciden."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Acounteceu un erro configurando o usuario."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "A nova contrasinal gardouse correctamente. Xa estas logueado."
@@ -3329,7 +3327,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Enderezo do teu perfil en outro servizo de microblogaxe compatíbel"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscribir"
@@ -3372,7 +3370,7 @@ msgstr "Non podes rexistrarte se non estas de acordo coa licenza."
msgid "You already repeated that notice."
msgstr "Xa bloqueaches a este usuario."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Crear"
@@ -3522,7 +3520,7 @@ msgstr "Invitación(s) enviada(s)."
msgid "Description"
msgstr "Subscricións"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3634,73 +3632,73 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Tódalas subscricións"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "Non existe o perfil."
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
#, fuzzy
msgid "Note"
msgstr "Chíos"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
#, fuzzy
msgid "Group actions"
msgstr "Outras opcions"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Band. Saída para %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Membro dende"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
#, fuzzy
msgid "(None)"
msgstr "(nada)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "Crear"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3714,7 +3712,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3727,7 +3725,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4281,13 +4279,13 @@ msgstr "Non hai argumento id."
msgid "Tag %s"
msgstr "Tags"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "O usuario non ten perfil."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4633,19 +4631,19 @@ msgstr "Persoal"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4688,28 +4686,28 @@ msgstr "Non se pode inserir unha mensaxe."
msgid "Could not update message with new URI."
msgstr "Non se puido actualizar a mensaxe coa nova URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro ó inserir o hashtag na BD: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4718,20 +4716,20 @@ msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Tes restrinxido o envio de chíos neste sitio."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4764,31 +4762,31 @@ msgstr "Non se pode eliminar a subscrición."
msgid "Couldn't delete subscription OMB token."
msgstr "Non se pode eliminar a subscrición."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Non se pode eliminar a subscrición."
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Mensaxe de %1$s en %2$s"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "Non se puido crear o favorito."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Non se pode gardar a subscrición."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "Non se pode gardar a subscrición."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Non se pode gardar a subscrición."
@@ -5012,7 +5010,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -5021,12 +5019,12 @@ msgstr ""
"**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é un servizo de microbloguexo."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -5037,44 +5035,44 @@ msgstr ""
"%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "Atopar no contido dos chíos"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
#, fuzzy
msgid "All "
msgstr "Todos"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "« Despois"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "Antes »"
@@ -5091,6 +5089,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5192,7 +5194,7 @@ msgstr "Confirmación de SMS"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5271,11 +5273,11 @@ msgstr "Eliminar"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "Perfil"
@@ -5298,37 +5300,51 @@ msgstr "Contrasinal gardada."
msgid "Password changing is not allowed"
msgstr "Contrasinal gardada."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultados do comando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Comando completo"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Comando fallido"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Desculpa, este comando todavía non está implementado."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Non se atopou un perfil con ese ID."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "O usuario non ten último chio."
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Non se puido actualizar o usuario coa dirección de correo electrónico."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Desculpa, este comando todavía non está implementado."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Toque enviado"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5339,176 +5355,174 @@ msgstr ""
"Suscriptores: %2$s\n"
"Chíos: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Non se atopou un perfil con ese ID."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "O usuario non ten último chio."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Chío marcado coma favorito."
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Xa estas suscrito a estes usuarios:"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%s / Favoritos dende %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "Non podes seguir a este usuario: o Usuario non se atopa."
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "%s / Favoritos dende %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Ubicación: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Páxina persoal: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Sobre: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Mensaxe directo a %s enviado"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Erro ó enviar a mensaxe directa."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Non se pode activar a notificación."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Eliminar chío"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Chío publicado"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Non se pode eliminar este chíos."
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Especifica o nome do usuario ó que queres suscribirte"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Ningún usuario."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Suscrito a %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifica o nome de usuario ó que queres deixar de seguir"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Desuscribir de %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Comando non implementado."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificación desactivada."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "No se pode desactivar a notificación."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificación habilitada."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Non se pode activar a notificación."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Desuscribir de %s"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Xa estas suscrito a estes usuarios:"
@@ -5517,12 +5531,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Outro usuario non se puido suscribir a ti."
-#: lib/command.php:733
+#: lib/command.php:776
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."
@@ -5531,12 +5545,12 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Non estás suscrito a ese perfil"
-#: lib/command.php:755
+#: lib/command.php:798
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"
@@ -5545,7 +5559,7 @@ msgstr[2] ""
msgstr[3] ""
msgstr[4] ""
-#: lib/command.php:769
+#: lib/command.php:812
#, fuzzy
msgid ""
"Commands:\n"
@@ -5614,20 +5628,20 @@ msgstr ""
"tracks - non implementado por agora.\n"
"tracking - non implementado por agora.\n"
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Sen código de confirmación."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5812,51 +5826,51 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "Esta páxina non está dispoñíbel no tipo de medio que aceptas"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato de ficheiro de imaxe non soportado."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Podes actualizar a túa información do perfil persoal aquí"
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Carga parcial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Aconteceu un erro no sistema namentras se estaba cargando o ficheiro."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Non é unha imaxe ou está corrupta."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato de ficheiro de imaxe non soportado."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "Bloqueo de usuario fallido."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
#, fuzzy
msgid "Unknown file type"
msgstr "tipo de ficheiro non soportado"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -6117,7 +6131,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " dende "
@@ -6276,27 +6290,27 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "Sen contido!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Crear"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
#, fuzzy
msgid "Reply to this notice"
msgstr "Non se pode eliminar este chíos."
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
#, fuzzy
msgid "Reply"
msgstr "contestar"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Chío publicado"
@@ -6451,7 +6465,7 @@ msgstr "Non se pode eliminar este chíos."
msgid "Revoke the \"%s\" role from this user"
msgstr ""
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6590,95 +6604,99 @@ msgstr "Desuscribir de %s"
msgid "Unsubscribe"
msgstr "Eliminar subscrición"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
#, fuzzy
msgid "User actions"
msgstr "Outras opcions"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Configuración de perfil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
#, fuzzy
msgid "Send a direct message to this user"
msgstr "Non podes enviar mensaxes a este usurio."
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
#, fuzzy
msgid "Message"
msgstr "Nova mensaxe"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "O usuario non ten perfil."
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "fai uns segundos"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "fai un ano"
@@ -6692,7 +6710,7 @@ msgstr "%1s non é unha orixe fiable."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensaxe demasiado longa - o máximo é 140 caracteres, ti enviaches %d "
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index 49f229a96..27c7af90f 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: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:49:57+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:47+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
@@ -99,7 +99,7 @@ msgstr "×ין הודעה כזו."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -108,10 +108,8 @@ msgstr "×ין הודעה כזו."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "×ין משתמש ×›×–×”."
@@ -203,14 +201,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "קוד ×”×ישור ×œ× × ×ž×¦×."
@@ -224,8 +222,8 @@ msgstr "קוד ×”×ישור ×œ× × ×ž×¦×."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -256,7 +254,7 @@ msgid "Could not save profile."
msgstr "שמירת הפרופיל נכשלה."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -343,7 +341,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "זהו כבר זיהוי ה-Jabber שלך."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -466,7 +464,7 @@ msgstr "×œ× × ×ž×¦×"
msgid "You are already a member of that group."
msgstr "כבר נכנסת למערכת!"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -518,7 +516,7 @@ msgstr "גודל ×œ× ×—×•×§×™."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -586,9 +584,9 @@ msgstr "×ודות"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "כינוי"
@@ -661,12 +659,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "פורמט התמונה ×ינו נתמך."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "הסטטוס של %1$s ב-%2$s "
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "מיקרובלוג מ×ת %s"
@@ -676,7 +674,7 @@ msgstr "מיקרובלוג מ×ת %s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "הסטטוס של %1$s ב-%2$s "
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -686,7 +684,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -701,12 +699,12 @@ msgstr "תגובת עבור %s"
msgid "Repeats of %s"
msgstr "תגובת עבור %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "מיקרובלוג מ×ת %s"
@@ -736,7 +734,7 @@ msgstr "×ין גודל."
msgid "Invalid size."
msgstr "גודל ×œ× ×—×•×§×™."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "תמונה"
@@ -769,7 +767,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
#, fuzzy
msgid "Delete"
msgstr "מחק"
@@ -855,8 +853,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "×ין הודעה כזו."
@@ -965,7 +963,7 @@ msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1025,7 +1023,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "×ין הודעה כזו."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr ""
@@ -1297,7 +1295,7 @@ msgstr "הביוגרפיה ×רוכה מידי (לכל היותר 140 ×ותיו
msgid "Could not update group."
msgstr "עידכון המשתמש נכשל."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "שמירת מידע התמונה נכשל"
@@ -2006,7 +2004,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2108,7 +2106,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
@@ -2223,12 +2221,12 @@ msgstr ""
msgid "New message"
msgstr "הודעה חדשה"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "×ין תוכן!"
@@ -2236,7 +2234,7 @@ msgstr "×ין תוכן!"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2251,7 +2249,7 @@ msgstr "הודעה חדשה"
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2366,7 +2364,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "להודעה ×ין פרופיל"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "הסטטוס של %1$s ב-%2$s "
@@ -2380,8 +2378,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2521,7 +2519,7 @@ msgstr "הסיסמה הישנה ×œ× × ×›×•× ×”"
msgid "Error saving user; invalid."
msgstr "שגי××” בשמירת ×©× ×”×ž×©×ª×ž×©, ×œ× ×¢×•×ž×“ בכללי×."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "×œ× × ×™×ª×Ÿ לשמור ×ת הסיסמה"
@@ -2744,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 עד 64 ×ותיות ×נגליות קטנות ×ו מספרי×, ×œ×œ× ×¡×™×ž× ×™ פיסוק ×ו רווחי×."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "×©× ×ž×œ×"
@@ -2773,9 +2771,9 @@ msgid "Bio"
msgstr "ביוגרפיה"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "מיקו×"
@@ -2789,7 +2787,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -3019,7 +3017,7 @@ msgstr "×יפוס סיסמה"
msgid "Recover password"
msgstr "סיסמת שיחזור"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "התבקש שיחזור סיסמה"
@@ -3039,41 +3037,41 @@ msgstr "×יפוס"
msgid "Enter a nickname or email address."
msgstr ""
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "שגי××” בשמירת ×ישור הכתובת."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "×יפוס סיסמה ×œ× ×¦×¤×•×™."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "הסיסמה חייבת להיות בת לפחות 6 ×ותיות."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "הסיסמה ו×ישורה ×ינן תו×מות."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "שגי××” ביצירת ×©× ×”×ž×©×ª×ž×©."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "הסיסמה החדשה נשמרה בהצלחה. ×תה מחובר למערכת."
@@ -3217,7 +3215,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "כתובת הפרופיל שלך בשרות ביקרובלוג תו×× ×חר"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "×”×™×¨×©× ×›×ž× ×•×™"
@@ -3258,7 +3256,7 @@ msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון"
msgid "You already repeated that notice."
msgstr "כבר נכנסת למערכת!"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "צור"
@@ -3407,7 +3405,7 @@ msgstr "מיקו×"
msgid "Description"
msgstr "הרשמות"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "סטטיסטיקה"
@@ -3518,71 +3516,71 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "כל המנויי×"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "×ין הודעה כזו."
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
#, fuzzy
msgid "Note"
msgstr "הודעות"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "חבר מ××–"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "צור"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3592,7 +3590,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3601,7 +3599,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4139,13 +4137,13 @@ msgstr "×ין מסמך ×›×–×”."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "למשתמש ×ין פרופיל."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4482,19 +4480,19 @@ msgstr "×ישי"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4536,46 +4534,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4608,31 +4606,31 @@ msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
msgid "Couldn't delete subscription OMB token."
msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "מחיקת המנוי ×œ× ×”×¦×œ×™×—×”."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "שמירת מידע התמונה נכשל"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "יצירת המנוי נכשלה."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "יצירת המנוי נכשלה."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "יצירת המנוי נכשלה."
@@ -4854,7 +4852,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4863,12 +4861,12 @@ msgstr ""
"**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ×”×•× ×©×¨×•×ª ביקרובלוג."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4879,43 +4877,43 @@ msgstr ""
"s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)"
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "הודעה חדשה"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "<< ×חרי"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "לפני >>"
@@ -4932,6 +4930,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5027,7 +5029,7 @@ msgstr "הרשמות"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5106,11 +5108,11 @@ msgstr "הסר"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "פרופיל"
@@ -5133,37 +5135,52 @@ msgstr "הסיסמה נשמרה."
msgid "Password changing is not allowed"
msgstr "הסיסמה נשמרה."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "×ין פרופיל תו×× ×œ×¤×¨×•×¤×™×œ המרוחק "
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "למשתמש ×ין פרופיל."
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "עידכון המשתמש נכשל."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "עידכון המשתמש נכשל."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "תגובת עבור %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5171,206 +5188,202 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "×ין פרופיל תו×× ×œ×¤×¨×•×¤×™×œ המרוחק "
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "למשתמש ×ין פרופיל."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "כבר נכנסת למערכת!"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "נכשלה ההפניה לשרת: %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "הסטטוס של %1$s ב-%2$s "
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "נכשלה יצירת OpenID מתוך: %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "הסטטוס של %1$s ב-%2$s "
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "×©× ×ž×œ×"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "×ודות: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "×œ× × ×™×ª×Ÿ ×œ×”×™×¨×©× ×œ×œ× ×”×¡×›×ž×” לרשיון"
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "כבר נכנסת למערכת!"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "הודעות"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "בעיה בשמירת ההודעה."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "תגובת עבור %s"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "בעיה בשמירת ההודעה."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "×ין משתמש ×›×–×”."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "בטל מנוי"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "הרשמה מרוחקת"
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "הרשמה מרוחקת"
msgstr[1] "הרשמה מרוחקת"
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
msgstr[1] "×œ× ×©×œ×—× ×• ×לינו ×ת הפרופיל ×”×–×”"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5412,20 +5425,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "×ין קוד ×ישור."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5608,50 +5621,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "עמוד ×–×” ×ינו זמין בסוג מדיה ש×תה יכול לקבל"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "פורמט התמונה ×ינו נתמך."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "×–×” ×רוך מידי. ×ורך מירבי להודעה ×”×•× 140 ×ותיות."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "העל××” חלקית."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "שגי×ת מערכת בהעל×ת הקובץ."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "זהו ×œ× ×§×•×‘×¥ תמונה, ×ו שחל בו שיבוש."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "פורמט התמונה ×ינו נתמך."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "×ין הודעה כזו."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5855,7 +5868,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr ""
@@ -6012,26 +6025,26 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "×ין תוכן!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "צור"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
#, fuzzy
msgid "Reply"
msgstr "הגב"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "הודעות"
@@ -6181,7 +6194,7 @@ msgstr "×ין הודעה כזו."
msgid "Revoke the \"%s\" role from this user"
msgstr "×ין משתמש ×›×–×”."
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6315,93 +6328,97 @@ msgstr ""
msgid "Unsubscribe"
msgstr "בטל מנוי"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "תמונה"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "הגדרות הפרופיל"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
#, fuzzy
msgid "Message"
msgstr "הודעה חדשה"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "למשתמש ×ין פרופיל."
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "לפני מספר שניות"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "לפני כיו×"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "לפני ×›-%d ימי×"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "לפני ×›-%d חודשי×"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "לפני כשנה"
@@ -6415,7 +6432,7 @@ msgstr "ל×תר הבית יש כתובת ×œ× ×—×•×§×™×ª."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index 91d9c9c73..f61fb0a82 100644
--- a/locale/hsb/LC_MESSAGES/statusnet.po
+++ b/locale/hsb/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:00+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:50+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: hsb\n"
"X-Message-Group: out-statusnet\n"
@@ -29,15 +29,13 @@ msgstr "Přistup"
#. TRANS: Page notice
#: actions/accessadminpanel.php:67
-#, fuzzy
msgid "Site access settings"
-msgstr "Sydłowe nastajenja składować"
+msgstr "Nastajenja za sydłowy přistup"
#. TRANS: Form legend for registration form.
#: actions/accessadminpanel.php:161
-#, fuzzy
msgid "Registration"
-msgstr "Registrować"
+msgstr "Registrowanje"
#. TRANS: Checkbox instructions for admin setting "Private"
#: actions/accessadminpanel.php:165
@@ -46,7 +44,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Priwatny"
@@ -73,12 +70,10 @@ msgstr "ZaÄinjeny"
#. TRANS: Title / tooltip for button to save access settings in site admin panel
#: actions/accessadminpanel.php:202
-#, fuzzy
msgid "Save access settings"
-msgstr "Sydłowe nastajenja składować"
+msgstr "Přistupne nastajenja składować"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Składować"
@@ -99,7 +94,7 @@ msgstr "Strona njeeksistuje"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -108,10 +103,8 @@ msgstr "Strona njeeksistuje"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Wužiwar njeeksistuje"
@@ -202,14 +195,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metoda njenamakana."
@@ -222,8 +215,8 @@ msgstr "API-metoda njenamakana."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Tuta metoda wužaduje sej POST."
@@ -252,7 +245,7 @@ msgid "Could not save profile."
msgstr "Profil njeje so składować dał."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -336,7 +329,7 @@ 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
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -453,7 +446,7 @@ 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:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -491,9 +484,8 @@ msgid "No oauth_token parameter provided."
msgstr ""
#: actions/apioauthauthorize.php:106
-#, fuzzy
msgid "Invalid token."
-msgstr "Njepłaćiwa wulkosć."
+msgstr "Njepłaćiwy token."
#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
#: actions/deletenotice.php:157 actions/disfavor.php:74
@@ -504,7 +496,7 @@ msgstr "Njepłaćiwa wulkosć."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -518,12 +510,10 @@ msgid "Invalid nickname / password!"
msgstr "Njepłaćiwe přimjeno abo hesło!"
#: actions/apioauthauthorize.php:159
-#, fuzzy
msgid "Database error deleting OAuth application user."
-msgstr "Zmylk datoweje banki při zasunjenju wužiwarja OAuth-aplikacije."
+msgstr "Zmylk datoweje banki při zhašenju wužiwarja OAuth-aplikacije."
#: actions/apioauthauthorize.php:185
-#, fuzzy
msgid "Database error inserting OAuth application user."
msgstr "Zmylk datoweje banki při zasunjenju wužiwarja OAuth-aplikacije."
@@ -570,9 +560,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Přimjeno"
@@ -641,12 +631,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Njepodpěrany format."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -656,7 +646,7 @@ msgstr ""
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -666,7 +656,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -681,12 +671,12 @@ msgstr ""
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -714,7 +704,7 @@ msgstr "Žana wulkosć."
msgid "Invalid size."
msgstr "Njepłaćiwa wulkosć."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Awatar"
@@ -747,7 +737,7 @@ msgid "Preview"
msgstr "Přehlad"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "ZniÄić"
@@ -827,8 +817,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Skupina njeeksistuje."
@@ -915,14 +905,12 @@ msgid "Notices"
msgstr "Zdźělenki"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Dyrbiš přizjewjeny być, zo by skupinu wobdźěłał."
+msgstr "DyrbiÅ¡ pÅ™izjewjeny być, zo by aplikaciju zniÄiÅ‚."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Aplikaciski profil"
+msgstr "Aplikaciska njenamakana."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
@@ -931,14 +919,13 @@ msgstr "Njejsy wobsedźer tuteje aplikacije."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "Aplikacija njeeksistuje."
+msgstr "Aplikaciju zniÄić"
#: actions/deleteapplication.php:149
msgid ""
@@ -948,14 +935,12 @@ msgid ""
msgstr ""
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "Tutu zdźělenku njewušmórnyć"
+msgstr "Tutu aplikaciju njezniÄić"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Tutu zdźělenku wušmórnyć"
+msgstr "Tutu aplikaciju zniÄić"
#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -990,7 +975,7 @@ msgstr "Chceš woprawdźe tutu zdźělenku wušmórnyć?"
msgid "Do not delete this notice"
msgstr "Tutu zdźělenku njewušmórnyć"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Tutu zdźělenku wušmórnyć"
@@ -1144,14 +1129,13 @@ msgid "Add to favorites"
msgstr "K faworitam přidać"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "Dokument njeeksistuje."
+msgstr "Dokument \"%s\" njeeksistuje"
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
-msgstr "Aplikacije OAuth"
+msgstr "Aplikaciju wobdźěłać"
#: actions/editapplication.php:66
msgid "You must be logged in to edit an application."
@@ -1175,9 +1159,8 @@ msgid "Name is too long (max 255 chars)."
msgstr "Mjeno je předołho (maks. 255 znamješkow)."
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
-msgstr "Přimjeno so hižo wužiwa. Spytaj druhe."
+msgstr "Mjeno so hižo wužiwa. Spytaj druhe."
#: actions/editapplication.php:186 actions/newapplication.php:168
msgid "Description is required."
@@ -1242,7 +1225,7 @@ msgstr "wopisanje je předołho (maks. %d znamješkow)."
msgid "Could not update group."
msgstr "Skupina njeje so dała aktualizować."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Aliasy njejsu so dali wutworić."
@@ -1547,23 +1530,20 @@ msgid "Cannot read file."
msgstr "Dataja njeda so Äitać."
#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
msgid "Invalid role."
-msgstr "Njepłaćiwa wulkosć."
+msgstr "Njepłaćiwa róla."
#: actions/grantrole.php:66 actions/revokerole.php:66
msgid "This role is reserved and cannot be set."
msgstr ""
#: actions/grantrole.php:75
-#, fuzzy
msgid "You cannot grant user roles on this site."
-msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+msgstr "Njemóžeš wužiwarske róle na tutym sydle garantować."
#: actions/grantrole.php:82
-#, fuzzy
msgid "User already has this role."
-msgstr "Wužiwar nima profil."
+msgstr "Wužiwar hižo ma tutu rólu."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1908,7 +1888,7 @@ msgstr "Nowych wužiwarjow přeprosyć"
msgid "You are already subscribed to these users:"
msgstr "Sy tutych wužiwarjow hižo abonował:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -1953,7 +1933,6 @@ msgstr "Wosobinsku powěsć po dobrozdaću přeprošenju přidać."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Pósłać"
@@ -1999,9 +1978,8 @@ msgid "You must be logged in to join a group."
msgstr ""
#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
msgid "No nickname or ID."
-msgstr "Žane přimjeno."
+msgstr "Žane přimjeno abo žadyn ID."
#: actions/joingroup.php:141
#, php-format
@@ -2012,7 +1990,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr "Dyrbiš přizjewjeny być, zo by skupinu wopušćił."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Njejsy ÄÅ‚on teje skupiny."
@@ -2090,9 +2068,8 @@ msgid "No current status"
msgstr "Žadyn aktualny status"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "Aplikacija njeeksistuje."
+msgstr "Nowa aplikacija"
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2122,12 +2099,12 @@ msgstr "Wužij tutón formular, zo by nowu skupinu wutworił."
msgid "New message"
msgstr "Nowa powěsć"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Žadyn wobsah!"
@@ -2135,7 +2112,7 @@ msgstr "Žadyn wobsah!"
msgid "No recipient specified."
msgstr "Žadyn přijimowar podaty."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2149,7 +2126,7 @@ msgstr "Powěsć pósłana"
msgid "Direct message to %s sent."
msgstr "Direktna powěsć do %s pósłana."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Zmylk Ajax"
@@ -2260,7 +2237,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Zdźělenka nima profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr ""
@@ -2273,8 +2250,8 @@ msgstr ""
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Njeje podpěrany datowy format."
@@ -2405,7 +2382,7 @@ msgstr "WopaÄne stare hesÅ‚o"
msgid "Error saving user; invalid."
msgstr ""
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr ""
@@ -2614,8 +2591,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Dospołne mjeno"
@@ -2642,9 +2619,9 @@ msgid "Bio"
msgstr "Biografija"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Městno"
@@ -2658,7 +2635,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -2882,7 +2859,7 @@ msgstr "Hesło wróćo stajić"
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2902,42 +2879,42 @@ msgstr "Wróćo stajić"
msgid "Enter a nickname or email address."
msgstr "Zapodaj přimjeno abo e-mejlowu adresu."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
"Wužiwar z tej e-mejlowej adresu abo tym wužiwarskim mjenom njeeksistuje."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Wužiwar nima žanu zregistrowanu e-mejlowu adresu."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr ""
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Hesło dyrbi 6 znamješkow abo wjace měć."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3076,7 +3053,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Abonować"
@@ -3112,7 +3089,7 @@ msgstr "Njemóžeš swójsku zdźělenku wospjetować."
msgid "You already repeated that notice."
msgstr "Sy tutu zdźělenku hižo wospjetował."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Wospjetowany"
@@ -3173,14 +3150,12 @@ msgid "Replies to %1$s on %2$s!"
msgstr ""
#: actions/revokerole.php:75
-#, fuzzy
msgid "You cannot revoke user roles on this site."
-msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+msgstr "Njemóžeš wužiwarske róle na tutym sydle wotwołać."
#: actions/revokerole.php:82
-#, fuzzy
msgid "User doesn't have this role."
-msgstr "Wužiwar bjez hodźaceho so profila."
+msgstr "Wužiwar nima tutu rólu."
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
@@ -3201,9 +3176,8 @@ msgid "Sessions"
msgstr "Posedźenja"
#: actions/sessionsadminpanel.php:65
-#, fuzzy
msgid "Session settings for this StatusNet site."
-msgstr "Designowe nastajenja za tute sydło StatusNet."
+msgstr "Nastajenja posedźenja za tute sydło StatusNet."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
@@ -3252,7 +3226,7 @@ msgstr "Organizacija"
msgid "Description"
msgstr "Wopisanje"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistika"
@@ -3301,14 +3275,13 @@ msgid ""
msgstr ""
#: actions/showapplication.php:309
-#, fuzzy
msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Chceš woprawdźe tutu zdźělenku wušmórnyć?"
+msgstr "ChceÅ¡ woprawdźe swój pÅ™etrjebowarski kluÄ a potajny kod wróćo stajić?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "%1$s a přećeljo, strona %2$d"
+msgstr "Preferowane zdźělenki wot %1$s, strona %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
@@ -3360,71 +3333,71 @@ msgid "%s group"
msgstr ""
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
+msgstr "%1$s skupina, strona %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Skupinski profil"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasy"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Skupinske akcije"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Čłonojo"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Žadyn)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "WÅ¡itcy ÄÅ‚onojo"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Wutworjeny"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3434,7 +3407,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3443,7 +3416,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administratorojo"
@@ -3475,9 +3448,9 @@ msgid " tagged %s"
msgstr ""
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%1$s a přećeljo, strona %2$d"
+msgstr "%1$s, strona %2$d"
#: actions/showstream.php:122
#, php-format
@@ -3553,9 +3526,8 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-#, fuzzy
msgid "Basic settings for this StatusNet site"
-msgstr "Designowe nastajenja za tute sydło StatusNet."
+msgstr "Zakładne nastajenja za tute sydło StatusNet."
#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
@@ -3623,9 +3595,8 @@ msgid "Default timezone for the site; usually UTC."
msgstr ""
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Standardna sydÅ‚owa rÄ›Ä"
+msgstr "Standardna rÄ›Ä"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
@@ -3652,37 +3623,32 @@ msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
msgid "Site Notice"
-msgstr "Zdźělenki"
+msgstr "Sydłowa zdźělenka"
#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
msgid "Edit site-wide message"
-msgstr "Nowa powěsć"
+msgstr "Sydłodaloku powěsć wobdźěłać"
#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
msgid "Unable to save site notice."
-msgstr "Wužiwar nima poslednju powěsć"
+msgstr "Njeje móžno, sydłowu zdźělenku składować."
#: actions/sitenoticeadminpanel.php:113
msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
msgid "Site notice text"
-msgstr "Njepłaćiwy wobsah zdźělenki"
+msgstr "Tekst sydłoweje zdźělenki"
#: actions/sitenoticeadminpanel.php:178
msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
msgid "Save site notice"
-msgstr "Sydłowe nastajenja składować"
+msgstr "Sydłowu zdźělenku składować"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3783,9 +3749,8 @@ msgid "Snapshots"
msgstr ""
#: actions/snapshotadminpanel.php:65
-#, fuzzy
msgid "Manage snapshot configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Konfiguraciju wobrazowkoweho fota zrjadować"
#: actions/snapshotadminpanel.php:127
msgid "Invalid snapshot run value."
@@ -3832,9 +3797,8 @@ msgid "Snapshots will be sent to this URL"
msgstr ""
#: actions/snapshotadminpanel.php:248
-#, fuzzy
msgid "Save snapshot settings"
-msgstr "Sydłowe nastajenja składować"
+msgstr "Nastajenja wobrazowkoweho fota składować"
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
@@ -3850,14 +3814,12 @@ msgid "This action only accepts POST requests."
msgstr ""
#: actions/subscribe.php:107
-#, fuzzy
msgid "No such profile."
-msgstr "Dataja njeeksistuje."
+msgstr "Profil njeeksistuje."
#: actions/subscribe.php:117
-#, fuzzy
msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Njejsy tón profil abonował."
+msgstr "Njemóžeš zdaleny profil OMB 0.1 z tutej akciju abonować."
#: actions/subscribe.php:145
msgid "Subscribed"
@@ -3971,12 +3933,12 @@ msgstr "Žadyn argument ID."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Wužiwarski profil"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4039,7 +4001,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Wužiwar"
@@ -4214,9 +4175,9 @@ msgid "Enjoy your hotdog!"
msgstr ""
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "%1$s skupinskich ÄÅ‚onow, strona %2$d"
+msgstr "%1$s skupinow, strona %2$d"
#: actions/usergroups.php:130
msgid "Search for more groups"
@@ -4289,19 +4250,19 @@ msgstr "Wersija"
msgid "Author(s)"
msgstr "Awtorojo"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4319,9 +4280,8 @@ msgid "Group leave failed."
msgstr "Wopušćenje skupiny je so njeporadźiło."
#: classes/Local_group.php:41
-#, fuzzy
msgid "Could not update local group."
-msgstr "Skupina njeje so dała aktualizować."
+msgstr "Lokalna skupina njeda so aktualizować."
#: classes/Login_token.php:76
#, php-format
@@ -4340,43 +4300,43 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4402,36 +4362,33 @@ msgid "Couldn't delete self-subscription."
msgstr "Sebjeabonement njeje so daÅ‚ zniÄić."
#: classes/Subscription.php:190
-#, fuzzy
msgid "Couldn't delete subscription OMB token."
-msgstr "Abonoment njeje so daÅ‚ zniÄić."
+msgstr "Znamjo OMB-abonementa njeda so zhašeć."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Abonoment njeje so daÅ‚ zniÄić."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:486
-#, fuzzy
+#: classes/User_group.php:489
msgid "Could not set group URI."
-msgstr "Skupina njeje so dała aktualizować."
+msgstr "URI skupiny njeda so nastajić."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:521
-#, fuzzy
+#: classes/User_group.php:524
msgid "Could not save local group info."
-msgstr "Profil njeje so składować dał."
+msgstr "Informacije wo lokalnej skupinje njedachu so składować."
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
@@ -4481,24 +4438,21 @@ msgid "Personal profile and friends timeline"
msgstr ""
#: lib/action.php:433
-#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Wosobinski"
#. TRANS: Tooltip for main menu option "Account"
#: lib/action.php:435
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Změń swoje hesło."
+msgstr "Wašu e-mejl, waš awatar, waše hesło, waš profil změnić"
#. TRANS: Tooltip for main menu option "Services"
#: lib/action.php:440
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Zwiski"
+msgstr "Ze słužbami zwjazać"
#: lib/action.php:443
msgid "Connect"
@@ -4506,93 +4460,78 @@ msgstr "Zwjazać"
#. TRANS: Tooltip for menu option "Admin"
#: lib/action.php:446
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Sydłowu konfiguraciju změnić"
#: lib/action.php:449
-#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
#: lib/action.php:453
-#, fuzzy, php-format
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
-"Wužij tutón formular, zo by swojich přećelow a kolegow přeprosył, zo bychu "
-"tutu słužbu wužiwali."
+msgstr "Přećelow a kolegow přeprosyć, so tebi na %s přidružić"
#: lib/action.php:456
-#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Přeprosyć"
#. TRANS: Tooltip for main menu option "Logout"
#: lib/action.php:462
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Šat za sydło."
+msgstr "Ze sydła wotzjewić"
#: lib/action.php:465
-#, fuzzy
msgctxt "MENU"
msgid "Logout"
-msgstr "Logo"
+msgstr "Wotzjewić"
#. TRANS: Tooltip for main menu option "Register"
#: lib/action.php:470
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Konto załožić"
#: lib/action.php:473
-#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrować"
#. TRANS: Tooltip for main menu option "Login"
#: lib/action.php:476
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Při sydle přizjewić"
#: lib/action.php:479
-#, fuzzy
msgctxt "MENU"
msgid "Login"
-msgstr "Přizjewić"
+msgstr "Přizjewjenje"
#. TRANS: Tooltip for main menu option "Help"
#: lib/action.php:482
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomhaj!"
#: lib/action.php:485
-#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Pomoc"
#. TRANS: Tooltip for main menu option "Search"
#: lib/action.php:488
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Za ludźimi abo tekstom pytać"
#: lib/action.php:491
-#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Pytać"
@@ -4651,19 +4590,19 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4671,41 +4610,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr ""
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr ""
@@ -4721,6 +4660,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4753,7 +4696,6 @@ msgstr ""
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:350
-#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Sydło"
@@ -4765,16 +4707,14 @@ msgstr ""
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:358
-#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Design"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:364
-#, fuzzy
msgid "User configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Wužiwarska konfiguracija"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
@@ -4783,9 +4723,8 @@ msgstr "Wužiwar"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:372
-#, fuzzy
msgid "Access configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Přistupna konfiguracija"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:380
@@ -4794,27 +4733,24 @@ msgstr ""
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:388
-#, fuzzy
msgid "Sessions configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Konfiguracija posedźenjow"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:396
-#, fuzzy
msgid "Edit site notice"
-msgstr "Dwójna zdźělenka"
+msgstr "Sydłowu zdźělenku wobdźěłać"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:404
-#, fuzzy
msgid "Snapshots configuration"
-msgstr "SMS-wobkrućenje"
+msgstr "Konfiguracija wobrazowkowych fotow"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4888,11 +4824,11 @@ msgstr "Wotwołać"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Awtor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr ""
@@ -4912,37 +4848,50 @@ msgstr "Změnjenje hesła je so njeporadźiło"
msgid "Password changing is not allowed"
msgstr "Změnjenje hesła njeje dowolene"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Zdźělenka z tym ID njeeksistuje"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Wužiwar nima poslednju powěsć"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr ""
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr ""
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr ""
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -4950,170 +4899,167 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Zdźělenka z tym ID njeeksistuje"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Wužiwar nima poslednju powěsć"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Sy hižo ÄÅ‚on teje skupiny"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Njebě móžno wužiwarja %s skupinje %s přidać"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s je so k skupinje %s přizamknył"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Njebě móžno wužiwarja %s do skupiny %s přesunyć"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s je skupinu %s wopušćił"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Dospołne mjeno: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Městno: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Wo: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Direktna powěsć do %s pósłana"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Njemóžeš swójsku powěsć wospjetować"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Tuta zdźělenka bu hižo wospjetowana"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Zdźělenka wot %s wospjetowana"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Zmylk při wospjetowanju zdźělenki"
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Wotmołwa na %s pósłana"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr ""
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-#, fuzzy
-msgid "No such user"
-msgstr "Wužiwar njeeksistuje"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "OMB-profile njedadźa so přez přikaz abonować."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
-#, fuzzy, php-format
+#: lib/command.php:735
+#, php-format
msgid "Unsubscribed %s"
-msgstr "Wotskazany"
+msgstr "%s wotskazany"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Sy tutu wosobu abonował:"
@@ -5121,11 +5067,11 @@ msgstr[1] "Sy tutej wosobje abonował:"
msgstr[2] "Sy tute wosoby abonował:"
msgstr[3] "Sy tute wosoby abonował:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Tuta wosoba je će abonowała:"
@@ -5133,11 +5079,11 @@ msgstr[1] "Tutej wosobje stej će abonowałoj:"
msgstr[2] "Tute wosoby su će abonowali:"
msgstr[3] "Tute wosoby su će abonowali:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Sy ÄÅ‚on tuteje skupiny:"
@@ -5145,7 +5091,7 @@ msgstr[1] "Sy ÄÅ‚on tuteju skupinow:"
msgstr[2] "Sy ÄÅ‚on tutych skupinow:"
msgstr[3] "Sy ÄÅ‚on tutych skupinow:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5187,19 +5133,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Žana konfiguraciska dataja namakana. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5373,49 +5319,49 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Dźělne nahraće."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Naša dataja je so zhubiła."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Njeznaty datajowy typ"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "KB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Njeznate žórło postoweho kašćika %d."
@@ -5610,7 +5556,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "wot"
@@ -5700,7 +5646,6 @@ msgid "Available characters"
msgstr "K dispoziciji stejace znamješka"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Pósłać"
@@ -5761,23 +5706,23 @@ msgstr "Z"
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Wospjetowany wot"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Na tutu zdźělenku wotmołwić"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Wotmołwić"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Zdźělenka wospjetowana"
@@ -5915,11 +5860,11 @@ msgid "Repeat this notice"
msgstr "Tutu zdźělenku wospjetować"
#: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Revoke the \"%s\" role from this user"
-msgstr "Tutoho wužiwarja za tutu skupinu blokować"
+msgstr "Rólu \"%s\" tutoho wužiwarja wotwołać"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6045,91 +5990,93 @@ msgstr "Tutoho wužiwarja wotskazać"
msgid "Unsubscribe"
msgstr "Wotskazać"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Awatar wobdźěłać"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Wužiwarske akcije"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Profilowe nastajenja wobdźěłać"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Wobdźěłać"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Tutomu wužiwarja direktnu powěsć pósłać"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Powěsć"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
-#, fuzzy
+#: lib/userprofile.php:364
msgid "User role"
-msgstr "Wužiwarski profil"
+msgstr "Wužiwarska róla"
-#: lib/userprofile.php:354
-#, fuzzy
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
-msgstr "Administratorojo"
+msgstr "Administrator"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "před něšto sekundami"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
@@ -6145,7 +6092,7 @@ msgstr ""
"%s płaćiwa barba njeje! Wužij 3 heksadecimalne znamješka abo 6 "
"heksadecimalnych znamješkow."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index 7a96686ed..b31fc0d2d 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:08+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:53+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
@@ -42,7 +42,6 @@ msgstr "Prohibir al usatores anonyme (sin session aperte) de vider le sito?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Private"
@@ -73,7 +72,6 @@ msgid "Save access settings"
msgstr "Salveguardar configurationes de accesso"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Salveguardar"
@@ -94,7 +92,7 @@ msgstr "Pagina non existe"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -103,10 +101,8 @@ msgstr "Pagina non existe"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Usator non existe."
@@ -205,14 +201,14 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Methodo API non trovate."
@@ -225,8 +221,8 @@ msgstr "Methodo API non trovate."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Iste methodo require un POST."
@@ -257,7 +253,7 @@ msgid "Could not save profile."
msgstr "Non poteva salveguardar le profilo."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -343,7 +339,7 @@ msgstr "Nulle stato trovate con iste ID."
msgid "This status is already a favorite."
msgstr "Iste stato es ja favorite."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Non poteva crear le favorite."
@@ -460,7 +456,7 @@ msgstr "Gruppo non trovate!"
msgid "You are already a member of that group."
msgstr "Tu es ja membro de iste gruppo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Le administrator te ha blocate de iste gruppo."
@@ -510,7 +506,7 @@ msgstr "Indicio invalide."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -582,9 +578,9 @@ msgstr "Conto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Pseudonymo"
@@ -656,12 +652,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Formato non supportate."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favorites de %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
@@ -671,7 +667,7 @@ msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Actualisationes que mentiona %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -682,7 +678,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "Chronologia public de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Actualisationes de totes in %s!"
@@ -697,12 +693,12 @@ msgstr "Repetite a %s"
msgid "Repeats of %s"
msgstr "Repetitiones de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notas con etiquetta %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualisationes con etiquetta %1$s in %2$s!"
@@ -730,7 +726,7 @@ msgstr "Nulle dimension."
msgid "Invalid size."
msgstr "Dimension invalide."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -763,7 +759,7 @@ msgid "Preview"
msgstr "Previsualisation"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Deler"
@@ -846,8 +842,8 @@ msgstr "Falleva de salveguardar le information del blocada."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Gruppo non existe."
@@ -948,7 +944,7 @@ msgstr "Tu non es le proprietario de iste application."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Il habeva un problema con tu indicio de session."
@@ -1009,7 +1005,7 @@ msgstr "Es tu secur de voler deler iste nota?"
msgid "Do not delete this notice"
msgstr "Non deler iste nota"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Deler iste nota"
@@ -1262,7 +1258,7 @@ msgstr "description es troppo longe (max %d chars)."
msgid "Could not update group."
msgstr "Non poteva actualisar gruppo."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Non poteva crear aliases."
@@ -1578,23 +1574,20 @@ msgid "Cannot read file."
msgstr "Non pote leger file."
#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
msgid "Invalid role."
-msgstr "Indicio invalide."
+msgstr "Rolo invalide."
#: actions/grantrole.php:66 actions/revokerole.php:66
msgid "This role is reserved and cannot be set."
-msgstr ""
+msgstr "Iste rolo es reservate e non pote esser apponite."
#: actions/grantrole.php:75
-#, fuzzy
msgid "You cannot grant user roles on this site."
-msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
+msgstr "Tu non pote conceder rolos a usatores in iste sito."
#: actions/grantrole.php:82
-#, fuzzy
msgid "User already has this role."
-msgstr "Usator es ja silentiate."
+msgstr "Le usator ha ja iste rolo."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1968,7 +1961,7 @@ msgstr "Invitar nove usatores"
msgid "You are already subscribed to these users:"
msgstr "Tu es a subscribite a iste usatores:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2016,7 +2009,6 @@ msgstr "Si tu vole, adde un message personal al invitation."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Inviar"
@@ -2088,9 +2080,8 @@ msgid "You must be logged in to join a group."
msgstr "Tu debe aperir un session pro facer te membro de un gruppo."
#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
msgid "No nickname or ID."
-msgstr "Nulle pseudonymo."
+msgstr "Nulle pseudonymo o ID."
#: actions/joingroup.php:141
#, php-format
@@ -2101,7 +2092,7 @@ msgstr "%1$s es ora membro del gruppo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Tu debe aperir un session pro quitar un gruppo."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Tu non es membro de iste gruppo."
@@ -2217,12 +2208,12 @@ msgstr "Usa iste formulario pro crear un nove gruppo."
msgid "New message"
msgstr "Nove message"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Tu non pote inviar un message a iste usator."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Nulle contento!"
@@ -2230,7 +2221,7 @@ msgstr "Nulle contento!"
msgid "No recipient specified."
msgstr "Nulle destinatario specificate."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2246,7 +2237,7 @@ msgstr "Message inviate"
msgid "Direct message to %s sent."
msgstr "Message directe a %s inviate."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Error de Ajax"
@@ -2368,7 +2359,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Le nota ha nulle profilo"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Le stato de %1$s in %2$s"
@@ -2381,8 +2372,8 @@ msgstr "typo de contento "
msgid "Only "
msgstr "Solmente "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Formato de datos non supportate."
@@ -2514,7 +2505,7 @@ msgstr "Ancian contrasigno incorrecte"
msgid "Error saving user; invalid."
msgstr "Error de salveguardar le usator; invalide."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Non pote salveguardar le nove contrasigno."
@@ -2729,8 +2720,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 minusculas o numeros, sin punctuation o spatios"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nomine complete"
@@ -2757,9 +2748,9 @@ msgid "Bio"
msgstr "Bio"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Loco"
@@ -2773,7 +2764,7 @@ msgstr "Divulgar mi loco actual quando io publica notas"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Etiquettas"
@@ -3015,7 +3006,7 @@ msgstr "Reinitialisar contrasigno"
msgid "Recover password"
msgstr "Recuperar contrasigno"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Recuperation de contrasigno requestate"
@@ -3035,19 +3026,19 @@ msgstr "Reinitialisar"
msgid "Enter a nickname or email address."
msgstr "Entra un pseudonymo o adresse de e-mail."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Nulle usator existe con iste adresse de e-mail o nomine de usator."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Nulle adresse de e-mail registrate pro iste usator."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Error al salveguardar le confirmation del adresse."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3055,23 +3046,23 @@ msgstr ""
"Instructiones pro recuperar tu contrasigno ha essite inviate al adresse de e-"
"mail registrate in tu conto."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Reinitialisation inexpectate del contrasigno."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Le contrasigno debe haber 6 characteres o plus."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Contrasigno e confirmation non corresponde."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Error durante le configuration del usator."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nove contrasigno salveguardate con successo. Tu session es ora aperte."
@@ -3235,7 +3226,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de tu profilo in un altere servicio de microblogging compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscriber"
@@ -3273,7 +3264,7 @@ msgstr "Tu non pote repeter tu proprie nota."
msgid "You already repeated that notice."
msgstr "Tu ha ja repetite iste nota."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repetite"
@@ -3340,14 +3331,12 @@ msgid "Replies to %1$s on %2$s!"
msgstr "Responsas a %1$s in %2$s!"
#: actions/revokerole.php:75
-#, fuzzy
msgid "You cannot revoke user roles on this site."
-msgstr "Tu non pote silentiar usatores in iste sito."
+msgstr "Tu non pote revocar rolos de usatores in iste sito."
#: actions/revokerole.php:82
-#, fuzzy
msgid "User doesn't have this role."
-msgstr "Usator sin profilo correspondente"
+msgstr "Le usator non ha iste rolo."
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
@@ -3418,7 +3407,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statisticas"
@@ -3539,67 +3528,67 @@ msgstr "Gruppo %s"
msgid "%1$s group, page %2$d"
msgstr "Gruppo %1$s, pagina %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Profilo del gruppo"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliases"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Actiones del gruppo"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syndication de notas pro le gruppo %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Amico de un amico pro le gruppo %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nulle)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Tote le membros"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Create"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3614,7 +3603,7 @@ msgstr ""
"lor vita e interesses. [Crea un conto](%%%%action.register%%%%) pro devenir "
"parte de iste gruppo e multe alteres! ([Lege plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3627,7 +3616,7 @@ msgstr ""
"[StatusNet](http://status.net/). Su membros condivide breve messages super "
"lor vita e interesses. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administratores"
@@ -3750,9 +3739,8 @@ msgid "User is already silenced."
msgstr "Usator es ja silentiate."
#: actions/siteadminpanel.php:69
-#, fuzzy
msgid "Basic settings for this StatusNet site"
-msgstr "Configurationes de base pro iste sito de StatusNet."
+msgstr "Configurationes de base pro iste sito de StatusNet"
#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
@@ -3820,13 +3808,14 @@ msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horari predefinite pro le sito; normalmente UTC."
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Lingua predefinite del sito"
+msgstr "Lingua predefinite"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
msgstr ""
+"Le lingua del sito quando le detection automatic ex le configuration del "
+"navigator non es disponibile"
#: actions/siteadminpanel.php:271
msgid "Limits"
@@ -3851,37 +3840,33 @@ msgstr ""
"publicar le mesme cosa de novo."
#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
msgid "Site Notice"
msgstr "Aviso del sito"
#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
msgid "Edit site-wide message"
-msgstr "Nove message"
+msgstr "Modificar message a tote le sito"
#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
msgid "Unable to save site notice."
-msgstr "Impossibile salveguardar le configurationes del apparentia."
+msgstr "Impossibile salveguardar le aviso del sito."
#: actions/sitenoticeadminpanel.php:113
msgid "Max length for the site-wide notice is 255 chars"
-msgstr ""
+msgstr "Le longitude maxime del aviso a tote le sito es 255 characteres"
#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
msgid "Site notice text"
-msgstr "Aviso del sito"
+msgstr "Texto del aviso del sito"
#: actions/sitenoticeadminpanel.php:178
msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
+"Le texto del aviso a tote le sito (max. 255 characteres; HTML permittite)"
#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
msgid "Save site notice"
-msgstr "Aviso del sito"
+msgstr "Salveguardar aviso del sito"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3989,9 +3974,8 @@ msgid "Snapshots"
msgstr "Instantaneos"
#: actions/snapshotadminpanel.php:65
-#, fuzzy
msgid "Manage snapshot configuration"
-msgstr "Modificar le configuration del sito"
+msgstr "Gerer configuration de instantaneos"
#: actions/snapshotadminpanel.php:127
msgid "Invalid snapshot run value."
@@ -4038,9 +4022,8 @@ msgid "Snapshots will be sent to this URL"
msgstr "Le instantaneos essera inviate a iste URL"
#: actions/snapshotadminpanel.php:248
-#, fuzzy
msgid "Save snapshot settings"
-msgstr "Salveguardar configurationes del sito"
+msgstr "Salveguardar configuration de instantaneos"
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
@@ -4053,17 +4036,15 @@ msgstr "Non poteva salveguardar le subscription."
#: actions/subscribe.php:77
msgid "This action only accepts POST requests."
-msgstr ""
+msgstr "Iste action accepta solmente le requestas de typo POST."
#: actions/subscribe.php:107
-#, fuzzy
msgid "No such profile."
-msgstr "File non existe."
+msgstr "Profilo non existe."
#: actions/subscribe.php:117
-#, fuzzy
msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Tu non es subscribite a iste profilo."
+msgstr "Tu non pote subscriber te a un profilo remote OMB 0.1 con iste action."
#: actions/subscribe.php:145
msgid "Subscribed"
@@ -4187,12 +4168,12 @@ msgstr "Nulle parametro de ID."
msgid "Tag %s"
msgstr "Etiquetta %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Profilo del usator"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Photo"
@@ -4262,7 +4243,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Usator"
@@ -4535,7 +4515,7 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Autor(es)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4544,12 +4524,12 @@ msgstr ""
"Nulle file pote esser plus grande que %d bytes e le file que tu inviava ha %"
"d bytes. Tenta incargar un version minus grande."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Un file de iste dimension excederea tu quota de usator de %d bytes."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Un file de iste dimension excederea tu quota mensual de %d bytes."
@@ -4567,9 +4547,8 @@ msgid "Group leave failed."
msgstr "Le cancellation del membrato del gruppo ha fallite."
#: classes/Local_group.php:41
-#, fuzzy
msgid "Could not update local group."
-msgstr "Non poteva actualisar gruppo."
+msgstr "Non poteva actualisar gruppo local."
#: classes/Login_token.php:76
#, php-format
@@ -4588,27 +4567,27 @@ msgstr "Non poteva inserer message."
msgid "Could not update message with new URI."
msgstr "Non poteva actualisar message con nove URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problema salveguardar nota. Troppo longe."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problema salveguardar nota. Usator incognite."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppo de notas troppo rapidemente; face un pausa e publica de novo post "
"alcun minutas."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4616,19 +4595,19 @@ msgstr ""
"Troppo de messages duplicate troppo rapidemente; face un pausa e publica de "
"novo post alcun minutas."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Il te es prohibite publicar notas in iste sito."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problema salveguardar nota."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problema salveguardar le cassa de entrata del gruppo."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4654,36 +4633,33 @@ msgid "Couldn't delete self-subscription."
msgstr "Non poteva deler auto-subscription."
#: classes/Subscription.php:190
-#, fuzzy
msgid "Couldn't delete subscription OMB token."
-msgstr "Non poteva deler subscription."
+msgstr "Non poteva deler le indicio OMB del subscription."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Non poteva deler subscription."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenite a %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Non poteva crear gruppo."
-#: classes/User_group.php:486
-#, fuzzy
+#: classes/User_group.php:489
msgid "Could not set group URI."
-msgstr "Non poteva configurar le membrato del gruppo."
+msgstr "Non poteva definir le URL del gruppo."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Non poteva configurar le membrato del gruppo."
-#: classes/User_group.php:521
-#, fuzzy
+#: classes/User_group.php:524
msgid "Could not save local group info."
-msgstr "Non poteva salveguardar le subscription."
+msgstr "Non poteva salveguardar le informationes del gruppo local."
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
@@ -4728,30 +4704,26 @@ msgstr "Navigation primari del sito"
#. TRANS: Tooltip for main menu option "Personal"
#: lib/action.php:430
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personal e chronologia de amicos"
#: lib/action.php:433
-#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personal"
#. TRANS: Tooltip for main menu option "Account"
#: lib/action.php:435
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo"
#. TRANS: Tooltip for main menu option "Services"
#: lib/action.php:440
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Connecter con servicios"
+msgstr "Connecter a servicios"
#: lib/action.php:443
msgid "Connect"
@@ -4759,91 +4731,78 @@ msgstr "Connecter"
#. TRANS: Tooltip for menu option "Admin"
#: lib/action.php:446
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modificar le configuration del sito"
#: lib/action.php:449
-#, fuzzy
msgctxt "MENU"
msgid "Admin"
-msgstr "Administrator"
+msgstr "Admin"
#. TRANS: Tooltip for main menu option "Invite"
#: lib/action.php:453
-#, fuzzy, php-format
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invitar amicos e collegas a accompaniar te in %s"
#: lib/action.php:456
-#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invitar"
#. TRANS: Tooltip for main menu option "Logout"
#: lib/action.php:462
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Terminar le session del sito"
#: lib/action.php:465
-#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Clauder session"
#. TRANS: Tooltip for main menu option "Register"
#: lib/action.php:470
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear un conto"
#: lib/action.php:473
-#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Crear conto"
#. TRANS: Tooltip for main menu option "Login"
#: lib/action.php:476
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Identificar te a iste sito"
#: lib/action.php:479
-#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Aperir session"
#. TRANS: Tooltip for main menu option "Help"
#: lib/action.php:482
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Adjuta me!"
#: lib/action.php:485
-#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Adjuta"
#. TRANS: Tooltip for main menu option "Search"
#: lib/action.php:488
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cercar personas o texto"
#: lib/action.php:491
-#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Cercar"
@@ -4902,7 +4861,7 @@ msgstr "Insignia"
msgid "StatusNet software license"
msgstr "Licentia del software StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4911,12 +4870,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblog. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4927,55 +4886,59 @@ msgstr ""
"net/), version %s, disponibile sub le [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licentia del contento del sito"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Le contento e datos de %1$s es private e confidential."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Contento e datos sub copyright de %1$s. Tote le derectos reservate."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Contento e datos sub copyright del contributores. Tote le derectos reservate."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Totes "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licentia."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Post"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Ante"
#: lib/activity.php:453
msgid "Can't handle remote content yet."
-msgstr ""
+msgstr "Non pote ancora tractar contento remote."
#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
-msgstr ""
+msgstr "Non pote ancora tractar contento XML incastrate."
#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
+msgstr "Non pote ancora tractar contento Base64 incastrate."
+
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
msgstr ""
#. TRANS: Client error message
@@ -5010,7 +4973,6 @@ msgstr "Configuration basic del sito"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:350
-#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Sito"
@@ -5022,7 +4984,6 @@ msgstr "Configuration del apparentia"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:358
-#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Apparentia"
@@ -5054,15 +5015,13 @@ msgstr "Configuration del sessiones"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:396
-#, fuzzy
msgid "Edit site notice"
-msgstr "Aviso del sito"
+msgstr "Modificar aviso del sito"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:404
-#, fuzzy
msgid "Snapshots configuration"
-msgstr "Configuration del camminos"
+msgstr "Configuration del instantaneos"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5070,7 +5029,7 @@ msgstr ""
"Le ressource de API require accesso pro lectura e scriptura, ma tu ha "
"solmente accesso pro lectura."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5148,11 +5107,11 @@ msgstr "Revocar"
msgid "Attachments"
msgstr "Annexos"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Providitor"
@@ -5172,37 +5131,50 @@ msgstr "Cambio del contrasigno fallite"
msgid "Password changing is not allowed"
msgstr "Cambio del contrasigno non permittite"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultatos del commando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Commando complete"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Commando fallite"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Pardono, iste commando non es ancora implementate."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Non existe un nota con iste ID"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Usator non ha ultime nota"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Non poteva trovar un usator con pseudonymo %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Non poteva trovar un usator local con pseudonymo %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Pardono, iste commando non es ancora implementate."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Non ha multe senso pulsar te mesme!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Pulsata inviate a %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5213,198 +5185,197 @@ msgstr ""
"Subscriptores: %2$s\n"
"Notas: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Non existe un nota con iste ID"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Usator non ha ultime nota"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Nota marcate como favorite."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Tu es ja membro de iste gruppo"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Non poteva facer le usator %s membro del gruppo %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s se faceva membro del gruppo %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Non poteva remover le usator %s del gruppo %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s quitava le gruppo %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nomine complete: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Loco: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pagina personal: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "A proposito: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s es un profilo remote; tu pote solmente inviar messages directe a usatores "
+"super le mesme servitor."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Message troppo longe - maximo es %d characteres, tu inviava %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Message directe a %s inviate"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Error durante le invio del message directe."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Non pote repeter tu proprie nota"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Iste nota ha ja essite repetite"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Nota de %s repetite"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Error durante le repetition del nota."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Nota troppo longe - maximo es %d characteres, tu inviava %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Responsa a %s inviate"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Errur durante le salveguarda del nota."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Specifica le nomine del usator al qual subscriber te"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Usator non existe"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Impossibile subscriber se a profilos OMB per medio de un commando."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Subscribite a %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specifica le nomine del usator al qual cancellar le subscription"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Subscription a %s cancellate"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Commando non ancora implementate."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notification disactivate."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Non pote disactivar notification."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notification activate."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Non pote activar notification."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Le commando de apertura de session es disactivate"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Iste ligamine pote esser usate solmente un vice, e es valide durante "
"solmente 2 minutas: %s"
-#: lib/command.php:692
-#, fuzzy, php-format
+#: lib/command.php:735
+#, php-format
msgid "Unsubscribed %s"
-msgstr "Subscription a %s cancellate"
+msgstr "Subscription de %s cancellate"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Tu non es subscribite a alcuno."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Tu es subscribite a iste persona:"
msgstr[1] "Tu es subscribite a iste personas:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Necuno es subscribite a te."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Iste persona es subscribite a te:"
msgstr[1] "Iste personas es subscribite a te:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Tu non es membro de alcun gruppo."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Tu es membro de iste gruppo:"
msgstr[1] "Tu es membro de iste gruppos:"
-#: lib/command.php:769
-#, fuzzy
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5454,9 +5425,10 @@ msgstr ""
"subscriptions - listar le personas que tu seque\n"
"subscribers - listar le personas qui te seque\n"
"leave <pseudonymo> - cancellar subscription al usator\n"
-"d <pseudonymo> <texto> - diriger message al usator\n"
-"get <pseudonymo> - obtener ultime nota del usator\n"
+"d <pseudonymo> <texto> - diriger un message al usator\n"
+"get <pseudonymo> - obtener le ultime nota del usator\n"
"whois <pseudonymo> - obtener info de profilo del usator\n"
+"lose <pseudonymo> - fortiar le usator de cessar de sequer te\n"
"fav <pseudonymo> - adder ultime nota del usator como favorite\n"
"fav #<id_de_nota> - adder nota con le ID date como favorite\n"
"repeat #<id_de_nota> - repeter le nota con le ID date\n"
@@ -5483,19 +5455,19 @@ msgstr ""
"tracks - non ancora implementate.\n"
"tracking - non ancora implementate.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Nulle file de configuration trovate. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Io cercava files de configuration in le sequente locos: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Considera executar le installator pro reparar isto."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Ir al installator."
@@ -5597,7 +5569,7 @@ msgstr "Ir"
#: lib/grantroleform.php:91
#, php-format
msgid "Grant this user the \"%s\" role"
-msgstr ""
+msgstr "Conceder le rolo \"%s\" a iste usator"
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
@@ -5673,49 +5645,49 @@ msgstr "Etiquettas in le notas del gruppo %s"
msgid "This page is not available in a media type you accept"
msgstr "Iste pagina non es disponibile in un formato que tu accepta"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato de file de imagine non supportate."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Iste file es troppo grande. Le dimension maximal es %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Incargamento partial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Error de systema durante le incargamento del file."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Le file non es un imagine o es defectuose."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato de file de imagine non supportate."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "File perdite."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Typo de file incognite"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "KB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Fonte de cassa de entrata \"%s\" incognite"
@@ -5996,7 +5968,7 @@ msgstr ""
"altere usatores in conversation. Altere personas pote inviar te messages que "
"solmente tu pote leger."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "de"
@@ -6090,7 +6062,6 @@ msgid "Available characters"
msgstr "Characteres disponibile"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Inviar"
@@ -6153,23 +6124,23 @@ msgstr "W"
msgid "at"
msgstr "a"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "in contexto"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repetite per"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Responder a iste nota"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Nota repetite"
@@ -6307,11 +6278,11 @@ msgid "Repeat this notice"
msgstr "Repeter iste nota"
#: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Revoke the \"%s\" role from this user"
-msgstr "Blocar iste usator de iste gruppo"
+msgstr "Revocar le rolo \"%s\" de iste usator"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Nulle signule usator definite pro le modo de singule usator."
@@ -6437,92 +6408,93 @@ msgstr "Cancellar subscription a iste usator"
msgid "Unsubscribe"
msgstr "Cancellar subscription"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Modificar avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Actiones de usator"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Modificar configuration de profilo"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Modificar"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Inviar un message directe a iste usator"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Message"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderar"
-#: lib/userprofile.php:352
-#, fuzzy
+#: lib/userprofile.php:364
msgid "User role"
-msgstr "Profilo del usator"
+msgstr "Rolo de usator"
-#: lib/userprofile.php:354
-#, fuzzy
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
-msgstr "Administratores"
+msgstr "Administrator"
-#: lib/userprofile.php:355
-#, fuzzy
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
-msgstr "Moderar"
+msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "alcun secundas retro"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "circa un minuta retro"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minutas retro"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "circa un hora retro"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "circa %d horas retro"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "circa un die retro"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "circa %d dies retro"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "circa un mense retro"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "circa %d menses retro"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "circa un anno retro"
@@ -6536,7 +6508,7 @@ msgstr "%s non es un color valide!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s non es un color valide! Usa 3 o 6 characteres hexadecimal."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Message troppo longe - maximo es %1$d characteres, tu inviava %2$d."
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index 3c8f33565..595431e9a 100644
--- a/locale/is/LC_MESSAGES/statusnet.po
+++ b/locale/is/LC_MESSAGES/statusnet.po
@@ -8,12 +8,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:12+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:56+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: is\n"
"X-Message-Group: out-statusnet\n"
@@ -102,7 +102,7 @@ msgstr "Ekkert þannig merki."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -111,10 +111,8 @@ msgstr "Ekkert þannig merki."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Enginn svoleiðis notandi."
@@ -205,14 +203,14 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Aðferð í forritsskilum fannst ekki!"
@@ -226,8 +224,8 @@ msgstr "Aðferð í forritsskilum fannst ekki!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Þessi aðferð krefst POST."
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "Gat ekki vistað persónulega síðu."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -345,7 +343,7 @@ msgstr "Engin staða fundin með þessu kenni."
msgid "This status is already a favorite."
msgstr "Þetta babl er nú þegar í uppáhaldi!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Gat ekki búið til uppáhald."
@@ -468,7 +466,7 @@ msgstr "Aðferð í forritsskilum fannst ekki!"
msgid "You are already a member of that group."
msgstr "Þú ert nú þegar meðlimur í þessum hópi"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -520,7 +518,7 @@ msgstr "Ótæk stærð."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -587,9 +585,9 @@ msgstr "Aðgangur"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Stuttnefni"
@@ -662,12 +660,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Skráarsnið myndar ekki stutt."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Uppáhaldsbabl frá %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s."
@@ -677,7 +675,7 @@ msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s."
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s færslur sem svara færslum frá %2$s / %3$s."
@@ -687,7 +685,7 @@ msgstr "%1$s færslur sem svara færslum frá %2$s / %3$s."
msgid "%s public timeline"
msgstr "Almenningsrás %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s færslur frá öllum!"
@@ -702,12 +700,12 @@ msgstr "Svör við %s"
msgid "Repeats of %s"
msgstr "Svör við %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Babl merkt með %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -735,7 +733,7 @@ msgstr "Engin stærð."
msgid "Invalid size."
msgstr "Ótæk stærð."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Mynd"
@@ -767,7 +765,7 @@ msgid "Preview"
msgstr "Forsýn"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Eyða"
@@ -850,8 +848,8 @@ msgstr "Mistókst að vista upplýsingar um notendalokun"
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Enginn þannig hópur."
@@ -958,7 +956,7 @@ msgstr "Þú ert ekki meðlimur í þessum hópi."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Það komu upp vandamál varðandi setutókann þinn."
@@ -1017,7 +1015,7 @@ msgstr "Ertu viss um að þú viljir eyða þessu babli?"
msgid "Do not delete this notice"
msgstr ""
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Eyða þessu babli"
@@ -1288,7 +1286,7 @@ msgstr "Lýsing er of löng (í mesta lagi 140 tákn)."
msgid "Could not update group."
msgstr "Gat ekki uppfært hóp."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr ""
@@ -1986,7 +1984,7 @@ msgstr "Bjóða nýjum notendum að vera með"
msgid "You are already subscribed to these users:"
msgstr "Þú ert nú þegar í áskrift að þessum notendum:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2119,7 +2117,7 @@ msgstr "%s bætti sér í hópinn %s"
msgid "You must be logged in to leave a group."
msgstr "Þú verður aða hafa skráð þig inn til að ganga úr hóp."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Þú ert ekki meðlimur í þessum hópi."
@@ -2240,12 +2238,12 @@ msgstr "Notaðu þetta eyðublað til að búa til nýjan hóp."
msgid "New message"
msgstr "Ný skilaboð"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Þú getur ekki sent þessum notanda skilaboð."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ekkert innihald!"
@@ -2253,7 +2251,7 @@ msgstr "Ekkert innihald!"
msgid "No recipient specified."
msgstr "Enginn móttökuaðili tilgreindur."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2269,7 +2267,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr "Bein skilaboð send til %s"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax villa"
@@ -2387,7 +2385,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Babl hefur enga persónulega síðu"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Staða %1$s á %2$s"
@@ -2400,8 +2398,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Enginn stuðningur við gagnasnið."
@@ -2540,7 +2538,7 @@ msgstr "Rangt eldra lykilorð"
msgid "Error saving user; invalid."
msgstr "Villa kom upp í vistun notanda: ótækt."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Get ekki vistað nýja lykilorðið."
@@ -2764,8 +2762,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 lágstafir eða tölustafir, engin greinarmerki eða bil"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Fullt nafn"
@@ -2795,9 +2793,9 @@ msgid "Bio"
msgstr "Lýsing"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Staðsetning"
@@ -2811,7 +2809,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Merki"
@@ -3042,7 +3040,7 @@ msgstr "Endurstilla lykilorð"
msgid "Recover password"
msgstr "Endurheimta lykilorð"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Beiðni um að endurheimta lykilorð hefur verið send inn"
@@ -3062,19 +3060,19 @@ msgstr "Endurstilla"
msgid "Enter a nickname or email address."
msgstr "Sláðu inn stuttnefni eða tölvupóstfang."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Enginn notandi með þetta tölvupóstfang eða notendanafn"
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ekkert tölvupóstfang á skrá fyrir þennan notanda."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Villa kom upp í vistun netfangsstaðfestingar."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3082,23 +3080,23 @@ msgstr ""
"Leiðbeiningar um það hvernig þú getur endurheimt lykilorðið þitt hafa verið "
"sendar á tölvupóstfangið sem er tengt notendaaðganginum þínum."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Bjóst ekki við endurstillingu lykilorðs."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Lykilorð verður að vera 6 tákn eða fleiri."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Lykilorð og staðfesting passa ekki saman."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Villa kom upp í stillingu notanda."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Tókst að vista nýtt lykilorð. Þú ert núna innskráð(ur)"
@@ -3259,7 +3257,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Veffang persónulegrar síðu á samvirkandi örbloggsþjónustu"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Gerast áskrifandi"
@@ -3304,7 +3302,7 @@ msgstr "Þú getur ekki nýskráð þig nema þú samþykkir leyfið."
msgid "You already repeated that notice."
msgstr "Þú hefur nú þegar lokað á þennan notanda."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "à sviðsljósinu"
@@ -3451,7 +3449,7 @@ msgstr "Uppröðun"
msgid "Description"
msgstr "Lýsing"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tölfræði"
@@ -3563,67 +3561,67 @@ msgstr "%s hópurinn"
msgid "%1$s group, page %2$d"
msgstr "Hópmeðlimir %s, síða %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Hópssíðan"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "Vefslóð"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Athugasemd"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Hópsaðgerðir"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s hópurinn"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Meðlimir"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ekkert)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Allir meðlimir"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr ""
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3633,7 +3631,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3642,7 +3640,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4184,12 +4182,12 @@ msgstr "Ekkert einkenni gefið upp."
msgid "Tag %s"
msgstr "Merki %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Persónuleg síða notanda"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Ljósmynd"
@@ -4530,19 +4528,19 @@ msgstr "Persónulegt"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4585,46 +4583,46 @@ msgstr "Gat ekki skeytt skilaboðum inn í."
msgid "Could not update message with new URI."
msgstr "Gat ekki uppfært skilaboð með nýju veffangi."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Gat ekki vistað babl. Óþekktur notandi."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Of mikið babl í einu; slakaðu aðeins á og haltu svo áfram eftir nokkrar "
"mínútur."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4657,29 +4655,29 @@ msgstr "Gat ekki eytt áskrift."
msgid "Couldn't delete subscription OMB token."
msgstr "Gat ekki eytt áskrift."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Gat ekki eytt áskrift."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Gat ekki búið til hóp."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Gat ekki skráð hópmeðlimi."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Gat ekki skráð hópmeðlimi."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Gat ekki vistað áskrift."
@@ -4903,7 +4901,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4912,12 +4910,12 @@ msgstr ""
"**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er örbloggsþjónusta."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4928,42 +4926,42 @@ msgstr ""
"sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Allt "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "leyfi."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Uppröðun"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Eftir"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Ãður"
@@ -4979,6 +4977,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5079,7 +5081,7 @@ msgstr "SMS staðfesting"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5158,11 +5160,11 @@ msgstr "Fjarlægja"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr ""
@@ -5184,37 +5186,51 @@ msgstr "Lykilorðabreyting"
msgid "Password changing is not allowed"
msgstr "Lykilorðabreyting"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Niðurstöður skipunar"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Fullkláruð skipun"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Misheppnuð skipun"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Fyrirgefðu en þessi skipun hefur ekki enn verið útbúin."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Enginn persónuleg síða með þessu einkenni."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Notandi hefur ekkert nýtt babl"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Gat ekki uppfært notanda með staðfestu tölvupóstfangi."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Fyrirgefðu en þessi skipun hefur ekki enn verið útbúin."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Ãtt við notanda"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5222,203 +5238,201 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Enginn persónuleg síða með þessu einkenni."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Notandi hefur ekkert nýtt babl"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Babl gert að uppáhaldi."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Þú ert nú þegar meðlimur í þessum hópi"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Gat ekki bætt notandanum %s í hópinn %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s bætti sér í hópinn %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Gat ekki fjarlægt notandann %s úr hópnum %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s gekk úr hópnum %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Fullt nafn: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Staðsetning: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Heimasíða: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Um: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Bein skilaboð send til %s"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Villa kom upp við að senda bein skilaboð"
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Get ekki kveikt á tilkynningum."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Eyða þessu babli"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Babl sent inn"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Vandamál komu upp við að vista babl."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Svara þessu babli"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Vandamál komu upp við að vista babl."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Tilgreindu nafn notandans sem þú vilt gerast áskrifandi að"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Enginn svoleiðis notandi."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Þú ert ekki áskrifandi."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Nú ert þú áskrifandi að %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Tilgreindu nafn notandans sem þú vilt hætta sem áskrifandi að"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Nú ert þú ekki lengur áskrifandi að %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Skipun hefur ekki verið fullbúin"
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Tilkynningar af."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Get ekki slökkt á tilkynningum."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Tilkynningar á."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Get ekki kveikt á tilkynningum."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Nú ert þú ekki lengur áskrifandi að %s"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Þú ert ekki áskrifandi."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Gat ekki leyft öðrum að gerast áskrifandi að þér."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Þú ert ekki meðlimur í þessum hópi."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5460,20 +5474,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Enginn staðfestingarlykill."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "Skrá þig inn á síðuna"
@@ -5653,49 +5667,49 @@ msgid "This page is not available in a media type you accept"
msgstr ""
"Þessi síða er ekki aðgengileg í margmiðlunargerðinni sem þú tekur á móti"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Skráarsnið myndar ekki stutt."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Þetta er of langt. Hámarkslengd babls er 140 tákn."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Upphal að hluta til."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Kerfisvilla kom upp við upphal skráar."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Annaðhvort ekki mynd eða þá að skráin er gölluð."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Skráarsnið myndar ekki stutt."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Týndum skránni okkar"
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Óþekkt skráargerð"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5900,7 +5914,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr "frá"
@@ -6056,24 +6070,24 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "à sviðsljósinu"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Svara þessu babli"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Babl sent inn"
@@ -6221,7 +6235,7 @@ msgstr "Svara þessu babli"
msgid "Revoke the \"%s\" role from this user"
msgstr ""
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6353,90 +6367,94 @@ msgstr "Hætta sem áskrifandi að þessum notanda"
msgid "Unsubscribe"
msgstr "Fara úr áskrift"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr ""
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Notandaaðgerðir"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr ""
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Senda bein skilaboð til þessa notanda"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Skilaboð"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Persónuleg síða notanda"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "fyrir nokkrum sekúndum"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
@@ -6450,7 +6468,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Skilaboð eru of löng - 140 tákn eru í mesta lagi leyfð en þú sendir %d"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index 1bd3f26ad..d4d6fc3ef 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:15+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:40:59+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
@@ -95,7 +95,7 @@ msgstr "Pagina inesistente."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -104,10 +104,8 @@ msgstr "Pagina inesistente."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Utente inesistente."
@@ -207,14 +205,14 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Metodo delle API non trovato."
@@ -227,8 +225,8 @@ msgstr "Metodo delle API non trovato."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Questo metodo richiede POST."
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "Impossibile salvare il profilo."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -345,7 +343,7 @@ msgstr "Nessuno messaggio trovato con quel ID."
msgid "This status is already a favorite."
msgstr "Questo messaggio è già un preferito."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Impossibile creare un preferito."
@@ -464,7 +462,7 @@ msgstr "Gruppo non trovato!"
msgid "You are already a member of that group."
msgstr "Fai già parte di quel gruppo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "L'amministratore ti ha bloccato l'accesso a quel gruppo."
@@ -514,7 +512,7 @@ msgstr "Token non valido."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -584,9 +582,9 @@ msgstr "Account"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Soprannome"
@@ -656,12 +654,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Formato non supportato."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Preferiti da %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s"
@@ -671,7 +669,7 @@ msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Messaggi che citano %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s messaggi in risposta a quelli da %2$s / %3$s"
@@ -681,7 +679,7 @@ msgstr "%1$s messaggi in risposta a quelli da %2$s / %3$s"
msgid "%s public timeline"
msgstr "Attività pubblica di %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Aggiornamenti di %s da tutti!"
@@ -696,12 +694,12 @@ msgstr "Ripetuto a %s"
msgid "Repeats of %s"
msgstr "Ripetizioni di %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Messaggi etichettati con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Messaggi etichettati con %1$s su %2$s!"
@@ -729,7 +727,7 @@ msgstr "Nessuna dimensione."
msgid "Invalid size."
msgstr "Dimensione non valida."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Immagine"
@@ -762,7 +760,7 @@ msgid "Preview"
msgstr "Anteprima"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Elimina"
@@ -845,8 +843,8 @@ msgstr "Salvataggio delle informazioni per il blocco non riuscito."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Nessuna gruppo."
@@ -947,7 +945,7 @@ msgstr "Questa applicazione non è di tua proprietà."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Si è verificato un problema con il tuo token di sessione."
@@ -1007,7 +1005,7 @@ msgstr "Vuoi eliminare questo messaggio?"
msgid "Do not delete this notice"
msgstr "Non eliminare il messaggio"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Elimina questo messaggio"
@@ -1260,7 +1258,7 @@ msgstr "La descrizione è troppo lunga (max %d caratteri)."
msgid "Could not update group."
msgstr "Impossibile aggiornare il gruppo."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Impossibile creare gli alias."
@@ -1967,7 +1965,7 @@ msgstr "Invita nuovi utenti"
msgid "You are already subscribed to these users:"
msgstr "Hai già un abbonamento a questi utenti:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2097,7 +2095,7 @@ msgstr "%1$s fa ora parte del gruppo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Devi eseguire l'accesso per lasciare un gruppo."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Non fai parte di quel gruppo."
@@ -2211,12 +2209,12 @@ msgstr "Usa questo modulo per creare un nuovo gruppo."
msgid "New message"
msgstr "Nuovo messaggio"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Non puoi inviare un messaggio a questo utente."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Nessun contenuto!"
@@ -2224,7 +2222,7 @@ msgstr "Nessun contenuto!"
msgid "No recipient specified."
msgstr "Nessun destinatario specificato."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Non inviarti un messaggio, piuttosto ripetilo a voce dolcemente."
@@ -2238,7 +2236,7 @@ msgstr "Messaggio inviato"
msgid "Direct message to %s sent."
msgstr "Messaggio diretto a %s inviato."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Errore di Ajax"
@@ -2359,7 +2357,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Il messaggio non ha un profilo"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Stato di %1$s su %2$s"
@@ -2372,8 +2370,8 @@ msgstr "tipo di contenuto "
msgid "Only "
msgstr "Solo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Non è un formato di dati supportato."
@@ -2506,7 +2504,7 @@ msgstr "Vecchia password non corretta"
msgid "Error saving user; invalid."
msgstr "Errore nel salvare l'utente; non valido."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Impossibile salvare la nuova password."
@@ -2722,8 +2720,8 @@ msgstr ""
"1-64 lettere minuscole o numeri, senza spazi o simboli di punteggiatura"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nome"
@@ -2750,9 +2748,9 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Ubicazione"
@@ -2766,7 +2764,7 @@ msgstr "Condividi la mia posizione attuale quando invio messaggi"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Etichette"
@@ -3006,7 +3004,7 @@ msgstr "Reimposta la password"
msgid "Recover password"
msgstr "Recupera la password"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Richiesta password di ripristino"
@@ -3026,19 +3024,19 @@ msgstr "Reimposta"
msgid "Enter a nickname or email address."
msgstr "Inserisci un soprannome o un indirizzo email."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Nessun utente con quell'email o nome utente."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Nessun indirizzo email registrato per quell'utente."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Errore nel salvare la conferma dell'indirizzo."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3046,23 +3044,23 @@ msgstr ""
"Le istruzioni per recuperare la tua password sono state inviate "
"all'indirizzo email registrato nel tuo account."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Ripristino della password inaspettato."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "La password deve essere lunga almeno 6 caratteri."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "La password e la conferma non corrispondono."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Errore nell'impostare l'utente."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nuova password salvata con successo. Hai effettuato l'accesso."
@@ -3228,7 +3226,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del tuo profilo su un altro servizio di microblog compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Abbonati"
@@ -3266,7 +3264,7 @@ msgstr "Non puoi ripetere i tuoi stessi messaggi."
msgid "You already repeated that notice."
msgstr "Hai già ripetuto quel messaggio."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Ripetuti"
@@ -3409,7 +3407,7 @@ msgstr "Organizzazione"
msgid "Description"
msgstr "Descrizione"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiche"
@@ -3529,67 +3527,67 @@ msgstr "Gruppo %s"
msgid "%1$s group, page %2$d"
msgstr "Gruppi di %1$s, pagina %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Profilo del gruppo"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Nota"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Azioni dei gruppi"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed dei messaggi per il gruppo %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF per il gruppo %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membri"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(nessuno)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Tutti i membri"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Creato"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3605,7 +3603,7 @@ msgstr ""
"stesso](%%%%action.register%%%%) per far parte di questo gruppo e di molti "
"altri! ([Maggiori informazioni](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3617,7 +3615,7 @@ msgstr ""
"(http://it.wikipedia.org/wiki/Microblogging) basato sul software libero "
"[StatusNet](http://status.net/)."
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Amministratori"
@@ -4167,12 +4165,12 @@ msgstr "Nessun argomento ID."
msgid "Tag %s"
msgstr "Etichetta %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Profilo utente"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Fotografia"
@@ -4515,7 +4513,7 @@ msgstr "Versione"
msgid "Author(s)"
msgstr "Autori"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4524,13 +4522,13 @@ msgstr ""
"Nessun file può superare %d byte e il file inviato era di %d byte. Prova a "
"caricarne una versione più piccola."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Un file di questa dimensione supererebbe la tua quota utente di %d byte."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4569,27 +4567,27 @@ msgstr "Impossibile inserire il messaggio."
msgid "Could not update message with new URI."
msgstr "Impossibile aggiornare il messaggio con il nuovo URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Errore del DB nell'inserire un hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problema nel salvare il messaggio. Troppo lungo."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problema nel salvare il messaggio. Utente sconosciuto."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppi messaggi troppo velocemente; fai una pausa e scrivi di nuovo tra "
"qualche minuto."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4597,19 +4595,19 @@ msgstr ""
"Troppi messaggi duplicati troppo velocemente; fai una pausa e scrivi di "
"nuovo tra qualche minuto."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Ti è proibito inviare messaggi su questo sito."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problema nel salvare la casella della posta del gruppo."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4638,28 +4636,28 @@ msgstr "Impossibile eliminare l'auto-abbonamento."
msgid "Couldn't delete subscription OMB token."
msgstr "Impossibile eliminare il token di abbonamento OMB."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Impossibile eliminare l'abbonamento."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenuti su %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Impossibile creare il gruppo."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Impossibile impostare l'URI del gruppo."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Impossibile impostare la membership al gruppo."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Impossibile salvare le informazioni del gruppo locale."
@@ -4863,7 +4861,7 @@ msgstr "Badge"
msgid "StatusNet software license"
msgstr "Licenza del software StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4872,12 +4870,12 @@ msgstr ""
"**%%site.name%%** è un servizio di microblog offerto da [%%site.broughtby%%]"
"(%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** è un servizio di microblog. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4888,44 +4886,44 @@ msgstr ""
"s, disponibile nei termini della licenza [GNU Affero General Public License]"
"(http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licenza del contenuto del sito"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "I contenuti e i dati di %1$s sono privati e confidenziali."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"I contenuti e i dati sono copyright di %1$s. Tutti i diritti riservati."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"I contenuti e i dati sono forniti dai collaboratori. Tutti i diritti "
"riservati."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Tutti "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licenza."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginazione"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Successivi"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Precedenti"
@@ -4941,6 +4939,10 @@ msgstr "Impossibile gestire contenuti XML incorporati."
msgid "Can't handle embedded Base64 content yet."
msgstr "Impossibile gestire contenuti Base64."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5029,7 +5031,7 @@ msgstr ""
"Le risorse API richiedono accesso lettura-scrittura, ma si dispone del solo "
"accesso in lettura."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5106,11 +5108,11 @@ msgstr "Revoca"
msgid "Attachments"
msgstr "Allegati"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autore"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Provider"
@@ -5130,37 +5132,50 @@ msgstr "Modifica della password non riuscita"
msgid "Password changing is not allowed"
msgstr "La modifica della password non è permessa"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Risultati comando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Comando completato"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Comando non riuscito"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Questo comando non è ancora implementato."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Un messaggio con quel ID non esiste"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "L'utente non ha un ultimo messaggio."
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Impossibile trovare un utente col soprannome %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Impossibile trovare un utente locale col soprannome %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Questo comando non è ancora implementato."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Non ha molto senso se cerchi di richiamarti!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Richiamo inviato a %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5171,197 +5186,197 @@ msgstr ""
"Abbonati: %2$s\n"
"Messaggi: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Un messaggio con quel ID non esiste"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "L'utente non ha un ultimo messaggio."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Messaggio indicato come preferito."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Fai già parte di quel gruppo"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Impossibile iscrivere l'utente %1$s al gruppo %2$s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s fa ora parte del gruppo %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Impossibile rimuovere l'utente %1$s dal gruppo %2$s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%1$s ha lasciato il gruppo %2$s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Posizione: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pagina web: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Informazioni: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s è un profilo remoto. È possibile inviare messaggi privati solo agli "
+"utenti sullo stesso server."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Messaggio troppo lungo: massimo %d caratteri, inviati %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Messaggio diretto a %s inviato."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Errore nell'inviare il messaggio diretto."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Impossibile ripetere un proprio messaggio"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Hai già ripetuto quel messaggio"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Messaggio da %s ripetuto"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Errore nel ripetere il messaggio."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Messaggio troppo lungo: massimo %d caratteri, inviati %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Risposta a %s inviata"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Errore nel salvare il messaggio."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Specifica il nome dell'utente a cui abbonarti."
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Utente inesistente."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Impossibile abbonarsi ai profili OMB attraverso un comando."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Abbonati a %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Specifica il nome dell'utente da cui annullare l'abbonamento."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Abbonamento a %s annullato"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Comando non ancora implementato."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notifiche disattivate."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Impossibile disattivare le notifiche."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notifiche attivate."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Impossibile attivare le notifiche."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Il comando di accesso è disabilitato"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Questo collegamento è utilizzabile una sola volta ed è valido solo per 2 "
"minuti: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "%s ha annullato l'abbonamento"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Il tuo abbonamento è stato annullato."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Persona di cui hai già un abbonamento:"
msgstr[1] "Persone di cui hai già un abbonamento:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Nessuno è abbonato ai tuoi messaggi."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Questa persona è abbonata ai tuoi messaggi:"
msgstr[1] "Queste persone sono abbonate ai tuoi messaggi:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Non fai parte di alcun gruppo."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Non fai parte di questo gruppo:"
msgstr[1] "Non fai parte di questi gruppi:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5443,21 +5458,21 @@ msgstr ""
"tracks - non ancora implementato\n"
"tracking - non ancora implementato\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Non è stato trovato alcun file di configurazione. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "I file di configurazione sono stati cercati in questi posti: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
"Potrebbe essere necessario lanciare il programma d'installazione per "
"correggere il problema."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Vai al programma d'installazione."
@@ -5634,49 +5649,49 @@ msgstr "Etichette nei messaggi del gruppo %s"
msgid "This page is not available in a media type you accept"
msgstr "Questa pagina non è disponibile in un tipo di supporto che tu accetti"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato file immagine non supportato."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Quel file è troppo grande. La dimensione massima è %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Caricamento parziale."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Errore di sistema nel caricare il file."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Non è un'immagine o il file è danneggiato."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato file immagine non supportato."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Perso il nostro file."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tipo di file sconosciuto"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Sorgente casella in arrivo %d sconosciuta."
@@ -5957,7 +5972,7 @@ msgstr ""
"iniziare una conversazione con altri utenti. Altre persone possono mandare "
"messaggi riservati solamente a te."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "via"
@@ -6112,23 +6127,23 @@ msgstr "O"
msgid "at"
msgstr "presso"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "in una discussione"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Ripetuto da"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Rispondi a questo messaggio"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Rispondi"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Messaggio ripetuto"
@@ -6270,7 +6285,7 @@ msgstr "Ripeti questo messaggio"
msgid "Revoke the \"%s\" role from this user"
msgstr "Revoca il ruolo \"%s\" a questo utente"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Nessun utente singolo definito per la modalità single-user."
@@ -6396,89 +6411,93 @@ msgstr "Annulla l'abbonamento da questo utente"
msgid "Unsubscribe"
msgstr "Disabbonati"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Modifica immagine"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Azioni utente"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Modifica impostazioni del profilo"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Modifica"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Invia un messaggio diretto a questo utente"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Messaggio"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Modera"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Ruolo dell'utente"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Amministratore"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Moderatore"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "circa un anno fa"
@@ -6492,7 +6511,7 @@ msgstr "%s non è un colore valido."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s non è un colore valido. Usa 3 o 6 caratteri esadecimali."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Messaggio troppo lungo: massimo %1$d caratteri, inviati %2$d."
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index 847f24c59..85b83bfe9 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -11,12 +11,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:18+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:02+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
@@ -97,7 +97,7 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,10 +106,8 @@ msgstr "ãã®ã‚ˆã†ãªãƒšãƒ¼ã‚¸ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。"
@@ -206,14 +204,14 @@ msgstr "%2$s ã« %1$s ã¨å‹äººã‹ã‚‰ã®æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
@@ -226,8 +224,8 @@ msgstr "API メソッドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã¯ POST ãŒå¿…è¦ã§ã™ã€‚"
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "プロフィールをä¿å­˜ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -344,7 +342,7 @@ msgstr "ãã®ï¼©ï¼¤ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。"
msgid "This status is already a favorite."
msgstr "ã“ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã™ã§ã«ãŠæ°—ã«å…¥ã‚Šã§ã™ã€‚"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "ãŠæ°—ã«å…¥ã‚Šã‚’作æˆã§ãã¾ã›ã‚“。"
@@ -464,7 +462,7 @@ msgstr "グループãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“!"
msgid "You are already a member of that group."
msgstr "ã™ã§ã«ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã™ã€‚"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "管ç†è€…ã«ã‚ˆã£ã¦ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ãƒ–ロックã•ã‚Œã¦ã„ã¾ã™ã€‚"
@@ -514,7 +512,7 @@ msgstr "ä¸æ­£ãªãƒˆãƒ¼ã‚¯ãƒ³ã€‚"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -580,9 +578,9 @@ msgstr "アカウント"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "ニックãƒãƒ¼ãƒ "
@@ -651,12 +649,12 @@ msgstr "ã¤ã¶ã‚„ã㯠URL ã‚’å«ã‚ã¦æœ€å¤§ %d å­—ã¾ã§ã§ã™ã€‚"
msgid "Unsupported format."
msgstr "サãƒãƒ¼ãƒˆå¤–ã®å½¢å¼ã§ã™ã€‚"
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / %2$s ã‹ã‚‰ã®ãŠæ°—ã«å…¥ã‚Š"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s 㯠%2$s ã§ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°ã—ã¾ã—㟠/ %2$s。"
@@ -666,7 +664,7 @@ msgstr "%1$s 㯠%2$s ã§ãŠæ°—ã«å…¥ã‚Šã‚’æ›´æ–°ã—ã¾ã—㟠/ %2$s。"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / %2$s ã«ã¤ã„ã¦æ›´æ–°"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%2$s ã‹ã‚‰ã‚¢ãƒƒãƒ—デートã«ç­”ãˆã‚‹ %1$s アップデート"
@@ -676,7 +674,7 @@ msgstr "%2$s ã‹ã‚‰ã‚¢ãƒƒãƒ—デートã«ç­”ãˆã‚‹ %1$s アップデート"
msgid "%s public timeline"
msgstr "%s ã®ãƒ‘ブリックタイムライン"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "皆ã‹ã‚‰ã® %s アップデート!"
@@ -691,12 +689,12 @@ msgstr "%s ã¸ã®è¿”ä¿¡"
msgid "Repeats of %s"
msgstr "%s ã®è¿”ä¿¡"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "%s ã¨ã‚¿ã‚°ä»˜ã‘ã•ã‚ŒãŸã¤ã¶ã‚„ã"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s ã« %1$s ã«ã‚ˆã‚‹æ›´æ–°ãŒã‚ã‚Šã¾ã™ï¼"
@@ -724,7 +722,7 @@ msgstr "サイズãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Invalid size."
msgstr "ä¸æ­£ãªã‚µã‚¤ã‚ºã€‚"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "ã‚¢ãƒã‚¿ãƒ¼"
@@ -756,7 +754,7 @@ msgid "Preview"
msgstr "プレビュー"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "削除"
@@ -840,8 +838,8 @@ msgstr "ブロック情報ã®ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸã€‚"
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "ãã®ã‚ˆã†ãªã‚°ãƒ«ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -942,7 +940,7 @@ msgstr "ã“ã®ã‚¢ãƒ—リケーションã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "ã‚ãªãŸã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒˆãƒ¼ã‚¯ãƒ³ã«é–¢ã™ã‚‹å•é¡ŒãŒã‚ã‚Šã¾ã—ãŸã€‚"
@@ -1003,7 +1001,7 @@ msgstr "本当ã«ã“ã®ã¤ã¶ã‚„ãを削除ã—ã¾ã™ã‹ï¼Ÿ"
msgid "Do not delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除ã§ãã¾ã›ã‚“。"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãを削除"
@@ -1256,7 +1254,7 @@ msgstr "記述ãŒé•·ã™ãŽã¾ã™ã€‚(最長 %d 字)"
msgid "Could not update group."
msgstr "グループを更新ã§ãã¾ã›ã‚“。"
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "別åを作æˆã§ãã¾ã›ã‚“。"
@@ -1963,7 +1961,7 @@ msgstr "æ–°ã—ã„ユーザを招待"
msgid "You are already subscribed to these users:"
msgstr "ã™ã§ã«ã“れらã®ãƒ¦ãƒ¼ã‚¶ã‚’フォローã—ã¦ã„ã¾ã™:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2096,7 +2094,7 @@ msgstr "%1$s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %2$s ã«å‚加ã—ã¾ã—ãŸ"
msgid "You must be logged in to leave a group."
msgstr "グループã‹ã‚‰é›¢ã‚Œã‚‹ã«ã¯ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。"
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "ã‚ãªãŸã¯ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。"
@@ -2209,12 +2207,12 @@ msgstr "ã“ã®ãƒ•ã‚©ãƒ¼ãƒ ã‚’使ã£ã¦æ–°ã—ã„グループを作æˆã—ã¾ã™ã€‚
msgid "New message"
msgstr "æ–°ã—ã„メッセージ"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "ã“ã®ãƒ¦ãƒ¼ã‚¶ã«ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。"
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "コンテンツãŒã‚ã‚Šã¾ã›ã‚“ï¼"
@@ -2222,7 +2220,7 @@ msgstr "コンテンツãŒã‚ã‚Šã¾ã›ã‚“ï¼"
msgid "No recipient specified."
msgstr "å—å–人ãŒæ›¸ã‹ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2237,7 +2235,7 @@ msgstr "メッセージをé€ã‚Šã¾ã—ãŸ"
msgid "Direct message to %s sent."
msgstr "ダイレクトメッセージを %s ã«é€ã‚Šã¾ã—ãŸ"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax エラー"
@@ -2357,7 +2355,7 @@ msgstr "開発者ã¯å½¼ã‚‰ã®ã‚¢ãƒ—リケーションã®ãŸã‚ã«ç™»éŒ²è¨­å®šã‚’
msgid "Notice has no profile"
msgstr "ã¤ã¶ã‚„ãã«ã¯ãƒ—ロファイルã¯ã‚ã‚Šã¾ã›ã‚“。"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%2$s ã«ãŠã‘ã‚‹ %1$ ã®ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹"
@@ -2370,8 +2368,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr "ã ã‘ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„データ形å¼ã€‚"
@@ -2504,7 +2502,7 @@ msgstr "å¤ã„パスワードãŒé–“é•ã£ã¦ã„ã¾ã™ã€‚"
msgid "Error saving user; invalid."
msgstr "ユーザä¿å­˜ã‚¨ãƒ©ãƒ¼; ä¸æ­£ãªãƒ¦ãƒ¼ã‚¶"
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "æ–°ã—ã„パスワードをä¿å­˜ã§ãã¾ã›ã‚“。"
@@ -2718,8 +2716,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64文字ã®ã€å°æ–‡å­—アルファベットã‹æ•°å­—ã§ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚„å¥èª­ç‚¹ã¯é™¤ã"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "フルãƒãƒ¼ãƒ "
@@ -2746,9 +2744,9 @@ msgid "Bio"
msgstr "自己紹介"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "場所"
@@ -2762,7 +2760,7 @@ msgstr "ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã¨ãã«ã¯ç§ã®ç¾åœ¨ã®å ´æ‰€ã‚’共有ã—
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "ã‚¿ã‚°"
@@ -3005,7 +3003,7 @@ msgstr "パスワードをリセット"
msgid "Recover password"
msgstr "パスワードを回復"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "パスワード回復ãŒãƒªã‚¯ã‚¨ã‚¹ãƒˆã•ã‚Œã¾ã—ãŸ"
@@ -3025,41 +3023,41 @@ msgstr "リセット"
msgid "Enter a nickname or email address."
msgstr "ニックãƒãƒ¼ãƒ ã‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "ãã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‹ãƒ¦ãƒ¼ã‚¶åã‚’ã‚‚ã£ã¦ã„るユーザãŒã‚ã‚Šã¾ã›ã‚“。"
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "ãã®ãƒ¦ãƒ¼ã‚¶ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç™»éŒ²ãŒã‚ã‚Šã¾ã›ã‚“。"
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "アドレス確èªä¿å­˜ã‚¨ãƒ©ãƒ¼"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr "登録ã•ã‚ŒãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«ãƒ‘スワードã®å›žå¾©æ–¹æ³•ã‚’ãŠé€ã‚Šã—ã¾ã—ãŸã€‚"
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "予期ã›ã¬ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã§ã™ã€‚"
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "パスワードã¯6字以上ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。"
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "パスワードã¨ç¢ºèªãŒä¸€è‡´ã—ã¾ã›ã‚“。"
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "ユーザ設定エラー"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "æ–°ã—ã„パスワードã®ä¿å­˜ã«æˆåŠŸã—ã¾ã—ãŸã€‚ログインã—ã¦ã„ã¾ã™ã€‚"
@@ -3221,7 +3219,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "プロファイルサービスã¾ãŸã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ロギングサービスã®URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "フォロー"
@@ -3260,7 +3258,7 @@ msgstr "自分ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã›ã¾ã›ã‚“。"
msgid "You already repeated that notice."
msgstr "ã™ã§ã«ãã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¦ã„ã¾ã™ã€‚"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "ç¹°ã‚Šè¿”ã•ã‚ŒãŸ"
@@ -3405,7 +3403,7 @@ msgstr "組織"
msgid "Description"
msgstr "概è¦"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "統計データ"
@@ -3527,67 +3525,67 @@ msgstr "%s グループ"
msgid "%1$s group, page %2$d"
msgstr "%1$s グループã€ãƒšãƒ¼ã‚¸ %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "グループプロファイル"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "ノート"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "別å"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "グループアクション"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s グループã®ã¤ã¶ã‚„ãフィード (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "%s グループ㮠FOAF"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "メンãƒãƒ¼"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(ãªã—)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "å…¨ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "作æˆæ—¥"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3602,7 +3600,7 @@ msgstr ""
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚[今ã™ãå‚加](%%%%action.register%%%%) ã—ã¦ã“"
"ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ä¸€å“¡ã«ãªã‚Šã¾ã—ょã†! ([ã‚‚ã£ã¨èª­ã‚€](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3615,7 +3613,7 @@ msgstr ""
"wikipedia.org/wiki/Micro-blogging) サービス。メンãƒãƒ¼ã¯å½¼ã‚‰ã®æš®ã‚‰ã—ã¨èˆˆå‘³ã«é–¢"
"ã™ã‚‹çŸ­ã„メッセージを共有ã—ã¾ã™ã€‚"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "管ç†è€…"
@@ -4178,12 +4176,12 @@ msgstr "ID引数ãŒã‚ã‚Šã¾ã›ã‚“。"
msgid "Tag %s"
msgstr "ã‚¿ã‚° %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "ユーザプロファイル"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "写真"
@@ -4514,7 +4512,7 @@ msgstr "ãƒãƒ¼ã‚¸ãƒ§ãƒ³"
msgid "Author(s)"
msgstr "作者"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4524,13 +4522,13 @@ msgstr ""
"ファイル㯠%d ãƒã‚¤ãƒˆã§ã—ãŸã€‚よりå°ã•ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã‚’アップロードã™ã‚‹ã‚ˆã†ã«ã—ã¦"
"ãã ã•ã„。"
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"ã“ã‚Œã»ã©å¤§ãã„ファイルã¯ã‚ãªãŸã®%dãƒã‚¤ãƒˆã®ãƒ¦ãƒ¼ã‚¶å‰²å½“ã¦ã‚’超ãˆã¦ã„ã‚‹ã§ã—ょã†ã€‚"
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4570,26 +4568,26 @@ msgstr "メッセージを追加ã§ãã¾ã›ã‚“。"
msgid "Could not update message with new URI."
msgstr "æ–°ã—ã„URIã§ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’アップデートã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "ãƒãƒƒã‚·ãƒ¥ã‚¿ã‚°è¿½åŠ  DB エラー: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚é•·ã™ãŽã§ã™ã€‚"
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ã§ã™ã€‚"
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"多ã™ãŽã‚‹ã¤ã¶ã‚„ããŒé€Ÿã™ãŽã¾ã™; 数分間ã®ä¼‘ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†æŠ•ç¨¿ã—ã¦ãã ã•ã„。"
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4597,19 +4595,19 @@ msgstr ""
"多ã™ãŽã‚‹é‡è¤‡ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ãŒé€Ÿã™ãŽã¾ã™; 数分間休ã¿ã‚’å–ã£ã¦ã‹ã‚‰å†åº¦æŠ•ç¨¿ã—ã¦ãã ã•"
"ã„。"
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "ã‚ãªãŸã¯ã“ã®ã‚µã‚¤ãƒˆã§ã¤ã¶ã‚„ãを投稿ã™ã‚‹ã®ãŒç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚"
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "ã¤ã¶ã‚„ãã‚’ä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "グループå—信箱をä¿å­˜ã™ã‚‹éš›ã«å•é¡ŒãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4639,29 +4637,29 @@ msgstr "自己フォローを削除ã§ãã¾ã›ã‚“。"
msgid "Couldn't delete subscription OMB token."
msgstr "フォローを削除ã§ãã¾ã›ã‚“"
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "フォローを削除ã§ãã¾ã›ã‚“"
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "よã†ã“ã %1$sã€@%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "グループを作æˆã§ãã¾ã›ã‚“。"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "グループメンãƒãƒ¼ã‚·ãƒƒãƒ—をセットã§ãã¾ã›ã‚“。"
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "フォローをä¿å­˜ã§ãã¾ã›ã‚“。"
@@ -4883,7 +4881,7 @@ msgstr "ãƒãƒƒã‚¸"
msgid "StatusNet software license"
msgstr "StatusNet ソフトウェアライセンス"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4892,12 +4890,12 @@ msgstr ""
"**%%site.name%%** 㯠[%%site.broughtby%%](%%site.broughtbyurl%%) ãŒæä¾›ã™ã‚‹ãƒž"
"イクロブログサービスã§ã™ã€‚ "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ã¯ãƒžã‚¤ã‚¯ãƒ­ãƒ–ログサービスã§ã™ã€‚ "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4908,41 +4906,41 @@ msgstr ""
"ã„ã¦ã„ã¾ã™ã€‚ ライセンス [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)。"
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "サイト内容ライセンス"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "全㦠"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "ライセンス。"
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "ページ化"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "<<後"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "å‰>>"
@@ -4958,6 +4956,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5050,7 +5052,7 @@ msgstr ""
"APIリソースã¯èª­ã¿æ›¸ãアクセスãŒå¿…è¦ã§ã™ã€ã—ã‹ã—ã‚ãªãŸã¯èª­ã¿ã‚¢ã‚¯ã‚»ã‚¹ã—ã‹æŒã£ã¦"
"ã„ã¾ã›ã‚“。"
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5126,11 +5128,11 @@ msgstr "å–消ã—"
msgid "Attachments"
msgstr "添付"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "作者"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "プロãƒã‚¤ãƒ€"
@@ -5150,37 +5152,50 @@ msgstr "パスワード変更ã«å¤±æ•—ã—ã¾ã—ãŸ"
msgid "Password changing is not allowed"
msgstr "パスワード変更ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "コマンドçµæžœ"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "コマンド完了"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "コマンド失敗"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "ã™ã¿ã¾ã›ã‚“ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "ãã® ID ã«ã‚ˆã‚‹ã¤ã¶ã‚„ãã¯å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "ユーザã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "ユーザを更新ã§ãã¾ã›ã‚“"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "ユーザを更新ã§ãã¾ã›ã‚“"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "ã™ã¿ã¾ã›ã‚“ã€ã“ã®ã‚³ãƒžãƒ³ãƒ‰ã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "ãã‚Œã¯è‡ªåˆ†è‡ªèº«ã¸ã®åˆå›³ã§å¤šãã¯æ„味ãŒã‚ã‚Šã¾ã›ã‚“!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "%s ã¸åˆå›³ã‚’é€ã‚Šã¾ã—ãŸ"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5191,193 +5206,191 @@ msgstr ""
"フォローã•ã‚Œã¦ã„ã‚‹: %2$s\n"
"ã¤ã¶ã‚„ã: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "ãã® ID ã«ã‚ˆã‚‹ã¤ã¶ã‚„ãã¯å­˜åœ¨ã—ã¦ã„ã¾ã›ã‚“"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "ユーザã¯ã¾ã ã¤ã¶ã‚„ã„ã¦ã„ã¾ã›ã‚“"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "ãŠæ°—ã«å…¥ã‚Šã«ã•ã‚Œã¦ã„ã‚‹ã¤ã¶ã‚„ã。"
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "ã‚ãªãŸã¯æ—¢ã«ãã®ã‚°ãƒ«ãƒ¼ãƒ—ã«å‚加ã—ã¦ã„ã¾ã™ã€‚"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "ユーザ %s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã§ãã¾ã›ã‚“"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«å‚加ã—ã¾ã—ãŸ"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "ユーザ %s をグループ %s ã‹ã‚‰å‰Šé™¤ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s ã¯ã‚°ãƒ«ãƒ¼ãƒ— %s ã«æ®‹ã‚Šã¾ã—ãŸã€‚"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "フルãƒãƒ¼ãƒ ï¼š %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "場所: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "ホームページ: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "About: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "メッセージãŒé•·ã™ãŽã¾ã™ - 最大 %d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "ダイレクトメッセージを %s ã«é€ã‚Šã¾ã—ãŸ"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "ダイレクトメッセージé€ä¿¡ã‚¨ãƒ©ãƒ¼ã€‚"
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "自分ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™ã“ã¨ã¯ã§ãã¾ã›ã‚“"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "ã™ã§ã«ã“ã®ã¤ã¶ã‚„ãã¯ç¹°ã‚Šè¿”ã•ã‚Œã¦ã„ã¾ã™"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "%s ã‹ã‚‰ã¤ã¶ã‚„ããŒç¹°ã‚Šè¿”ã•ã‚Œã¦ã„ã¾ã™"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "ã¤ã¶ã‚„ãç¹°ã‚Šè¿”ã—エラー"
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "ã¤ã¶ã‚„ããŒé•·ã™ãŽã¾ã™ - 最大 %d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "%s ã¸è¿”ä¿¡ã‚’é€ã‚Šã¾ã—ãŸ"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "ã¤ã¶ã‚„ãä¿å­˜ã‚¨ãƒ©ãƒ¼ã€‚"
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "フォローã™ã‚‹ãƒ¦ãƒ¼ã‚¶ã®åå‰ã‚’指定ã—ã¦ãã ã•ã„"
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "ãã®ã‚ˆã†ãªãƒ¦ãƒ¼ã‚¶ã¯ã„ã¾ã›ã‚“。"
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "ã‚ãªãŸã¯ãã®ãƒ—ロファイルã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "%s をフォローã—ã¾ã—ãŸ"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "フォローをやã‚るユーザã®åå‰ã‚’指定ã—ã¦ãã ã•ã„"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "コマンドã¯ã¾ã å®Ÿè£…ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "通知オフ。"
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "通知をオフã§ãã¾ã›ã‚“。"
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "通知オン。"
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "通知をオンã§ãã¾ã›ã‚“。"
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "ログインコマンドãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "ã“ã®ãƒªãƒ³ã‚¯ã¯ã€ã‹ã¤ã¦ã ã‘使用å¯èƒ½ã§ã‚ã‚Šã€2分間ã ã‘良ã„ã§ã™: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "%s ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’ã‚„ã‚ã‚‹"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "ã‚ãªãŸã¯ã ã‚Œã«ã‚‚フォローã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ã‚ãªãŸã¯ã“ã®äººã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã¾ã™:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "誰もフォローã—ã¦ã„ã¾ã›ã‚“。"
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "ã“ã®äººã¯ã‚ãªãŸã«ãƒ•ã‚©ãƒ­ãƒ¼ã•ã‚Œã¦ã„ã‚‹:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "ã‚ãªãŸã¯ã©ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚‚ã‚ã‚Šã¾ã›ã‚“。"
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ã‚ãªãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5419,21 +5432,21 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "コンフィギュレーションファイルãŒã‚ã‚Šã¾ã›ã‚“。 "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "ç§ã¯ä»¥ä¸‹ã®å ´æ‰€ã§ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ãƒ•ã‚¡ã‚¤ãƒ«ã‚’探ã—ã¾ã—ãŸ: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
"ã‚ãªãŸã¯ã€ã“れを修ç†ã™ã‚‹ãŸã‚ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ©ã‚’å‹•ã‹ã—ãŸãŒã£ã¦ã„ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›"
"ん。"
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "インストーラã¸ã€‚"
@@ -5609,49 +5622,49 @@ msgstr "%s グループã®ã¤ã¶ã‚„ãã«ã‚ã‚‹ã‚¿ã‚°"
msgid "This page is not available in a media type you accept"
msgstr "ã“ã®ãƒšãƒ¼ã‚¸ã¯ã‚ãªãŸãŒæ‰¿èªã—ãŸãƒ¡ãƒ‡ã‚£ã‚¢ã‚¿ã‚¤ãƒ—ã§ã¯åˆ©ç”¨ã§ãã¾ã›ã‚“。"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "サãƒãƒ¼ãƒˆå¤–ã®ç”»åƒå½¢å¼ã§ã™ã€‚"
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "ファイルãŒå¤§ãã™ãŽã¾ã™ã€‚最大ファイルサイズ㯠%s 。"
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "ä¸å®Œå…¨ãªã‚¢ãƒƒãƒ—ロード。"
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "ファイルã®ã‚¢ãƒƒãƒ—ロードã§ã‚·ã‚¹ãƒ†ãƒ ã‚¨ãƒ©ãƒ¼"
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "ç”»åƒã§ã¯ãªã„ã‹ãƒ•ã‚¡ã‚¤ãƒ«ãŒç ´æã—ã¦ã„ã¾ã™ã€‚"
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "サãƒãƒ¼ãƒˆå¤–ã®ç”»åƒå½¢å¼ã§ã™ã€‚"
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "ファイルを紛失。"
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "ä¸æ˜Žãªãƒ•ã‚¡ã‚¤ãƒ«ã‚¿ã‚¤ãƒ—"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "ä¸æ˜Žãªå—ä¿¡ç®±ã®ã‚½ãƒ¼ã‚¹ %d。"
@@ -5931,7 +5944,7 @@ msgstr ""
"ã«å¼•ã込むプライベートメッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚人々ã¯ã‚ãªãŸã ã‘ã¸ã®"
"メッセージをé€ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "from"
@@ -6094,23 +6107,23 @@ msgstr "西"
msgid "at"
msgstr "at"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "ã“ã®ã¤ã¶ã‚„ãã¸è¿”ä¿¡"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "返信"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã—ã¾ã—ãŸ"
@@ -6252,7 +6265,7 @@ msgstr "ã“ã®ã¤ã¶ã‚„ãã‚’ç¹°ã‚Šè¿”ã™"
msgid "Revoke the \"%s\" role from this user"
msgstr "ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‹ã‚‰ã“ã®ãƒ¦ãƒ¼ã‚¶ã‚’ブロック"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "single-user モードã®ãŸã‚ã®ã‚·ãƒ³ã‚°ãƒ«ãƒ¦ãƒ¼ã‚¶ãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
@@ -6378,93 +6391,97 @@ msgstr "ã“ã®åˆ©ç”¨è€…ã‹ã‚‰ã®ãƒ•ã‚©ãƒ­ãƒ¼ã‚’解除ã™ã‚‹"
msgid "Unsubscribe"
msgstr "フォロー解除"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "ã‚¢ãƒã‚¿ãƒ¼ã‚’編集ã™ã‚‹"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "利用者アクション"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "プロファイル設定編集"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "編集"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "ã“ã®åˆ©ç”¨è€…ã«ãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é€ã‚‹"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "メッセージ"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
#, fuzzy
msgid "Moderate"
msgstr "管ç†"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "ユーザプロファイル"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "管ç†è€…"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "管ç†"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "数秒å‰"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "ç´„ 1 分å‰"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "ç´„ %d 分å‰"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "ç´„ 1 時間å‰"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "ç´„ %d 時間å‰"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "ç´„ 1 æ—¥å‰"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "ç´„ %d æ—¥å‰"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "ç´„ 1 ヵ月å‰"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "ç´„ %d ヵ月å‰"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "ç´„ 1 å¹´å‰"
@@ -6478,7 +6495,7 @@ msgstr "%sã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s ã¯æœ‰åŠ¹ãªè‰²ã§ã¯ã‚ã‚Šã¾ã›ã‚“! 3ã‹6ã®16進数を使ã£ã¦ãã ã•ã„。"
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "メッセージãŒé•·ã™ãŽã¾ã™ - 最大 %1$d å­—ã€ã‚ãªãŸãŒé€ã£ãŸã®ã¯ %2$d。"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index 69bf4efb9..41533a426 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: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:22+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:05+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
@@ -100,7 +100,7 @@ msgstr "그러한 태그가 없습니다."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -109,10 +109,8 @@ msgstr "그러한 태그가 없습니다."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "그러한 사용ìžëŠ” 없습니다."
@@ -204,14 +202,14 @@ msgstr "%1$s ë° %2$sì— ìžˆëŠ” ì¹œêµ¬ë“¤ì˜ ì—…ë°ì´íŠ¸!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
@@ -225,8 +223,8 @@ msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "ì´ ë©”ì„œë“œëŠ” 등ë¡ì„ 요구합니다."
@@ -257,7 +255,7 @@ msgid "Could not save profile."
msgstr "í”„ë¡œí•„ì„ ì €ìž¥ í•  수 없습니다."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -345,7 +343,7 @@ msgstr "ê·¸ IDë¡œ ë°œê²¬ëœ ìƒíƒœê°€ 없습니다."
msgid "This status is already a favorite."
msgstr "ì´ ê²Œì‹œê¸€ì€ ì´ë¯¸ 좋아하는 게시글입니다."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다."
@@ -471,7 +469,7 @@ msgstr "API 메서드를 ì°¾ì„ ìˆ˜ 없습니다."
msgid "You are already a member of that group."
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ê·¸ë£¹ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -523,7 +521,7 @@ msgstr "옳지 ì•Šì€ í¬ê¸°"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -590,9 +588,9 @@ msgstr "계정"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "별명"
@@ -666,12 +664,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / %sì˜ ì¢‹ì•„í•˜ëŠ” 글들"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 좋아하는 ê¸€ì´ ì—…ë°ì´íŠ¸ ë습니다. %Sì— ì˜í•´ / %s."
@@ -681,7 +679,7 @@ msgstr "%s 좋아하는 ê¸€ì´ ì—…ë°ì´íŠ¸ ë습니다. %Sì— ì˜í•´ / %s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / %2$sì—게 답신 ì—…ë°ì´íŠ¸"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$së‹˜ì´ %2$s/%3$sì˜ ì—…ë°ì´íŠ¸ì— 답변했습니다."
@@ -691,7 +689,7 @@ msgstr "%1$së‹˜ì´ %2$s/%3$sì˜ ì—…ë°ì´íŠ¸ì— 답변했습니다."
msgid "%s public timeline"
msgstr "%s 공개 타임ë¼ì¸"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "모ë‘ë¡œë¶€í„°ì˜ ì—…ë°ì´íŠ¸ %sê°œ!"
@@ -706,12 +704,12 @@ msgstr "%sì— ë‹µì‹ "
msgid "Repeats of %s"
msgstr "%sì— ë‹µì‹ "
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "%s íƒœê·¸ëœ í†µì§€"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$sì— ìžˆëŠ” %1$sì˜ ì—…ë°ì´íŠ¸!"
@@ -740,7 +738,7 @@ msgstr "사ì´ì¦ˆê°€ 없습니다."
msgid "Invalid size."
msgstr "옳지 ì•Šì€ í¬ê¸°"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "아바타"
@@ -772,7 +770,7 @@ msgid "Preview"
msgstr "미리보기"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "삭제"
@@ -855,8 +853,8 @@ msgstr "ì •ë³´ì°¨ë‹¨ì„ ì €ìž¥í•˜ëŠ”ë° ì‹¤íŒ¨í–ˆìŠµë‹ˆë‹¤."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "그러한 ê·¸ë£¹ì´ ì—†ìŠµë‹ˆë‹¤."
@@ -965,7 +963,7 @@ msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "ë‹¹ì‹ ì˜ ì„¸ì…˜í† í°ê´€ë ¨ 문제가 있습니다."
@@ -1027,7 +1025,7 @@ msgstr "ì •ë§ë¡œ 통지를 삭제하시겠습니까?"
msgid "Do not delete this notice"
msgstr "ì´ í†µì§€ë¥¼ 지울 수 없습니다."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
@@ -1302,7 +1300,7 @@ msgstr "ì„¤ëª…ì´ ë„ˆë¬´ 길어요. (최대 140글ìž)"
msgid "Could not update group."
msgstr "ê·¸ë£¹ì„ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "좋아하는 ê²Œì‹œê¸€ì„ ìƒì„±í•  수 없습니다."
@@ -2015,7 +2013,7 @@ msgstr "새 사용ìžë¥¼ 초대"
msgid "You are already subscribed to these users:"
msgstr "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다."
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2140,7 +2138,7 @@ msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤."
msgid "You must be logged in to leave a group."
msgstr "ê·¸ë£¹ì„ ë– ë‚˜ê¸° 위해서는 로그ì¸í•´ì•¼ 합니다."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
@@ -2258,12 +2256,12 @@ msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ê¸° 위해 ì´ ì–‘ì‹ì„ 사용하세요."
msgid "New message"
msgstr "새로운 메시지입니다."
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "ë‹¹ì‹ ì€ ì´ ì‚¬ìš©ìžì—게 메시지를 보낼 수 없습니다."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!"
@@ -2271,7 +2269,7 @@ msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!"
msgid "No recipient specified."
msgstr "수신ìžë¥¼ 지정하지 않았습니다."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2287,7 +2285,7 @@ msgstr "메시지"
msgid "Direct message to %s sent."
msgstr "%sì—게 보낸 ì§ì ‘ 메시지"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax ì—러입니다."
@@ -2404,7 +2402,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "í†µì§€ì— í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤."
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$sì˜ ìƒíƒœ (%2$sì—ì„œ)"
@@ -2418,8 +2416,8 @@ msgstr "ì—°ê²°"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "지ì›í•˜ëŠ” 형ì‹ì˜ ë°ì´í„°ê°€ 아닙니다."
@@ -2557,7 +2555,7 @@ msgstr "기존 비밀 번호가 틀렸습니다"
msgid "Error saving user; invalid."
msgstr "ì‚¬ìš©ìž ì €ìž¥ 오류; 무효한 사용ìž"
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "새 비밀번호를 저장 할 수 없습니다."
@@ -2782,8 +2780,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64ìž ì‚¬ì´ì— ì˜ì†Œë¬¸ìž, 숫ìžë¡œë§Œ ì”니다. 기호나 ê³µë°±ì„ ì“°ë©´ 안 ë©ë‹ˆë‹¤."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "실명"
@@ -2811,9 +2809,9 @@ msgid "Bio"
msgstr "ìžê¸°ì†Œê°œ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "위치"
@@ -2827,7 +2825,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "태그"
@@ -3057,7 +3055,7 @@ msgstr "비밀 번호 초기화"
msgid "Recover password"
msgstr "비밀 번호 복구"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "비밀 번호 복구가 요청ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -3077,41 +3075,41 @@ msgstr "초기화"
msgid "Enter a nickname or email address."
msgstr "별명ì´ë‚˜ ì´ë©”ì¼ ê³„ì •ì„ ìž…ë ¥í•˜ì‹­ì‹œì˜¤."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "그러한 ì´ë©”ì¼ ì£¼ì†Œë‚˜ ê³„ì •ì„ ê°€ì§„ 사용ìžëŠ” 없습니다."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "ê·¸ 사용ìžëŠ” 등ë¡ëœ ë©”ì¼ì£¼ì†Œê°€ 없습니다."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "주소 í™•ì¸ ì €ìž¥ ì—러"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr "가입하신 ì´ë©”ì¼ë¡œ 비밀 번호 ìž¬ë°œê¸‰ì— ê´€í•œ 안내를 보냈습니다."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "ìž˜ëª»ëœ ë¹„ë°€ 번호 지정"
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "비밀 번호는 6ìž ì´ìƒì´ì–´ì•¼ 합니다."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "비밀 번호가 ì¼ì¹˜í•˜ì§€ 않습니다."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "ì‚¬ìš©ìž ì„¸íŒ… 오류"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
"새로운 비밀 번호를 성공ì ìœ¼ë¡œ 저장했습니다. 귀하는 ì´ì œ ë¡œê·¸ì¸ ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -3275,7 +3273,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "다른 마ì´í¬ë¡œë¸”로깅 ì„œë¹„ìŠ¤ì˜ ê·€í•˜ì˜ í”„ë¡œí•„ URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "구ë…"
@@ -3318,7 +3316,7 @@ msgstr "ë¼ì´ì„ ìŠ¤ì— ë™ì˜í•˜ì§€ 않는다면 등ë¡í•  수 없습니다."
msgid "You already repeated that notice."
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ì‚¬ìš©ìžë¥¼ 차단하고 있습니다."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "ìƒì„±"
@@ -3467,7 +3465,7 @@ msgstr "페ì´ì§€ìˆ˜"
msgid "Description"
msgstr "설명"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "통계"
@@ -3579,68 +3577,68 @@ msgstr "%s 그룹"
msgid "%1$s group, page %2$d"
msgstr "%s 그룹 회ì›, %d페ì´ì§€"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "그룹 프로필"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "설명"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "그룹 í–‰ë™"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s ê·¸ë£¹ì„ ìœ„í•œ 공지피드"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "%sì˜ ë³´ë‚¸ìª½ì§€í•¨"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "회ì›"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(없습니다.)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "모든 회ì›"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "ìƒì„±"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3650,7 +3648,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3661,7 +3659,7 @@ msgstr ""
"**%s** 는 %%%%site.name%%%% [마ì´í¬ë¡œë¸”로깅)(http://en.wikipedia.org/wiki/"
"Micro-blogging)ì˜ ì‚¬ìš©ìž ê·¸ë£¹ìž…ë‹ˆë‹¤. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
#, fuzzy
msgid "Admins"
msgstr "관리ìž"
@@ -4208,12 +4206,12 @@ msgstr "id ì¸ìžê°€ 없습니다."
msgid "Tag %s"
msgstr "태그 %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "ì´ìš©ìž 프로필"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "사진"
@@ -4551,19 +4549,19 @@ msgstr "ê°œì¸ì ì¸"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4606,28 +4604,28 @@ msgstr "메시지를 삽입할 수 없습니다."
msgid "Could not update message with new URI."
msgstr "새 URI와 함께 메시지를 ì—…ë°ì´íŠ¸í•  수 없습니다."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "해쉬테그를 추가 í•  ë•Œì— ë°ì´íƒ€ë² ì´ìŠ¤ ì—러 : %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "게시글 저장문제. ì•Œë ¤ì§€ì§€ì•Šì€ íšŒì›"
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4636,20 +4634,20 @@ msgstr ""
"너무 ë§Žì€ ê²Œì‹œê¸€ì´ ë„ˆë¬´ 빠르게 올ë¼ì˜µë‹ˆë‹¤. 한숨고르고 ëª‡ë¶„í›„ì— ë‹¤ì‹œ í¬ìŠ¤íŠ¸ë¥¼ "
"해보세요."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "ì´ ì‚¬ì´íŠ¸ì— 게시글 í¬ìŠ¤íŒ…으로부터 ë‹¹ì‹ ì€ ê¸ˆì§€ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4682,29 +4680,29 @@ msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
msgid "Couldn't delete subscription OMB token."
msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "예약 구ë…ì„ ì‚­ì œ í•  수 없습니다."
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%2$sì—ì„œ %1$s까지 메시지"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "새 ê·¸ë£¹ì„ ë§Œë“¤ 수 없습니다."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "그룹 ë§´ë²„ì‹­ì„ ì„¸íŒ…í•  수 없습니다."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "구ë…ì„ ì €ìž¥í•  수 없습니다."
@@ -4928,7 +4926,7 @@ msgstr "찔러 보기"
msgid "StatusNet software license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4937,12 +4935,12 @@ msgstr ""
"**%%site.name%%** 는 [%%site.broughtby%%](%%site.broughtbyurl%%)가 제공하는 "
"마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 는 마ì´í¬ë¡œë¸”로깅서비스입니다."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4953,42 +4951,42 @@ msgstr ""
"ì„ ì‚¬ìš©í•©ë‹ˆë‹¤. StatusNet는 [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html) ë¼ì´ì„ ìŠ¤ì— ë”°ë¼ ì‚¬ìš©í•  수 있습니다."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "ë¼ì½”니카 소프트웨어 ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "모든 것"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "ë¼ì´ì„ ìŠ¤"
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "페ì´ì§€ìˆ˜"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "ë’· 페ì´ì§€"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "ì•ž 페ì´ì§€"
@@ -5004,6 +5002,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5105,7 +5107,7 @@ msgstr "SMS ì¸ì¦"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5184,11 +5186,11 @@ msgstr "삭제"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "프로필"
@@ -5211,37 +5213,51 @@ msgstr "비밀번호 변경"
msgid "Password changing is not allowed"
msgstr "비밀번호 변경"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "실행결과"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "실행 완료"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "실행 실패"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "죄송합니다. ì´ ëª…ë ¹ì€ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "해당 idì˜ í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "ì´ìš©ìžì˜ 지ì†ì ì¸ ê²Œì‹œê¸€ì´ ì—†ìŠµë‹ˆë‹¤."
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "ì´ ì´ë©”ì¼ ì£¼ì†Œë¡œ 사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "ì´ ì´ë©”ì¼ ì£¼ì†Œë¡œ 사용ìžë¥¼ ì—…ë°ì´íŠ¸ í•  수 없습니다."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "죄송합니다. ì´ ëª…ë ¹ì€ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "찔러 보기를 보냈습니다."
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5249,200 +5265,198 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "해당 idì˜ í”„ë¡œí•„ì´ ì—†ìŠµë‹ˆë‹¤."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "ì´ìš©ìžì˜ 지ì†ì ì¸ ê²Œì‹œê¸€ì´ ì—†ìŠµë‹ˆë‹¤."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "ê²Œì‹œê¸€ì´ ì¢‹ì•„í•˜ëŠ” 글로 지정ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "ë‹¹ì‹ ì€ ì´ë¯¸ ì´ ê·¸ë£¹ì˜ ë©¤ë²„ìž…ë‹ˆë‹¤."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "그룹 %sì— %s는 가입할 수 없습니다."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s 는 그룹 %sì— ê°€ìž…í–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "그룹 %sì—ì„œ %s 사용ìžë¥¼ 제거할 수 없습니다."
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s가 그룹%s를 떠났습니다."
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "ì „ì²´ì´ë¦„: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "위치: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "홈페ì´ì§€: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "ìžê¸°ì†Œê°œ: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다."
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "%sì—게 보낸 ì§ì ‘ 메시지"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "ì§ì ‘ 메시지 보내기 오류."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "ì´ ê²Œì‹œê¸€ 삭제하기"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다."
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "통지를 ì €ìž¥í•˜ëŠ”ë° ë¬¸ì œê°€ ë°œìƒí–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "구ë…하려는 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤."
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "그러한 사용ìžëŠ” 없습니다."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "%sì—게 구ë…ë˜ì—ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "구ë…ì„ í•´ì œí•˜ë ¤ëŠ” 사용ìžì˜ ì´ë¦„ì„ ì§€ì •í•˜ì‹­ì‹œì˜¤."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "ëª…ë ¹ì´ ì•„ì§ ì‹¤í–‰ë˜ì§€ 않았습니다."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "알림ë„기."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "ì•Œë¦¼ì„ ëŒ ìˆ˜ 없습니다."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "ì•Œë¦¼ì´ ì¼œì¡ŒìŠµë‹ˆë‹¤."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "ì•Œë¦¼ì„ ì¼¤ 수 없습니다."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "%sì—ì„œ 구ë…ì„ í•´ì œí–ˆìŠµë‹ˆë‹¤."
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "ë‹¹ì‹ ì€ ì´ í”„ë¡œí•„ì— êµ¬ë…ë˜ì§€ 않고있습니다."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "ë‹¹ì‹ ì€ ë‹¤ìŒ ì‚¬ìš©ìžë¥¼ ì´ë¯¸ 구ë…하고 있습니다."
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "다른 ì‚¬ëžŒì„ êµ¬ë… í•˜ì‹¤ 수 없습니다."
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "ë‹¹ì‹ ì€ í•´ë‹¹ ê·¸ë£¹ì˜ ë©¤ë²„ê°€ 아닙니다."
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5484,20 +5498,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "í™•ì¸ ì½”ë“œê°€ 없습니다."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "ì´ ì‚¬ì´íŠ¸ 로그ì¸"
@@ -5678,49 +5692,49 @@ msgstr "%s 그룹 ê²Œì‹œê¸€ì˜ íƒœê·¸"
msgid "This page is not available in a media type you accept"
msgstr "ì´ íŽ˜ì´ì§€ëŠ” 귀하가 승ì¸í•œ 미디어 타입ì—서는 ì´ìš©í•  수 없습니다."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "ë‹¹ì‹ ê·¸ë£¹ì˜ ë¡œê³  ì´ë¯¸ì§€ë¥¼ 업로드할 수 있습니다."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "불완전한 업로드."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "파ì¼ì„ ì˜¬ë¦¬ëŠ”ë° ì‹œìŠ¤í…œ 오류 ë°œìƒ"
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "그림 파ì¼ì´ 아니거나 ì†ìƒëœ íŒŒì¼ ìž…ë‹ˆë‹¤."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "지ì›í•˜ì§€ 않는 그림 íŒŒì¼ í˜•ì‹ìž…니다."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "파ì¼ì„ 잃어버렸습니다."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "ì•Œ 수 없는 ì¢…ë¥˜ì˜ íŒŒì¼ìž…니다"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5923,7 +5937,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr "다ìŒì—ì„œ:"
@@ -6079,25 +6093,25 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "ë‚´ìš©ì´ ì—†ìŠµë‹ˆë‹¤!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "ìƒì„±"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "답장하기"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "ê²Œì‹œê¸€ì´ ë“±ë¡ë˜ì—ˆìŠµë‹ˆë‹¤."
@@ -6246,7 +6260,7 @@ msgstr "ì´ ê²Œì‹œê¸€ì— ëŒ€í•´ 답장하기"
msgid "Revoke the \"%s\" role from this user"
msgstr "ì´ ê·¸ë£¹ì˜ íšŒì›ë¦¬ìŠ¤íŠ¸"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6380,93 +6394,97 @@ msgstr "ì´ ì‚¬ìš©ìžë¡œë¶€í„° 구ë…취소합니다."
msgid "Unsubscribe"
msgstr "êµ¬ë… í•´ì œ"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "아바타"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "ì‚¬ìš©ìž ë™ìž‘"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "프로필 세팅"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "ì´ íšŒì›ì—게 ì§ì ‘ 메시지를 보냅니다."
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "메시지"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "ì´ìš©ìž 프로필"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "관리ìž"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "몇 초 전"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "%dì¼ ì „"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "1ë…„ ì „"
@@ -6480,7 +6498,7 @@ msgstr "홈페ì´ì§€ 주소형ì‹ì´ 올바르지 않습니다."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "ë‹¹ì‹ ì´ ë³´ë‚¸ 메시지가 너무 길어요. 최대 140글ìžê¹Œì§€ìž…니다."
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index 74b9cb228..764a91b15 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:24+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:08+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
@@ -95,7 +95,7 @@ msgstr "Ðема таква Ñтраница"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -104,10 +104,8 @@ msgstr "Ðема таква Ñтраница"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Ðема таков кориÑник."
@@ -207,14 +205,14 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API методот не е пронајден."
@@ -227,8 +225,8 @@ msgstr "API методот не е пронајден."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Овој метод бара POST."
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "Ðе може да Ñе зачува профил."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "Ðема пронајдено ÑÑ‚Ð°Ñ‚ÑƒÑ Ñо таков ID."
msgid "This status is already a favorite."
msgstr "Овој ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²ÐµÑœÐµ Ви е омилен."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Ðе можам да Ñоздадам омилина забелешка."
@@ -465,7 +463,7 @@ msgstr "Групата не е пронајдена!"
msgid "You are already a member of that group."
msgstr "Веќе членувате во таа група."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Блокирани Ñте од таа група од админиÑтраторот."
@@ -515,7 +513,7 @@ msgstr "Погрешен жетон."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -584,9 +582,9 @@ msgstr "Сметка"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Прекар"
@@ -657,12 +655,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Ðеподдржан формат."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Омилени од %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Подновувања на %1$s омилени на %2$s / %2$s."
@@ -672,7 +670,7 @@ msgstr "Подновувања на %1$s омилени на %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Подновувања кои Ñпоменуваат %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s подновувања коишто Ñе одговор на подновувањата од %2$s / %3$s."
@@ -682,7 +680,7 @@ msgstr "%1$s подновувања коишто Ñе одговор на под
msgid "%s public timeline"
msgstr "Јавна иÑторија на %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s подновуввања од Ñите!"
@@ -697,12 +695,12 @@ msgstr "Повторено за %s"
msgid "Repeats of %s"
msgstr "Повторувања на %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Забелешки означени Ñо %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Подновувањата Ñе означени Ñо %1$s на %2$s!"
@@ -730,7 +728,7 @@ msgstr "Ðема големина."
msgid "Invalid size."
msgstr "Погрешна големина."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватар"
@@ -764,7 +762,7 @@ msgid "Preview"
msgstr "Преглед"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Бриши"
@@ -848,8 +846,8 @@ msgstr "Ðе можев да ги Ñнимам инофрмациите за бÐ
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Ðема таква група."
@@ -950,7 +948,7 @@ msgstr "Ðе Ñте ÑопÑтвеник на овој програм."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Се појави проблем Ñо Вашиот ÑеÑиÑки жетон."
@@ -1011,7 +1009,7 @@ msgstr "Дали Ñте Ñигурни дека Ñакате да ја избрÐ
msgid "Do not delete this notice"
msgstr "Ðе ја бриши оваа забелешка"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Бриши ја оваа забелешка"
@@ -1264,7 +1262,7 @@ msgstr "опиÑот е предолг (макÑимум %d знаци)"
msgid "Could not update group."
msgstr "Ðе можев да ја подновам групата."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Ðе можеше да Ñе Ñоздадат алијаÑи."
@@ -1568,11 +1566,11 @@ msgstr "Ðе можев да ги претворам жетоните за баÑ
#: actions/finishremotesubscribe.php:118
msgid "Remote service uses unknown version of OMB protocol."
-msgstr "Оддалечената Ñлужба кориÑти непозната верзија на OMB протокол."
+msgstr "ДалечинÑката Ñлужба кориÑти непозната верзија на OMB протокол."
#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
msgid "Error updating remote profile"
-msgstr "Грешка во подновувањето на оддалечениот профил"
+msgstr "Грешка во подновувањето на далечинÑкиот профил"
#: actions/getfile.php:79
msgid "No such file."
@@ -1973,7 +1971,7 @@ msgstr "Покани нови кориÑници"
msgid "You are already subscribed to these users:"
msgstr "Веќе Ñте претплатени на овие кориÑници:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2104,7 +2102,7 @@ msgstr "%1$s Ñе зачлени во групата %2$s"
msgid "You must be logged in to leave a group."
msgstr "Мора да Ñте најавени за да можете да ја напуштите групата."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Ðе членувате во таа група."
@@ -2219,12 +2217,12 @@ msgstr "Овој образец Ñлужи за Ñоздавање нова гр
msgid "New message"
msgstr "Ðова порака"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Ðе можете да иÑпратите порака до овојо кориÑник."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ðема Ñодржина!"
@@ -2232,7 +2230,7 @@ msgstr "Ðема Ñодржина!"
msgid "No recipient specified."
msgstr "Ðема назначено примач."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2248,7 +2246,7 @@ msgstr "Пораката е иÑпратена"
msgid "Direct message to %s sent."
msgstr "Директната порака до %s е иÑпратена."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax-грешка"
@@ -2369,7 +2367,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Забелешката нема профил"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° %2$s"
@@ -2382,8 +2380,8 @@ msgstr "тип на Ñодржини "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Ова не е поддржан формат на податотека."
@@ -2516,7 +2514,7 @@ msgstr "Ðеточна Ñтара лозинка"
msgid "Error saving user; invalid."
msgstr "Грешка во зачувувањето на кориÑникот; неправилен."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Ðе можам да ја зачувам новата лозинка."
@@ -2732,8 +2730,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 мали букви или бројки. Без интерпукциÑки знаци и празни меÑта."
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Цело име"
@@ -2760,9 +2758,9 @@ msgid "Bio"
msgstr "Биографија"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Локација"
@@ -2776,7 +2774,7 @@ msgstr "Сподели ја мојата тековна локација при
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Ознаки"
@@ -3021,7 +3019,7 @@ msgstr "РеÑтетирај ја лозинката"
msgid "Recover password"
msgstr "Пронаоѓање на лозинка"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Побарано е пронаоѓање на лозинката"
@@ -3041,19 +3039,19 @@ msgstr "Врати одново"
msgid "Enter a nickname or email address."
msgstr "ВнеÑете прекар или е-пошта"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Ðема кориÑник Ñо таа е-поштенÑка адреÑа или кориÑничко име."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ðема региÑтрирана адреÑа за е-пошта за тој кориÑник."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Грешка при зачувувањето на потврдата за адреÑа."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3061,23 +3059,23 @@ msgstr ""
"УпатÑтвото за пронаоѓање на Вашата лозинка е иÑпратено до адреÑата за е-"
"пошта што е региÑтрирана Ñо Вашата Ñметка."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Ðеочекувано подновување на лозинката."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Лозинката мора да биде од најмалку 6 знаци."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Двете лозинки не Ñе Ñовпаѓаат."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Грешка во поÑтавувањето на кориÑникот."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Ðовата лозинка е уÑпешно зачувана. Сега Ñте најавени."
@@ -3224,7 +3222,7 @@ msgstr "Оддалечена претплата"
#: actions/remotesubscribe.php:124
msgid "Subscribe to a remote user"
-msgstr "Претплати Ñе на оддалечен кориÑник"
+msgstr "Претплати Ñе на далечинÑки кориÑник"
#: actions/remotesubscribe.php:129
msgid "User nickname"
@@ -3243,7 +3241,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL на Вашиот профил на друга компатибилна Ñлужба за микроблогирање."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Претплати Ñе"
@@ -3281,7 +3279,7 @@ msgstr "Ðе можете да повторувате ÑопÑтвена забÐ
msgid "You already repeated that notice."
msgstr "Веќе ја имате повторено таа забелешка."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Повторено"
@@ -3424,7 +3422,7 @@ msgstr "Организација"
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтики"
@@ -3547,67 +3545,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Група %1$s, ÑÑ‚Ñ€. %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Профил на група"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Забелешка"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ÐлијаÑи"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Групни дејÑтва"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Канал Ñо забелешки за групата %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Канал Ñо забелешки за групата %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Канал Ñо забелешки за групата%s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF за групата %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Членови"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ðема)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Сите членови"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Создадено"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3623,7 +3621,7 @@ msgstr ""
"Ñе](%%%%action.register%%%%) за да Ñтанете дел од оваа група и многу повеќе! "
"([Прочитајте повеќе](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3636,7 +3634,7 @@ msgstr ""
"Ñлободната програмÑка алатка [StatusNet](http://status.net/). Ðејзините "
"членови Ñи разменуваат кратки пораки за нивниот живот и интереÑи. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "ÐдминиÑтратори"
@@ -4067,7 +4065,7 @@ msgstr "Ðема таков профил."
#: actions/subscribe.php:117
msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
msgstr ""
-"Ðе можете да Ñе претплатите на OMB 0.1 оддалечен профил Ñо ова дејÑтво."
+"Ðе можете да Ñе претплатите на OMB 0.1 далечинÑки профил Ñо ова дејÑтво."
#: actions/subscribe.php:145
msgid "Subscribed"
@@ -4190,12 +4188,12 @@ msgstr "Ðема ID-аргумент."
msgid "Tag %s"
msgstr "Означи %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "КориÑнички профил"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Фото"
@@ -4538,7 +4536,7 @@ msgstr "Верзија"
msgid "Author(s)"
msgstr "Ðвтор(и)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4547,13 +4545,13 @@ msgstr ""
"Ðиедна податотека не Ñмее да биде поголема од %d бајти, а подаотеката што ја "
"иÑпративте Ñодржи %d бајти. Подигнете помала верзија."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Волку голема податотека ќе ја надмине Вашата кориÑничка квота од %d бајти."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "ВОлку голема податотека ќе ја надмине Вашата меÑечна квота од %d бајти"
@@ -4591,27 +4589,27 @@ msgstr "Ðе можев да ја иÑпратам пораката."
msgid "Could not update message with new URI."
msgstr "Ðе можев да ја подновам пораката Ñо нов URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознака: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Проблем Ñо зачувувањето на белешката. Премногу долго."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Проблем Ñо зачувувањето на белешката. Ðепознат кориÑник."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Премногу забелњшки за прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4619,19 +4617,19 @@ msgstr ""
"Премногу дуплирани пораки во прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Забрането Ви е да објавувате забелешки на оваа веб-Ñтраница."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Проблем во зачувувањето на белешката."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Проблем при зачувувањето на групното приемно Ñандаче."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4661,28 +4659,28 @@ msgstr "Ðе можам да ја избришам ÑамопретплататÐ
msgid "Couldn't delete subscription OMB token."
msgstr "Ðе можете да го избришете OMB-жетонот за претплата."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Претплата не може да Ñе избрише."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добредојдовте на %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Ðе можев да ја Ñоздадам групата."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Ðе можев да поÑтавам URI на групата."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Ðе можев да назначам членÑтво во групата."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Ðе можев да ги зачувам информациите за локалните групи."
@@ -4886,7 +4884,7 @@ msgstr "Значка"
msgid "StatusNet software license"
msgstr "Лиценца на програмот StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4895,12 +4893,12 @@ msgstr ""
"**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање што ви го овозможува [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е ÑÐµÑ€Ð²Ð¸Ñ Ð·Ð° микроблогирање."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4911,51 +4909,51 @@ msgstr ""
"верзија %s, доÑтапен пд [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Лиценца на Ñодржините на веб-Ñтраницата"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содржината и податоците на %1$s Ñе лични и доверливи."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"ÐвторÑките права на Ñодржината и податоците Ñе во ÑопÑтвеноÑÑ‚ на %1$s. Сите "
"права задржани."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑките права на Ñодржината и податоците им припаѓаат на учеÑниците. Сите "
"права задржани."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Сите "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "лиценца."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Прелом на Ñтраници"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "По"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Пред"
#: lib/activity.php:453
msgid "Can't handle remote content yet."
-msgstr "Сè уште не е поддржана обработката на оддалечена Ñодржина."
+msgstr "Сè уште не е поддржана обработката на далечинÑка Ñодржина."
#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
@@ -4965,6 +4963,10 @@ msgstr "Сè уште не е поддржана обработката на XML
msgid "Can't handle embedded Base64 content yet."
msgstr "Сè уште не е доÑтапна обработката на вметната Base64 Ñодржина."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5053,7 +5055,7 @@ msgstr ""
"API-реÑурÑот бара да може и да чита и да запишува, а вие можете Ñамо да "
"читате."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr "ÐеуÑпешен обид за API-заверка, прекар = %1$s, прокÑи = %2$s, IP = %3$s"
@@ -5128,11 +5130,11 @@ msgstr "Одземи"
msgid "Attachments"
msgstr "Прилози"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Ðвтор"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Обезбедувач"
@@ -5152,37 +5154,50 @@ msgstr "Менувањето на лозинката не уÑпеа"
msgid "Password changing is not allowed"
msgstr "Менувањето на лозинка не е дозволено"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Резултати од наредбата"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Ðаредбата е завршена"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Ðаредбата не уÑпеа"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Жалиме, оваа наредба Ñè уште не е имплементирана."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Ðе поÑтои забелешка Ñо таков id"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "КориÑникот нема поÑледна забелешка"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Ðе можев да пронајдам кориÑник Ñо прекар %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Ðе можев да пронајдам локален кориÑник Ñо прекар %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Жалиме, оваа наредба Ñè уште не е имплементирана."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Ðема баш логика да Ñе подбуцнувате Ñами ÑебеÑи."
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "ИÑпратено подбуцнување на %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5193,198 +5208,198 @@ msgstr ""
"Претплатници: %2$s\n"
"Забелешки: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Ðе поÑтои забелешка Ñо таков id"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "КориÑникот нема поÑледна забелешка"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Забелешката е обележана како омилена."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Веќе членувате во таа група"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Ðе можев да го зачленам кориÑникот %s во групата %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s Ñе зачлени во групата %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Ðе можев да го отÑтранам кориÑникот %s од групата %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s ја напушти групата %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Име и презиме: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Локација: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Домашна Ñтраница: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "За: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s е далечинÑки профил; можете да праќате директни пораки Ñамо до кориÑници "
+"на иÑтиот Ñервер."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"Пораката е предолга - дозволени Ñе највеќе %d знаци, а вие иÑпративте %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Директната порака до %s е иÑпратена"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Грашка при иÑпаќањето на директната порака."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Ðе можете да повторувате ÑопÑтвени забалешки"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Оваа забелешка е веќе повторена"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Забелешката од %s е повторена"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Грешка при повторувањето на белешката."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"Забелешката е предолга - треба да нема повеќе од %d знаци, а Вие иÑпративте %"
"d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Одговорот на %s е иÑпратен"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Грешка при зачувувањето на белешката."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Ðазначете го името на кориÑникот на којшто Ñакате да Ñе претплатите"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Ðема таков кориÑник"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Ðе можете да Ñе претплаќате на OMB профили по наредба."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Претплатено на %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Ðазначете го името на кориÑникот од кого откажувате претплата."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Претплатата на %s е откажана"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Ðаредбата Ñè уште не е имплементирана."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "ИзвеÑтувањето е иÑклучено."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Ðе можам да иÑклучам извеÑтување."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "ИзвеÑтувањето е вклучено."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Ðе можам да вклучам извеÑтување."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Ðаредбата за најава е оневозможена"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "Оваа врÑка може да Ñе употреби Ñамо еднаш, и трае Ñамо 2 минути: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Откажана претплата на %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Ðе Ñте претплатени никому."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ðикој не е претплатен на ВаÑ."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Оддалечена претплата"
msgstr[1] "Оддалечена претплата"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Ðе членувате во ниедна група."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Ðе ни го иÑпративте тој профил."
msgstr[1] "Ðе ни го иÑпративте тој профил."
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5463,19 +5478,19 @@ msgstr ""
"tracks - Ñè уште не е имплементирано.\n"
"tracking - Ñè уште не е имплементирано.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Ðема пронајдено конфигурациÑка податотека. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Побарав конфигурациони податотеки на Ñледниве меÑта: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Препорачуваме да го пуштите инÑталатерот за да го поправите ова."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Оди на инÑталаторот."
@@ -5653,49 +5668,49 @@ msgstr "Ознаки во забелешките на групата %s"
msgid "This page is not available in a media type you accept"
msgstr "Оваа Ñтраница не е доÑтапна во форматот кој Вие го прифаќате."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Ðеподдржан фомрат на Ñлики."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Ова е предолго. МакÑималната должина е 140 знаци."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Делумно подигање."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "СиÑтемÑка грешка при подигањето на податотеката."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Ðе е Ñлика или податотеката е пореметена."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Ðеподдржан фомрат на Ñлики."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Податотеката е изгубена."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Ðепознат тип на податотека"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "МБ"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "кб"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Ðепознат извор на приемна пошта %d."
@@ -5978,7 +5993,7 @@ msgstr ""
"впуштите во разговор Ñо други кориÑници. Луѓето можат да ви иÑпраќаат пораки "
"што ќе можете да ги видите Ñамо Вие."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "од"
@@ -6136,23 +6151,23 @@ msgstr "З"
msgid "at"
msgstr "во"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "во контекÑÑ‚"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Повторено од"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Одговори на забелешкава"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Одговор"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Забелешката е повторена"
@@ -6178,7 +6193,7 @@ msgstr "Грешка во внеÑувањето на аватарот"
#: lib/oauthstore.php:311
msgid "Error inserting remote profile"
-msgstr "Грешка во внеÑувањето на оддалечениот профил"
+msgstr "Грешка во внеÑувањето на далечинÑкиот профил"
#: lib/oauthstore.php:345
msgid "Duplicate notice"
@@ -6294,7 +6309,7 @@ msgstr "Повтори ја забелешкава"
msgid "Revoke the \"%s\" role from this user"
msgstr "Одземи му ја улогата „%s“ на кориÑников"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Ðе е зададен кориÑник за еднокориÑничкиот режим."
@@ -6420,89 +6435,93 @@ msgstr "Откажи претплата од овој корÑиник"
msgid "Unsubscribe"
msgstr "Откажи ја претплатата"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Уреди аватар"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "КориÑнички дејÑтва"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Уреди нагодувања на профилот"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Уреди"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "ИÑпрати му директна порака на кориÑников"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Порака"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Модерирај"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "КориÑничка улога"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "ÐдминиÑтратор"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Модератор"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "пред неколку Ñекунди"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "пред еден чаÑ"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "пред %d чаÑа"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "пред еден меÑец"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "пред %d меÑеца"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "пред една година"
@@ -6516,7 +6535,7 @@ msgstr "%s не е важечка боја!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s не е важечка боја! КориÑтете 3 или 6 шеÑнаеÑетни (hex) знаци."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index b687e445e..617280c33 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-08 21:11:29+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:11+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.17alpha (r63415); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
@@ -93,7 +93,7 @@ msgstr "Ingen slik side"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -102,10 +102,8 @@ msgstr "Ingen slik side"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Ingen slik bruker"
@@ -203,14 +201,14 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metode ikke funnet!"
@@ -224,8 +222,8 @@ msgstr "API-metode ikke funnet!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Denne metoden krever en POST."
@@ -256,7 +254,7 @@ msgid "Could not save profile."
msgstr "Klarte ikke å lagre profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -343,7 +341,7 @@ msgstr "Fant ingen status med den ID-en."
msgid "This status is already a favorite."
msgstr "Denne statusen er allerede en favoritt."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Kunne ikke opprette favoritt."
@@ -460,7 +458,7 @@ msgstr "Gruppe ikke funnet!"
msgid "You are already a member of that group."
msgstr "Du er allerede medlem av den gruppen."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Du har blitt blokkert fra den gruppen av administratoren."
@@ -510,7 +508,7 @@ msgstr "Ugyldig symbol."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -577,9 +575,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Nick"
@@ -648,12 +646,12 @@ msgstr "Maks notisstørrelse er %d tegn, inklusive vedleggs-URL."
msgid "Unsupported format."
msgstr "Formatet støttes ikke."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritter fra %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
@@ -663,7 +661,7 @@ msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Oppdateringer som nevner %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s oppdateringer som svarer på oppdateringer fra %2$s / %3$s."
@@ -673,7 +671,7 @@ msgstr "%1$s oppdateringer som svarer på oppdateringer fra %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s offentlig tidslinje"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s oppdateringer fra alle sammen!"
@@ -688,12 +686,12 @@ msgstr "Gjentatt til %s"
msgid "Repeats of %s"
msgstr "Repetisjoner av %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notiser merket med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringer merket med %1$s på %2$s!"
@@ -721,7 +719,7 @@ msgstr "Ingen størrelse."
msgid "Invalid size."
msgstr "Ugyldig størrelse"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Brukerbilde"
@@ -753,7 +751,7 @@ msgid "Preview"
msgstr "Forhåndsvis"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Slett"
@@ -836,8 +834,8 @@ msgstr "Kunne ikke lagre blokkeringsinformasjon."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Ingen slik gruppe."
@@ -938,7 +936,7 @@ msgstr "Du er ikke eieren av dette programmet."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -999,7 +997,7 @@ msgstr "Er du sikker på at du vil slette denne notisen?"
msgid "Do not delete this notice"
msgstr "Ikke slett denne notisen"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Slett denne notisen"
@@ -1252,7 +1250,7 @@ msgstr "beskrivelse er for lang (maks %d tegn)"
msgid "Could not update group."
msgstr "Kunne ikke oppdatere gruppe."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Kunne ikke opprette alias."
@@ -1482,7 +1480,7 @@ msgstr ""
#: lib/personalgroupnav.php:115
#, php-format
msgid "%s's favorite notices"
-msgstr ""
+msgstr "%s sine favorittnotiser"
#: actions/favoritesrss.php:115
#, php-format
@@ -1502,7 +1500,7 @@ msgstr ""
#: actions/featured.php:99
#, php-format
msgid "A selection of some great users on %s"
-msgstr ""
+msgstr "Et utvalg av noen store brukere på %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -1598,9 +1596,8 @@ msgid "Only an admin can block group members."
msgstr ""
#: actions/groupblock.php:95
-#, fuzzy
msgid "User is already blocked from group."
-msgstr "Du er allerede logget inn!"
+msgstr "Bruker er allerede blokkert fra gruppe."
#: actions/groupblock.php:100
msgid "User is not a member of group."
@@ -1624,7 +1621,7 @@ msgstr "Ikke blokker denne brukeren fra denne gruppa"
#: actions/groupblock.php:179
msgid "Block this user from this group"
-msgstr ""
+msgstr "Blokker denne brukeren fra denne gruppen"
#: actions/groupblock.php:196
msgid "Database error blocking user from group."
@@ -1797,9 +1794,8 @@ msgid "Error removing the block."
msgstr "Feil under oppheving av blokkering."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
-msgstr "Innstillinger for IM"
+msgstr "Innstillinger for direktemeldinger"
#: actions/imsettings.php:70
#, php-format
@@ -1826,9 +1822,8 @@ msgstr ""
"instruksjoner (la du %s til vennelisten din?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
-msgstr "IM-adresse"
+msgstr "Direktemeldingsadresse"
#: actions/imsettings.php:126
#, php-format
@@ -1926,7 +1921,7 @@ msgstr "Inviter nye brukere"
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2047,9 +2042,9 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
-msgstr ""
+msgstr "Du er ikke et medlem av den gruppen."
#: actions/leavegroup.php:137
#, php-format
@@ -2075,7 +2070,7 @@ msgstr "Logg inn"
#: actions/login.php:227
msgid "Login to site"
-msgstr ""
+msgstr "Logg inn på nettstedet"
#: actions/login.php:236 actions/register.php:478
msgid "Remember me"
@@ -2118,18 +2113,17 @@ msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Klarte ikke å oppdatere bruker."
#: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Gjør brukeren til en administrator for gruppen"
+msgstr "Kan ikke gjøre %1$s til administrator for gruppen %2$s."
#: actions/microsummary.php:69
msgid "No current status"
msgstr "Ingen nåværende status"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "Ingen slik side"
+msgstr "Nytt program"
#: actions/newapplication.php:64
msgid "You must be logged in to register an application."
@@ -2160,12 +2154,12 @@ msgstr "Bruk dette skjemaet for å opprette en ny gruppe."
msgid "New message"
msgstr "Ny melding"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Du kan ikke sende en melding til denne brukeren."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Inget innhold."
@@ -2173,7 +2167,7 @@ msgstr "Inget innhold."
msgid "No recipient specified."
msgstr "Ingen mottaker oppgitt."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2183,11 +2177,11 @@ msgid "Message sent"
msgstr "Melding sendt"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
-msgstr "Direktemeldinger til %s"
+msgstr "Direktemelding til %s sendt."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax-feil"
@@ -2211,9 +2205,9 @@ msgid "Text search"
msgstr "Tekst-søk"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Søkestrøm for «%s»"
+msgstr "Søkeresultat for «%1$s» på %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2232,12 +2226,12 @@ msgstr ""
#: actions/noticesearchrss.php:96
#, php-format
msgid "Updates with \"%s\""
-msgstr ""
+msgstr "Oppdateringer med «%s»"
#: actions/noticesearchrss.php:98
-#, fuzzy, php-format
+#, php-format
msgid "Updates matching search term \"%1$s\" on %2$s!"
-msgstr "Alle oppdateringer for søket: «%s»"
+msgstr "Oppdateringer som samsvarer søkestrengen «%1$s» på %2$s."
#: actions/nudge.php:85
msgid ""
@@ -2258,7 +2252,7 @@ msgstr ""
#: actions/oauthappssettings.php:74
msgid "OAuth applications"
-msgstr ""
+msgstr "OAuth-program"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
@@ -2275,21 +2269,20 @@ msgstr ""
#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
-msgstr ""
+msgstr "Du har tillatt følgende programmer å få tilgang til den konto."
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "Du er allerede logget inn!"
+msgstr "Du er ikke bruker av dette programmet."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Kunne ikke tilbakekalle tilgang for programmet: "
#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
-msgstr ""
+msgstr "Du har ikke tillatt noen programmer å bruke din konto."
#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
@@ -2299,7 +2292,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s sin status på %2$s"
@@ -2312,8 +2305,8 @@ msgstr "innholdstype "
msgid "Only "
msgstr "Bare "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2448,7 +2441,7 @@ msgstr "Feil gammelt passord"
msgid "Error saving user; invalid."
msgstr ""
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Klarer ikke å lagre nytt passord."
@@ -2662,8 +2655,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 små bokstaver eller nummer, ingen punktum eller mellomrom"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Fullt navn"
@@ -2691,9 +2684,9 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr ""
@@ -2707,7 +2700,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Tagger"
@@ -2935,7 +2928,7 @@ msgstr ""
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2955,19 +2948,19 @@ msgstr "Nullstill"
msgid "Enter a nickname or email address."
msgstr ""
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr ""
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -2975,23 +2968,23 @@ msgstr ""
"Instruksjoner om hvordan du kan gjenopprette ditt passord har blitt sendt "
"til din registrerte e-postadresse."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Passordet må bestå av 6 eller flere tegn."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3149,7 +3142,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr ""
@@ -3187,7 +3180,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "Du er allerede logget inn!"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Gjentatt"
@@ -3332,7 +3325,7 @@ msgstr "Organisasjon"
msgid "Description"
msgstr "Beskrivelse"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3386,28 +3379,28 @@ msgid "Are you sure you want to reset your consumer key and secret?"
msgstr "Er du sikker på at du vil slette denne notisen?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "%s og venner"
+msgstr "%1$s sine favorittnotiser, side %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
-msgstr ""
+msgstr "Kunne ikke hente favorittnotiser."
#: actions/showfavorites.php:171
-#, fuzzy, php-format
+#, php-format
msgid "Feed for favorites of %s (RSS 1.0)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for favoritter av %s (RSS 1.0)"
#: actions/showfavorites.php:178
-#, fuzzy, php-format
+#, php-format
msgid "Feed for favorites of %s (RSS 2.0)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for favoritter av %s (RSS 2.0)"
#: actions/showfavorites.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Feed for favorites of %s (Atom)"
-msgstr "Feed for %s sine venner"
+msgstr "Mating for favoritter av %s (Atom)"
#: actions/showfavorites.php:206
msgid ""
@@ -3437,77 +3430,74 @@ msgstr ""
#: actions/showgroup.php:82 lib/groupnav.php:86
#, php-format
msgid "%s group"
-msgstr ""
+msgstr "%s gruppe"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "Alle abonnementer"
+msgstr "%1$s gruppe, side %2$d"
-#: actions/showgroup.php:226
-#, fuzzy
+#: actions/showgroup.php:227
msgid "Group profile"
-msgstr "Klarte ikke å lagre profil."
+msgstr "Gruppeprofil"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
-msgstr ""
+msgstr "Nettadresse"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
-msgstr ""
+msgstr "Notismating for %s gruppe (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
-msgstr ""
+msgstr "Notismating for %s gruppe (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
-msgstr ""
+msgstr "Notismating for %s gruppe (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Klarte ikke å lagre profil."
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
-#, fuzzy
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
-msgstr "Medlem siden"
+msgstr "Medlemmer"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
-msgstr ""
+msgstr "(Ingen)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
-msgstr ""
+msgstr "Alle medlemmer"
-#: actions/showgroup.php:441
-#, fuzzy
+#: actions/showgroup.php:442
msgid "Created"
-msgstr "Opprett"
+msgstr "Opprettet"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3516,8 +3506,14 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** er en brukergruppe på %%%%site.name%%%%, en [mikrobloggingstjeneste]"
+"(http://no.wikipedia.org/wiki/Mikroblogg) basert på det frie "
+"programvareverktøyet [StatusNet](http://status.net/). Dets medlemmer deler "
+"korte meldinger om deres liv og interesser. [Bli med nå](%%%%action.register%"
+"%%%) for å bli medlem av denne gruppen og mange fler. ([Les mer](%%%%doc.help"
+"%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3525,14 +3521,18 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
+"**%s** er en brukergruppe på %%%%site.name%%%%, en [mikrobloggingstjeneste]"
+"(http://no.wikipedia.org/wiki/Mikroblogg) basert på det frie "
+"programvareverktøyet [StatusNet](http://status.net/). Dets medlemmer deler "
+"korte meldinger om deres liv og interesser. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
-msgstr ""
+msgstr "Administratorer"
#: actions/showmessage.php:81
msgid "No such message."
-msgstr ""
+msgstr "Ingen slik melding."
#: actions/showmessage.php:98
msgid "Only the sender and recipient may read this message."
@@ -3541,16 +3541,16 @@ msgstr ""
#: actions/showmessage.php:108
#, php-format
msgid "Message to %1$s on %2$s"
-msgstr ""
+msgstr "Melding til %1$s på %2$s"
#: actions/showmessage.php:113
#, php-format
msgid "Message from %1$s on %2$s"
-msgstr ""
+msgstr "Melding fra %1$s på %2$s"
#: actions/shownotice.php:90
msgid "Notice deleted."
-msgstr ""
+msgstr "Notis slettet."
#: actions/showstream.php:73
#, fuzzy, php-format
@@ -3558,29 +3558,29 @@ msgid " tagged %s"
msgstr "Tagger"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%s og venner"
+msgstr "%1$s, side %2$d"
#: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Feed for taggen %s"
+msgstr "Notismating for %1$s merket %2$s (RSS 1.0)"
#: actions/showstream.php:129
#, php-format
msgid "Notice feed for %s (RSS 1.0)"
-msgstr ""
+msgstr "Notismating for %s (RSS 1.0)"
#: actions/showstream.php:136
#, php-format
msgid "Notice feed for %s (RSS 2.0)"
-msgstr ""
+msgstr "Notismating for %s (RSS 2.0)"
#: actions/showstream.php:143
#, php-format
msgid "Notice feed for %s (Atom)"
-msgstr ""
+msgstr "Notismating for %s (Atom)"
#: actions/showstream.php:148
#, fuzzy, php-format
@@ -3616,6 +3616,11 @@ 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 en konto på %%%%site.name%%%%, en [mikrobloggingstjeneste] "
+"(http://no.wikipedia.org/wiki/Mikroblogg) basert på det frie "
+"programvareverktøyet [StatusNet](http://status.net/). [Bli med nå](%%%%"
+"action.register%%%%) for å følge **%s** og mange flere sine notiser. ([Les "
+"mer](%%%%doc.help%%%%))"
#: actions/showstream.php:248
#, php-format
@@ -3624,11 +3629,14 @@ msgid ""
"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
"[StatusNet](http://status.net/) tool. "
msgstr ""
+"**%s** har en konto på %%%%site.name%%%%, en [mikrobloggingstjeneste] "
+"(http://no.wikipedia.org/wiki/Mikroblogg) basert på det frie "
+"programvareverktøyet [StatusNet](http://status.net/). "
#: actions/showstream.php:305
-#, fuzzy, php-format
+#, php-format
msgid "Repeat of %s"
-msgstr "Svar til %s"
+msgstr "Repetisjon av %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3648,14 +3656,13 @@ msgid "Site name must have non-zero length."
msgstr ""
#: actions/siteadminpanel.php:141
-#, fuzzy
msgid "You must have a valid contact email address."
-msgstr "Ugyldig e-postadresse"
+msgstr "Du må ha en gyldig e-postadresse."
#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
-msgstr ""
+msgstr "Ukjent språk «%s»."
#: actions/siteadminpanel.php:165
msgid "Minimum text limit is 140 characters."
@@ -3667,11 +3674,11 @@ msgstr ""
#: actions/siteadminpanel.php:221
msgid "General"
-msgstr ""
+msgstr "Generell"
#: actions/siteadminpanel.php:224
msgid "Site name"
-msgstr ""
+msgstr "Nettstedsnavn"
#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
@@ -3703,16 +3710,15 @@ msgstr ""
#: actions/siteadminpanel.php:256
msgid "Default timezone"
-msgstr ""
+msgstr "Standard tidssone"
#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Standard tidssone for nettstedet; vanligvis UTC."
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Foretrukket språk"
+msgstr "Standardspråk"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
@@ -4062,13 +4068,13 @@ msgstr ""
msgid "Tag %s"
msgstr "Tagger"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "Klarte ikke å lagre profil."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4106,9 +4112,8 @@ msgid "API method under construction."
msgstr "API-metode under utvikling."
#: actions/unblock.php:59
-#, fuzzy
msgid "You haven't blocked that user."
-msgstr "Du er allerede logget inn!"
+msgstr "Du har ikke blokkert den brukeren."
#: actions/unsandbox.php:72
msgid "User is not sandboxed."
@@ -4136,24 +4141,24 @@ msgstr ""
#: actions/useradminpanel.php:59
msgctxt "TITLE"
msgid "User"
-msgstr ""
+msgstr "Bruker"
#: actions/useradminpanel.php:70
msgid "User settings for this StatusNet site."
-msgstr ""
+msgstr "Brukerinnstillinger for dette StatusNet-nettstedet."
#: actions/useradminpanel.php:149
msgid "Invalid bio limit. Must be numeric."
-msgstr ""
+msgstr "Ugyldig biografigrense. Må være numerisk."
#: actions/useradminpanel.php:155
msgid "Invalid welcome text. Max length is 255 characters."
-msgstr ""
+msgstr "Ugyldig velkomsttekst. Maks lengde er 255 tegn."
#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Ugyldig standardabonnement: '%1$s' er ikke bruker."
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -4162,48 +4167,43 @@ msgstr "Profil"
#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Biografigrense"
#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Maks lengde på en profilbiografi i tegn."
#: actions/useradminpanel.php:231
-#, fuzzy
msgid "New users"
-msgstr "slett"
+msgstr "Nye brukere"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Velkomst av ny bruker"
#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
-msgstr ""
+msgstr "Velkomsttekst for nye brukere (Maks 255 tegn)."
#: actions/useradminpanel.php:241
-#, fuzzy
msgid "Default subscription"
-msgstr "Alle abonnementer"
+msgstr "Standardabonnement"
#: actions/useradminpanel.php:242
-#, fuzzy
msgid "Automatically subscribe new users to this user."
-msgstr ""
-"Abonner automatisk på de som abonnerer på meg (best for ikke-mennesker)"
+msgstr "Legger automatisk til et abonnement på denne brukeren til nye brukere."
#: actions/useradminpanel.php:251
-#, fuzzy
msgid "Invitations"
-msgstr "Bekreftelseskode"
+msgstr "Invitasjoner"
#: actions/useradminpanel.php:256
msgid "Invitations enabled"
-msgstr ""
+msgstr "Invitasjoner aktivert"
#: actions/useradminpanel.php:258
msgid "Whether to allow users to invite new users."
-msgstr ""
+msgstr "Hvorvidt brukere tillates å invitere nye brukere."
#: actions/userauthorization.php:105
msgid "Authorize subscription"
@@ -4218,7 +4218,7 @@ msgstr ""
#: actions/userauthorization.php:196 actions/version.php:165
msgid "License"
-msgstr ""
+msgstr "Lisens"
#: actions/userauthorization.php:217
msgid "Accept"
@@ -4227,16 +4227,15 @@ msgstr "Godta"
#: actions/userauthorization.php:218 lib/subscribeform.php:115
#: lib/subscribeform.php:139
msgid "Subscribe to this user"
-msgstr ""
+msgstr "Abonner på denne brukeren"
#: actions/userauthorization.php:219
msgid "Reject"
-msgstr ""
+msgstr "Avvis"
#: actions/userauthorization.php:220
-#, fuzzy
msgid "Reject this subscription"
-msgstr "Alle abonnementer"
+msgstr "Avvis dette abonnementet"
#: actions/userauthorization.php:232
msgid "No authorization request!"
@@ -4312,7 +4311,7 @@ msgstr ""
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Bon appétit."
#: actions/usergroups.php:64
#, fuzzy, php-format
@@ -4321,17 +4320,17 @@ msgstr "Alle abonnementer"
#: actions/usergroups.php:130
msgid "Search for more groups"
-msgstr ""
+msgstr "Søk etter flere grupper"
#: actions/usergroups.php:157
-#, fuzzy, php-format
+#, php-format
msgid "%s is not a member of any group."
-msgstr "Du er allerede logget inn!"
+msgstr "%s er ikke medlem av noen gruppe."
#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
-msgstr ""
+msgstr "Prøv å [søke etter grupper](%%action.groupsearch%%) og bli med i dem."
#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
#: lib/atomusernoticefeed.php:72
@@ -4340,9 +4339,9 @@ msgid "Updates from %1$s on %2$s!"
msgstr "Oppdateringar fra %1$s på %2$s!"
#: actions/version.php:73
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "Statistikk"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4350,10 +4349,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
+"Dette nettstedet drives av %1$s versjon %2$s, Copyright 2008-2010 StatusNet, "
+"Inc. og andre bidragsytere."
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Bidragsytere"
#: actions/version.php:168
msgid ""
@@ -4380,30 +4381,29 @@ msgstr ""
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Programtillegg"
#: actions/version.php:196 lib/action.php:767
-#, fuzzy
msgid "Version"
-msgstr "Personlig"
+msgstr "Versjon"
#: actions/version.php:197
msgid "Author(s)"
-msgstr ""
+msgstr "Forfatter(e)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4445,46 +4445,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
-msgstr ""
+msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:66 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
@@ -4496,7 +4496,7 @@ msgstr ""
#: classes/Subscription.php:74
msgid "User has blocked you."
-msgstr ""
+msgstr "Bruker har blokkert deg."
#: classes/Subscription.php:157
#, fuzzy
@@ -4513,34 +4513,30 @@ msgstr "Klarte ikke å lagre avatar-informasjonen"
msgid "Couldn't delete subscription OMB token."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr ""
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
-msgstr ""
+msgstr "Velkommen til %1$s, @%2$s."
-#: classes/User_group.php:477
-#, fuzzy
+#: classes/User_group.php:480
msgid "Could not create group."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke opprette gruppe."
-#: classes/User_group.php:486
-#, fuzzy
+#: classes/User_group.php:489
msgid "Could not set group URI."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke stille inn gruppe-URI."
-#: classes/User_group.php:507
-#, fuzzy
+#: classes/User_group.php:510
msgid "Could not set group membership."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke stille inn gruppemedlemskap."
-#: classes/User_group.php:521
-#, fuzzy
+#: classes/User_group.php:524
msgid "Could not save local group info."
-msgstr "Klarte ikke å lagre avatar-informasjonen"
+msgstr "Kunne ikke lagre lokal gruppeinformasjon."
#: lib/accountsettingsaction.php:108
msgid "Change your profile settings"
@@ -4565,20 +4561,20 @@ msgstr "Klarte ikke å lagre profil."
#: lib/accountsettingsaction.php:128
msgid "Other"
-msgstr ""
+msgstr "Andre"
#: lib/accountsettingsaction.php:128
msgid "Other options"
-msgstr ""
+msgstr "Andre valg"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s sin status på %2$s"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
-msgstr ""
+msgstr "Side uten tittel"
#: lib/action.php:424
msgid "Primary site navigation"
@@ -4591,7 +4587,6 @@ msgid "Personal profile and friends timeline"
msgstr ""
#: lib/action.php:433
-#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personlig"
@@ -4605,10 +4600,9 @@ msgstr "Endre passordet ditt"
#. TRANS: Tooltip for main menu option "Services"
#: lib/action.php:440
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Koble til"
+msgstr "Koble til tjenester"
#: lib/action.php:443
msgid "Connect"
@@ -4618,10 +4612,9 @@ msgstr "Koble til"
#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr ""
+msgstr "Endre nettstedskonfigurasjon"
#: lib/action.php:449
-#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
@@ -4747,7 +4740,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4756,12 +4749,12 @@ msgstr ""
"**%%site.name%%** er en mikrobloggingtjeneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er en mikrobloggingtjeneste. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4769,41 +4762,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Alle "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "lisens."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Etter"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Før"
@@ -4819,6 +4812,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4832,12 +4829,12 @@ msgstr ""
#. TRANS: Client error message
#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
-msgstr ""
+msgstr "showForm() ikke implementert."
#. TRANS: Client error message
#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
-msgstr ""
+msgstr "saveSettings() ikke implementert."
#. TRANS: Client error message
#: lib/adminpanelaction.php:283
@@ -4851,10 +4848,9 @@ msgstr ""
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:350
-#, fuzzy
msgctxt "MENU"
msgid "Site"
-msgstr "Nettstedslogo"
+msgstr "Nettsted"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:356
@@ -4871,22 +4867,22 @@ msgstr "Personlig"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr ""
+msgstr "Brukerkonfigurasjon"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
-msgstr ""
+msgstr "Bruker"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:372
msgid "Access configuration"
-msgstr ""
+msgstr "Tilgangskonfigurasjon"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:380
msgid "Paths configuration"
-msgstr ""
+msgstr "Stikonfigurasjon"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:388
@@ -4908,38 +4904,35 @@ msgstr ""
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
#: lib/applicationeditform.php:136
msgid "Edit application"
-msgstr ""
+msgstr "Rediger program"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
-msgstr ""
+msgstr "Ikon for dette programmet"
#: lib/applicationeditform.php:204
-#, fuzzy, php-format
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Beskriv degselv og dine interesser med 140 tegn"
+msgstr "Beskriv programmet ditt med %d tegn"
#: lib/applicationeditform.php:207
-#, fuzzy
msgid "Describe your application"
-msgstr "Beskriv degselv og dine interesser med 140 tegn"
+msgstr "Beskriv programmet ditt"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "Kilde"
+msgstr "Nettadresse til kilde"
#: lib/applicationeditform.php:218
-#, fuzzy
msgid "URL of the homepage of this application"
-msgstr "URL til din hjemmeside, blogg, eller profil på annen nettside."
+msgstr "Nettadresse til hjemmesiden for dette programmet"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
@@ -4956,298 +4949,306 @@ msgstr ""
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Nettleser"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Skrivebord"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Type program, nettleser eller skrivebord"
#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Skrivebeskyttet"
#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Les og skriv"
#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Standardtilgang for dette programmet: skrivebeskyttet eller lese- og "
+"skrivetilgang"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
-msgstr "Fjern"
+msgstr "Tilbakekall"
#: lib/attachmentlist.php:87
msgid "Attachments"
-msgstr ""
+msgstr "Vedlegg"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
-msgstr ""
+msgstr "Forfatter"
-#: lib/attachmentlist.php:278
-#, fuzzy
+#: lib/attachmentlist.php:276
msgid "Provider"
-msgstr "Profil"
+msgstr "Leverandør"
#: lib/attachmentnoticesection.php:67
msgid "Notices where this attachment appears"
-msgstr ""
+msgstr "Notiser hvor dette vedlegget forekommer"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
msgstr ""
#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
-#, fuzzy
msgid "Password changing failed"
-msgstr "Passordet ble lagret"
+msgstr "Endring av passord mislyktes"
#: lib/authenticationplugin.php:235
-#, fuzzy
msgid "Password changing is not allowed"
-msgstr "Passordet ble lagret"
+msgstr "Endring av passord er ikke tillatt"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Notis med den id'en finnes ikke"
-#: lib/command.php:88
-#, fuzzy, php-format
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Bruker har ingen siste notis"
+
+#: lib/command.php:125
+#, php-format
msgid "Could not find a user with nickname %s"
-msgstr "Klarte ikke å oppdatere bruker med bekreftet e-post."
+msgstr "Fant ingen bruker med kallenavn %s"
-#: lib/command.php:92
-msgid "It does not make a lot of sense to nudge yourself!"
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Fant ingen bruker med kallenavn %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:221
+msgid "It does not make a lot of sense to nudge yourself!"
+msgstr "Det gir ikke så mye mening å knuffe seg selv."
+
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Svar til %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Abonnement: %1$s\n"
+"Abonnenter: %2$s\n"
+"Notiser: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Brukeren har ingen profil."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
-msgstr ""
+msgstr "Notis markert som favoritt."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Du er allerede medlem av den gruppen."
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Klarte ikke å oppdatere bruker."
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%1$s sin status på %2$s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "Klarte ikke å oppdatere bruker."
-#: lib/command.php:280
-#, fuzzy, php-format
+#: lib/command.php:378
+#, php-format
msgid "%s left group %s"
-msgstr "%1$s sin status på %2$s"
+msgstr "%s forlot gruppen %s"
-#: lib/command.php:309
-#, fuzzy, php-format
+#: lib/command.php:401
+#, php-format
msgid "Fullname: %s"
-msgstr "Fullt navn"
+msgstr "Fullt navn: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
-msgstr ""
+msgstr "Posisjon: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
-msgstr ""
+msgstr "Hjemmeside: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
+msgstr "Om: %s"
+
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Melding for lang - maks er %d tegn, du sendte %d"
-#: lib/command.php:367
-#, fuzzy, php-format
+#: lib/command.php:468
+#, php-format
msgid "Direct message to %s sent"
-msgstr "Direktemeldinger til %s"
+msgstr "Direktemelding til %s sendt"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
-msgstr ""
+msgstr "Feil ved sending av direktemelding."
-#: lib/command.php:413
-#, fuzzy
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
-msgstr "Kan ikke slette notisen."
+msgstr "Kan ikke repetere din egen notis"
-#: lib/command.php:418
-#, fuzzy
+#: lib/command.php:495
msgid "Already repeated that notice"
-msgstr "Kan ikke slette notisen."
+msgstr "Allerede repetert den notisen"
-#: lib/command.php:426
-#, fuzzy, php-format
+#: lib/command.php:503
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Nytt nick"
+msgstr "Notis fra %s repetert"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
-msgstr ""
+msgstr "Feil ved repetering av notis."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr ""
+msgstr "Notis for lang - maks er %d tegn, du sendte %d"
-#: lib/command.php:491
-#, fuzzy, php-format
+#: lib/command.php:545
+#, php-format
msgid "Reply to %s sent"
-msgstr "Svar til %s"
+msgstr "Svar til %s sendt"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
-msgstr ""
+msgstr "Feil ved lagring av notis."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-#, fuzzy
-msgid "No such user"
-msgstr "Ingen slik bruker"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Svar til %s"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Ikke autorisert."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Svar til %s"
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er allerede logget inn!"
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5289,20 +5290,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Fant ikke bekreftelseskode."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5482,49 +5483,49 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "Denne siden er ikke tilgjengelig i en mediatype du aksepterer"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Bildefilformatet støttes ikke."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Filen er for stor. Maks filstørrelse er %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Delvis opplasting."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Systemfeil ved opplasting av fil."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Ikke et bilde eller en korrupt fil."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Bildefilformatet støttes ikke."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Mistet filen vår."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Ukjent filtype"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Ukjent innbokskilde %d."
@@ -5804,7 +5805,7 @@ msgstr ""
"engasjere andre brukere i en samtale. Personer kan sende deg meldinger som "
"bare du kan se."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "fra"
@@ -5956,23 +5957,23 @@ msgstr "V"
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repetert av"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Svar på denne notisen"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Svar"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Notis repetert"
@@ -6115,7 +6116,7 @@ msgstr "Repeter denne notisen"
msgid "Revoke the \"%s\" role from this user"
msgstr ""
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6245,90 +6246,94 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Brukerbilde"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Endre profilinnstillinger"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Rediger"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Send en direktemelding til denne brukeren"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Melding"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderer"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Brukerrolle"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Administrator"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "noen få sekunder siden"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "omtrent ett år siden"
@@ -6342,7 +6347,7 @@ msgstr "%s er ikke en gyldig farge."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s er ikke en gyldig farge. Bruk 3 eller 6 heksadesimale tegn."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Melding for lang - maks er %1$d tegn, du sendte %2$d."
diff --git a/locale/nl/LC_MESSAGES/statusnet.po b/locale/nl/LC_MESSAGES/statusnet.po
index c73771f84..745e666c2 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:33+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:17+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
@@ -94,7 +94,7 @@ msgstr "Deze pagina bestaat niet"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -103,10 +103,8 @@ msgstr "Deze pagina bestaat niet"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Onbekende gebruiker."
@@ -206,14 +204,14 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "De API-functie is niet aangetroffen."
@@ -226,8 +224,8 @@ msgstr "De API-functie is niet aangetroffen."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Deze methode vereist een POST."
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "Het was niet mogelijk het profiel op te slaan."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "Er is geen status gevonden met dit ID."
msgid "This status is already a favorite."
msgstr "Deze mededeling staat al in uw favorietenlijst."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Het was niet mogelijk een favoriet aan te maken."
@@ -469,7 +467,7 @@ msgstr "De groep is niet aangetroffen!"
msgid "You are already a member of that group."
msgstr "U bent al lid van die groep."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Een beheerder heeft ingesteld dat u geen lid mag worden van die groep."
@@ -519,7 +517,7 @@ msgstr "Ongeldig token."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -594,9 +592,9 @@ msgstr "Gebruiker"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Gebruikersnaam"
@@ -667,12 +665,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Niet-ondersteund bestandsformaat."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favorieten van %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s"
@@ -682,7 +680,7 @@ msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Updates over %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s updates die een reactie zijn op updates van %2$s / %3$s."
@@ -692,7 +690,7 @@ msgstr "%1$s updates die een reactie zijn op updates van %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s publieke tijdlijn"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates van iedereen"
@@ -707,12 +705,12 @@ msgstr "Herhaald naar %s"
msgid "Repeats of %s"
msgstr "Herhaald van %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Mededelingen met het label %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates met het label %1$s op %2$s!"
@@ -740,7 +738,7 @@ msgstr "Geen afmeting."
msgid "Invalid size."
msgstr "Ongeldige afmetingen."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -773,7 +771,7 @@ msgid "Preview"
msgstr "Voorvertoning"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Verwijderen"
@@ -857,8 +855,8 @@ msgstr "Het was niet mogelijk om de blokkadeinformatie op te slaan."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "De opgegeven groep bestaat niet."
@@ -959,7 +957,7 @@ msgstr "U bent niet de eigenaar van deze applicatie."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Er is een probleem met uw sessietoken."
@@ -1020,7 +1018,7 @@ msgstr "Weet u zeker dat u deze aankondiging wilt verwijderen?"
msgid "Do not delete this notice"
msgstr "Deze mededeling niet verwijderen"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Deze mededeling verwijderen"
@@ -1274,7 +1272,7 @@ msgstr "de beschrijving is te lang (maximaal %d tekens)"
msgid "Could not update group."
msgstr "Het was niet mogelijk de groep bij te werken."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Het was niet mogelijk de aliassen aan te maken."
@@ -1987,7 +1985,7 @@ msgstr "Nieuwe gebruikers uitnodigen"
msgid "You are already subscribed to these users:"
msgstr "U bent als geabonneerd op deze gebruikers:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2120,7 +2118,7 @@ msgstr "%1$s is lid geworden van de groep %2$s"
msgid "You must be logged in to leave a group."
msgstr "U moet aangemeld zijn om een groep te kunnen verlaten."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "U bent geen lid van deze groep"
@@ -2235,12 +2233,12 @@ msgstr "Gebruik dit formulier om een nieuwe groep aan te maken."
msgid "New message"
msgstr "Nieuw bericht"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "U kunt geen bericht naar deze gebruiker zenden."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Geen inhoud!"
@@ -2248,7 +2246,7 @@ msgstr "Geen inhoud!"
msgid "No recipient specified."
msgstr "Er is geen ontvanger aangegeven."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Stuur geen berichten naar uzelf. Zeg het gewoon in uw hoofd."
@@ -2262,7 +2260,7 @@ msgstr "Bericht verzonden."
msgid "Direct message to %s sent."
msgstr "Het directe bericht aan %s is verzonden."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Er is een Ajax-fout opgetreden"
@@ -2388,7 +2386,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Mededeling heeft geen profiel"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Status van %1$s op %2$s"
@@ -2401,8 +2399,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Geen ondersteund gegevensformaat."
@@ -2533,7 +2531,7 @@ msgstr "Het oude wachtwoord is onjuist"
msgid "Error saving user; invalid."
msgstr "Fout bij opslaan gebruiker; ongeldig."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Het was niet mogelijk het nieuwe wachtwoord op te slaan."
@@ -2749,8 +2747,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 kleine letters of cijfers, geen leestekens of spaties"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Volledige naam"
@@ -2777,9 +2775,9 @@ msgid "Bio"
msgstr "Beschrijving"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Locatie"
@@ -2793,7 +2791,7 @@ msgstr "Mijn huidige locatie weergeven bij het plaatsen van mededelingen"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Labels"
@@ -3042,7 +3040,7 @@ msgstr "Wachtwoord herstellen"
msgid "Recover password"
msgstr "Wachtwoord herstellen"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Wachtwoordherstel aangevraagd"
@@ -3062,21 +3060,21 @@ msgstr "Herstellen"
msgid "Enter a nickname or email address."
msgstr "Voer een gebruikersnaam of e-mailadres in."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
"Er bestaat geen gebruiker met het opgegeven e-mailadres of de opgegeven "
"gebruikersnaam."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Die gebruiker heeft geen e-mailadres geregistreerd."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Er is een fout opgetreden bij het opslaan van de adresbevestiging."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3084,23 +3082,23 @@ msgstr ""
"De instructies om uw wachtwoord te herstellen zijn verstuurd naar het e-"
"mailadres dat voor uw gebruiker is geregistreerd."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Het wachtwoord is onverwacht opnieuw ingesteld."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Het wachtwoord moet uit zes of meer tekens bestaan."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Het wachtwoord en de bevestiging komen niet overeen."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Er is een fout opgetreden tijdens het instellen van de gebruiker."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Het nieuwe wachtwoord is opgeslagen. U bent nu aangemeld."
@@ -3264,7 +3262,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "De URL van uw profiel bij een andere, compatibele microblogdienst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Abonneren"
@@ -3302,7 +3300,7 @@ msgstr "U kunt uw eigen mededeling niet herhalen."
msgid "You already repeated that notice."
msgstr "U hent die mededeling al herhaald."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Herhaald"
@@ -3445,7 +3443,7 @@ msgstr "Organisatie"
msgid "Description"
msgstr "Beschrijving"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistieken"
@@ -3568,67 +3566,67 @@ msgstr "%s groep"
msgid "%1$s group, page %2$d"
msgstr "Groep %1$s, pagina %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Groepsprofiel"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Opmerking"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliassen"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Groepshandelingen"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Mededelingenfeed voor groep %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Vriend van een vriend voor de groep %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Leden"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(geen)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Alle leden"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Aangemaakt"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3644,7 +3642,7 @@ msgstr ""
"lid te worden van deze groep en nog veel meer! [Meer lezen...](%%%%doc.help%%"
"%%)"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3657,7 +3655,7 @@ msgstr ""
"[StatusNet](http://status.net/). De leden wisselen korte mededelingen uit "
"over hun ervaringen en interesses. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Beheerders"
@@ -4218,12 +4216,12 @@ msgstr "Geen ID-argument."
msgid "Tag %s"
msgstr "Label %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Gebruikersprofiel"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4568,7 +4566,7 @@ msgstr "Versie"
msgid "Author(s)"
msgstr "Auteur(s)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4577,13 +4575,13 @@ msgstr ""
"Bestanden mogen niet groter zijn dan %d bytes, en uw bestand was %d bytes. "
"Probeer een kleinere versie te uploaden."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Een bestand van deze grootte overschijdt uw gebruikersquota van %d bytes."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4622,31 +4620,31 @@ msgstr "Het was niet mogelijk het bericht in te voegen."
msgid "Could not update message with new URI."
msgstr "Het was niet mogelijk het bericht bij te werken met de nieuwe URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Er is een databasefout opgetreden bij de invoer van de hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van de mededeling. Deze is te "
"lang."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
"Er was een probleem bij het opslaan van de mededeling. De gebruiker is "
"onbekend."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"U hebt te snel te veel mededelingen verstuurd. Kom even op adem en probeer "
"het over enige tijd weer."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4654,22 +4652,22 @@ msgstr ""
"Te veel duplicaatberichten te snel achter elkaar. Neem een adempauze en "
"plaats over een aantal minuten pas weer een bericht."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
"U bent geblokkeerd en mag geen mededelingen meer achterlaten op deze site."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van het Postvak IN van de "
"groep."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4699,28 +4697,28 @@ msgid "Couldn't delete subscription OMB token."
msgstr ""
"Het was niet mogelijk om het OMB-token voor het abonnement te verwijderen."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Kon abonnement niet verwijderen."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welkom bij %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Het was niet mogelijk de groep aan te maken."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Het was niet mogelijk de groeps-URI in te stellen."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Het was niet mogelijk het groepslidmaatschap in te stellen."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Het was niet mogelijk de lokale groepsinformatie op te slaan."
@@ -4924,7 +4922,7 @@ msgstr "Widget"
msgid "StatusNet software license"
msgstr "Licentie van de StatusNet-software"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4933,12 +4931,12 @@ msgstr ""
"**%%site.name%%** is een microblogdienst van [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is een microblogdienst. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4949,45 +4947,45 @@ msgstr ""
"versie %s, beschikbaar onder de [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licentie voor siteinhoud"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Inhoud en gegevens van %1$s zijn persoonlijk en vertrouwelijk."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij %1$s. Alle rechten "
"voorbehouden."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij de respectievelijke "
"gebruikers. Alle rechten voorbehouden."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Alle "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licentie."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Later"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Eerder"
@@ -5003,6 +5001,10 @@ msgstr "Het is nog niet mogelijk ingebedde XML-inhoud te verwerken"
msgid "Can't handle embedded Base64 content yet."
msgstr "Het is nog niet mogelijk ingebedde Base64-inhoud te verwerken"
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5091,7 +5093,7 @@ msgstr ""
"Het API-programma heeft lezen-en-schrijventoegang nodig, maar u hebt alleen "
"maar leestoegang."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5167,11 +5169,11 @@ msgstr "Intrekken"
msgid "Attachments"
msgstr "Bijlagen"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Auteur"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Provider"
@@ -5191,37 +5193,50 @@ msgstr "Wachtwoord wijzigen is mislukt"
msgid "Password changing is not allowed"
msgstr "Wachtwoord wijzigen is niet toegestaan"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Commandoresultaten"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Het commando is uitgevoerd"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Het uitvoeren van het commando is mislukt"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Dit commando is nog niet geïmplementeerd."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Er bestaat geen mededeling met dat ID"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Deze gebruiker heeft geen laatste mededeling"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "De gebruiker %s is niet aangetroffen"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "De lokale gebruiker %s is niet aangetroffen"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Dit commando is nog niet geïmplementeerd."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Het heeft niet zoveel zin om uzelf te porren..."
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "De por naar %s is verzonden"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5232,202 +5247,202 @@ msgstr ""
"Abonnees: %2$s\n"
"Mededelingen: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Er bestaat geen mededeling met dat ID"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Deze gebruiker heeft geen laatste mededeling"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "De mededeling is op de favorietenlijst geplaatst."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "U bent al lid van deze groep"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Het was niet mogelijk om de gebruiker %s toe te voegen aan de groep %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s is lid geworden van de groep %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "De gebruiker %s kon niet uit de groep %s verwijderd worden"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s heeft de groep %s verlaten"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Volledige naam: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Locatie: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Thuispagina: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Over: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s is een profiel op afstand. U kunt alle privéberichten verzenden aan "
+"gebruikers op dezelfde server."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"Het bericht te is lang. De maximale lengte is %d tekens. De lengte van uw "
"bericht was %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Het directe bericht aan %s is verzonden"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Er is een fout opgetreden bij het verzonden van het directe bericht."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "U kunt uw eigen mededelingen niet herhalen."
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "U hebt die mededeling al herhaald."
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "De mededeling van %s is herhaald"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Er is een fout opgetreden bij het herhalen van de mededeling."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"De mededeling is te lang. De maximale lengte is %d tekens. Uw mededeling "
"bevatte %d tekens"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Het antwoord aan %s is verzonden"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Er is een fout opgetreden bij het opslaan van de mededeling."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Geef de naam op van de gebruiker waarop u wilt abonneren"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "De opgegeven gebruiker bestaat niet"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Abonneren op OMB-profielen op commando is niet mogelijk."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Geabonneerd op %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
"Geef de naam op van de gebruiker waarvoor u het abonnement wilt opzeggen"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Uw abonnement op %s is opgezegd"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Dit commando is nog niet geïmplementeerd."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificaties uitgeschakeld."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Het is niet mogelijk de mededelingen uit te schakelen."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificaties ingeschakeld."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Het is niet mogelijk de notificatie uit te schakelen."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Het aanmeldcommando is uitgeschakeld"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Deze verwijzing kan slechts één keer gebruikt worden en is twee minuten "
"geldig: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Het abonnement van %s is opgeheven"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "U bent op geen enkele gebruiker geabonneerd."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Niemand heeft een abonnenment op u."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "U bent lid van geen enkele groep."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5509,20 +5524,20 @@ msgstr ""
"tracks - nog niet beschikbaar\n"
"tracking - nog niet beschikbaar\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Er is geen instellingenbestand aangetroffen. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Er is gezocht naar instellingenbestanden op de volgende plaatsen: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
"U kunt proberen de installer uit te voeren om dit probleem op te lossen."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Naar het installatieprogramma gaan."
@@ -5700,49 +5715,49 @@ msgstr "Labels in de groepsmededelingen van %s"
msgid "This page is not available in a media type you accept"
msgstr "Deze pagina is niet beschikbaar in een mediatype dat u accepteert"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Niet ondersteund beeldbestandsformaat."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Dat bestand is te groot. De maximale bestandsgrootte is %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Gedeeltelijke upload."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Er is een systeemfout opgetreden tijdens het uploaden van het bestand."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Het bestand is geen afbeelding of het bestand is beschadigd."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Niet ondersteund beeldbestandsformaat."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Het bestand is zoekgeraakt."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Onbekend bestandstype"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Onbekende bron Postvak IN %d."
@@ -6024,7 +6039,7 @@ msgstr ""
"U hebt geen privéberichten. U kunt privéberichten verzenden aan andere "
"gebruikers. Mensen kunnen u privéberichten sturen die alleen u kunt lezen."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "van"
@@ -6182,23 +6197,23 @@ msgstr "W"
msgid "at"
msgstr "op"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "in context"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Herhaald door"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Op deze mededeling antwoorden"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Antwoorden"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Mededeling herhaald"
@@ -6341,7 +6356,7 @@ msgstr "Deze mededeling herhalen"
msgid "Revoke the \"%s\" role from this user"
msgstr "De gebruikersrol \"%s\" voor deze gebruiker intrekken"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus."
@@ -6467,89 +6482,93 @@ msgstr "Uitschrijven van deze gebruiker"
msgid "Unsubscribe"
msgstr "Abonnement opheffen"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Avatar bewerken"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Gebruikershandelingen"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Profielinstellingen bewerken"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Bewerken"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Deze gebruiker een direct bericht zenden"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Bericht"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Modereren"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Gebruikersrol"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Beheerder"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
@@ -6563,7 +6582,7 @@ msgstr "%s is geen geldige kleur."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s is geen geldige kleur. Gebruik drie of zes hexadecimale tekens."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index a16e15649..4b1110eae 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: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:30+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:14+0000\n"
"Language-Team: Norwegian Nynorsk\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
@@ -100,7 +100,7 @@ msgstr "Dette emneord finst ikkje."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -109,10 +109,8 @@ msgstr "Dette emneord finst ikkje."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Brukaren finst ikkje."
@@ -204,14 +202,14 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Fann ikkje API-metode."
@@ -225,8 +223,8 @@ msgstr "Fann ikkje API-metode."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Dette krev ein POST."
@@ -257,7 +255,7 @@ msgid "Could not save profile."
msgstr "Kan ikkje lagra profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -345,7 +343,7 @@ msgstr "Fann ingen status med den ID-en."
msgid "This status is already a favorite."
msgstr "Denne notisen er alt ein favoritt!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Kunne ikkje lagre favoritt."
@@ -469,7 +467,7 @@ msgstr "Fann ikkje API-metode."
msgid "You are already a member of that group."
msgstr "Du er allereie medlem av den gruppa"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -521,7 +519,7 @@ msgstr "Ugyldig storleik."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -588,9 +586,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Kallenamn"
@@ -664,12 +662,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Støttar ikkje bileteformatet."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s / Favorittar frå %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s oppdateringar favorisert av %s / %s."
@@ -679,7 +677,7 @@ msgstr "%s oppdateringar favorisert av %s / %s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Oppdateringar som svarar til %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s oppdateringar som svarar på oppdateringar frå %2$s / %3$s."
@@ -689,7 +687,7 @@ msgstr "%1$s oppdateringar som svarar på oppdateringar frå %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s offentleg tidsline"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s oppdateringar frå alle saman!"
@@ -704,12 +702,12 @@ msgstr "Svar til %s"
msgid "Repeats of %s"
msgstr "Svar til %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notisar merka med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringar frå %1$s på %2$s!"
@@ -738,7 +736,7 @@ msgstr "Ingen storleik."
msgid "Invalid size."
msgstr "Ugyldig storleik."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Brukarbilete"
@@ -770,7 +768,7 @@ msgid "Preview"
msgstr "Forhandsvis"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Slett"
@@ -853,8 +851,8 @@ msgstr "Lagring av informasjon feila."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Denne gruppa finst ikkje."
@@ -963,7 +961,7 @@ msgstr "Du er ikkje medlem av den gruppa."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Det var eit problem med sesjons billetten din."
@@ -1026,7 +1024,7 @@ msgstr "Sikker på at du vil sletta notisen?"
msgid "Do not delete this notice"
msgstr "Kan ikkje sletta notisen."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Slett denne notisen"
@@ -1301,7 +1299,7 @@ msgstr "skildringa er for lang (maks 140 teikn)."
msgid "Could not update group."
msgstr "Kann ikkje oppdatera gruppa."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Kunne ikkje lagre favoritt."
@@ -2014,7 +2012,7 @@ msgstr "Invitér nye brukarar"
msgid "You are already subscribed to these users:"
msgstr "Du tingar allereie oppdatering frå desse brukarane:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2142,7 +2140,7 @@ msgstr "%s blei medlem av gruppe %s"
msgid "You must be logged in to leave a group."
msgstr "Du må være innlogga for å melde deg ut av ei gruppe."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Du er ikkje medlem av den gruppa."
@@ -2261,12 +2259,12 @@ msgstr "Bruk dette skjemaet for å lage ein ny gruppe."
msgid "New message"
msgstr "Ny melding"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Du kan ikkje sende melding til denne brukaren."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ingen innhald."
@@ -2274,7 +2272,7 @@ msgstr "Ingen innhald."
msgid "No recipient specified."
msgstr "Ingen mottakar spesifisert."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2291,7 +2289,7 @@ msgstr "Melding"
msgid "Direct message to %s sent."
msgstr "Direkte melding til %s sendt"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax feil"
@@ -2409,7 +2407,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Notisen har ingen profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s sin status på %2$s"
@@ -2423,8 +2421,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Ikkje eit støtta dataformat."
@@ -2562,7 +2560,7 @@ msgstr "Det gamle passordet stemmer ikkje"
msgid "Error saving user; invalid."
msgstr "Feil ved lagring av brukar; fungerer ikkje."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Klarar ikkje lagra nytt passord."
@@ -2788,8 +2786,8 @@ msgstr ""
"1-64 små bokstavar eller tal, ingen punktum (og liknande) eller mellomrom"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Fullt namn"
@@ -2817,9 +2815,9 @@ msgid "Bio"
msgstr "Om meg"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Plassering"
@@ -2833,7 +2831,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Merkelappar"
@@ -3066,7 +3064,7 @@ msgstr "Tilbakestill passord"
msgid "Recover password"
msgstr "Hent fram passord"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Passord opphenting etterspurt"
@@ -3086,19 +3084,19 @@ msgstr "Avbryt"
msgid "Enter a nickname or email address."
msgstr "Skriv inn kallenamn eller epostadresse."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Ingen brukar med den epostadressa eller det brukarnamnet."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ingen registrert epostadresse for den brukaren."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Feil med lagring av adressestadfesting."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3106,23 +3104,23 @@ msgstr ""
"Instruksjonar for å få att passordet ditt er send til epostadressa som er "
"lagra i kontoen din."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Uventa passordnullstilling."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Passord må vera 6 tekn eller meir."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Passord og stadfesting stemmer ikkje."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Feil ved å setja brukar."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Lagra det nye passordet. Du er logga inn."
@@ -3288,7 +3286,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL til profilsida di på ei anna kompatibel mikrobloggingteneste."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Ting"
@@ -3331,7 +3329,7 @@ msgstr "Du kan ikkje registrera deg om du ikkje godtek vilkåra i lisensen."
msgid "You already repeated that notice."
msgstr "Du har allereie blokkert denne brukaren."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Lag"
@@ -3480,7 +3478,7 @@ msgstr "Paginering"
msgid "Description"
msgstr "Beskriving"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3592,68 +3590,68 @@ msgstr "%s gruppe"
msgid "%1$s group, page %2$d"
msgstr "%s medlemmar i gruppa, side %d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Gruppe profil"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Merknad"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Gruppe handlingar"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Utboks for %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Alle medlemmar"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "Lag"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3663,7 +3661,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3674,7 +3672,7 @@ msgstr ""
"**%s** er ei brukargruppe på %%%%site.name%%%%, ei [mikroblogging](http://en."
"wikipedia.org/wiki/Micro-blogging)-teneste"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
#, fuzzy
msgid "Admins"
msgstr "Administrator"
@@ -4222,12 +4220,12 @@ msgstr "Manglar argumentet ID."
msgid "Tag %s"
msgstr "Merkelapp %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Brukarprofil"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Bilete"
@@ -4570,19 +4568,19 @@ msgstr "Personleg"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4625,27 +4623,27 @@ msgstr "Kunne ikkje lagre melding."
msgid "Could not update message with new URI."
msgstr "Kunne ikkje oppdatere melding med ny URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Feil ved lagring av notis. Ukjend brukar."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4653,20 +4651,20 @@ msgid ""
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4699,29 +4697,29 @@ msgstr "Kan ikkje sletta tinging."
msgid "Couldn't delete subscription OMB token."
msgstr "Kan ikkje sletta tinging."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Kan ikkje sletta tinging."
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Melding til %1$s på %2$s"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Kunne ikkje laga gruppa."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Kunne ikkje bli med i gruppa."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Kunne ikkje bli med i gruppa."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Kunne ikkje lagra abonnement."
@@ -4945,7 +4943,7 @@ msgstr "Dult"
msgid "StatusNet software license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4954,12 +4952,12 @@ msgstr ""
"**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er ei mikrobloggingteneste. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4970,42 +4968,42 @@ msgstr ""
"%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Alle"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "lisens."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "« Etter"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Før »"
@@ -5021,6 +5019,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5122,7 +5124,7 @@ msgstr "SMS bekreftelse"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5201,11 +5203,11 @@ msgstr "Fjern"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "Profil"
@@ -5228,37 +5230,51 @@ msgstr "Endra passord"
msgid "Password changing is not allowed"
msgstr "Endra passord"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultat frå kommandoen"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Kommandoen utførd"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Kommandoen feila"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Orsak, men kommandoen er ikkje laga enno."
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Fann ingen profil med den IDen."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Brukaren har ikkje siste notis"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Kan ikkje oppdatera brukar med stadfesta e-postadresse."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Orsak, men kommandoen er ikkje laga enno."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Dytta!"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5266,203 +5282,201 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Fann ingen profil med den IDen."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Brukaren har ikkje siste notis"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Notis markert som favoritt."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Du er allereie medlem av den gruppa"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Kunne ikkje melde brukaren %s inn i gruppa %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s blei medlem av gruppe %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Kunne ikkje fjerne %s fra %s gruppa "
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s forlot %s gruppa"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Fullt namn: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Stad: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Heimeside: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Om: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Direkte melding til %s sendt"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Ein feil oppstod ved sending av direkte melding."
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Kan ikkje slå på notifikasjon."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Slett denne notisen"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Melding lagra"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Svar på denne notisen"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Spesifer namnet til brukaren du vil tinge"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Brukaren finst ikkje."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Du tingar ikkje oppdateringar til den profilen."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Tingar %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Spesifer namnet til brukar du vil fjerne tinging på"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Tingar ikkje %s lengre"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Kommando ikkje implementert."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notifikasjon av."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Kan ikkje skru av notifikasjon."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notifikasjon på."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Kan ikkje slå på notifikasjon."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Tingar ikkje %s lengre"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Du tingar ikkje oppdateringar til den profilen."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Kan ikkje tinga andre til deg."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Du er ikkje medlem av den gruppa."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5504,20 +5518,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Ingen stadfestingskode."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "Logg inn or sida"
@@ -5698,49 +5712,49 @@ msgstr "Merkelappar i %s gruppa sine notisar"
msgid "This page is not available in a media type you accept"
msgstr "Denne sida er ikkje tilgjengeleg i nokon mediatype du aksepterer."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Støttar ikkje bileteformatet."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Du kan lasta opp ein logo for gruppa."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Hallvegs opplasta."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Systemfeil ved opplasting av fil."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Korrupt bilete."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Støttar ikkje bileteformatet."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Mista fila vår."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Ukjend fil type"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5950,7 +5964,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " frå "
@@ -6106,25 +6120,25 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "Ingen innhald."
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Lag"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Svar på denne notisen"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Svar"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Melding lagra"
@@ -6273,7 +6287,7 @@ msgstr "Svar på denne notisen"
msgid "Revoke the \"%s\" role from this user"
msgstr "Ei liste over brukarane i denne gruppa."
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6407,93 +6421,97 @@ msgstr "Fjern tinging fra denne brukaren"
msgid "Unsubscribe"
msgstr "Fjern tinging"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Brukarbilete"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Brukarverkty"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Profilinnstillingar"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Send ei direktemelding til denne brukaren"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Melding"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Brukarprofil"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Administrator"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "eit par sekund sidan"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
@@ -6507,7 +6525,7 @@ msgstr "Heimesida er ikkje ei gyldig internettadresse."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Melding for lang - maksimum 140 teikn, du skreiv %d"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index 3a0bd39c3..816eb6e85 100644
--- a/locale/pl/LC_MESSAGES/statusnet.po
+++ b/locale/pl/LC_MESSAGES/statusnet.po
@@ -10,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:36+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:20+0000\n"
"Last-Translator: Piotr DrÄ…g <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,7 +19,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.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pl\n"
"X-Message-Group: out-statusnet\n"
@@ -97,7 +97,7 @@ msgstr "Nie ma takiej strony"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,10 +106,8 @@ msgstr "Nie ma takiej strony"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Brak takiego użytkownika."
@@ -209,14 +207,14 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Nie odnaleziono metody API."
@@ -229,8 +227,8 @@ msgstr "Nie odnaleziono metody API."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Ta metoda wymaga POST."
@@ -260,7 +258,7 @@ msgid "Could not save profile."
msgstr "Nie można zapisać profilu."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -348,7 +346,7 @@ msgstr "Nie odnaleziono stanów z tym identyfikatorem."
msgid "This status is already a favorite."
msgstr "Ten stan jest już ulubiony."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Nie można utworzyć ulubionego wpisu."
@@ -466,7 +464,7 @@ msgstr "Nie odnaleziono grupy."
msgid "You are already a member of that group."
msgstr "Jesteś już członkiem tej grupy."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Zostałeś zablokowany w tej grupie przez administratora."
@@ -516,7 +514,7 @@ msgstr "Nieprawidłowy token."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -584,9 +582,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Pseudonim"
@@ -655,12 +653,12 @@ msgstr "Maksymalny rozmiar wpisu wynosi %d znaków, w tym adres URL załącznika
msgid "Unsupported format."
msgstr "Nieobsługiwany format."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s/ulubione wpisy od %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Użytkownik %1$s aktualizuje ulubione według %2$s/%2$s."
@@ -670,7 +668,7 @@ msgstr "Użytkownik %1$s aktualizuje ulubione według %2$s/%2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s/aktualizacje wspominajÄ…ce %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s aktualizuje tę odpowiedź na aktualizacje od %2$s/%3$s."
@@ -680,7 +678,7 @@ msgstr "%1$s aktualizuje tę odpowiedź na aktualizacje od %2$s/%3$s."
msgid "%s public timeline"
msgstr "Publiczna oś czasu użytkownika %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Użytkownik %s aktualizuje od każdego."
@@ -695,12 +693,12 @@ msgstr "Powtórzone dla %s"
msgid "Repeats of %s"
msgstr "Powtórzenia %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Wpisy ze znacznikiem %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualizacje ze znacznikiem %1$s na %2$s."
@@ -728,7 +726,7 @@ msgstr "Brak rozmiaru."
msgid "Invalid size."
msgstr "Nieprawidłowy rozmiar."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Awatar"
@@ -760,7 +758,7 @@ msgid "Preview"
msgstr "PodglÄ…d"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Usuń"
@@ -843,8 +841,8 @@ msgstr "Zapisanie informacji o blokadzie nie powiodło się."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Nie ma takiej grupy."
@@ -945,7 +943,7 @@ msgstr "Nie jesteś właścicielem tej aplikacji."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Wystąpił problem z tokenem sesji."
@@ -1005,7 +1003,7 @@ msgstr "Jesteś pewien, że chcesz usunąć ten wpis?"
msgid "Do not delete this notice"
msgstr "Nie usuwaj tego wpisu"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Usuń ten wpis"
@@ -1256,7 +1254,7 @@ msgstr "opis jest za długi (maksymalnie %d znaków)."
msgid "Could not update group."
msgstr "Nie można zaktualizować grupy."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Nie można utworzyć aliasów."
@@ -1955,7 +1953,7 @@ msgstr "Zaproś nowych użytkowników"
msgid "You are already subscribed to these users:"
msgstr "Jesteś już subskrybowany do tych użytkowników:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2086,7 +2084,7 @@ msgstr "Użytkownik %1$s dołączył do grupy %2$s"
msgid "You must be logged in to leave a group."
msgstr "Musisz być zalogowany, aby opuścić grupę."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Nie jesteś członkiem tej grupy."
@@ -2201,12 +2199,12 @@ msgstr "Użyj tego formularza, aby utworzyć nową grupę."
msgid "New message"
msgstr "Nowa wiadomość"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Nie można wysłać wiadomości do tego użytkownika."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Brak treści."
@@ -2214,7 +2212,7 @@ msgstr "Brak treści."
msgid "No recipient specified."
msgstr "Nie podano odbiorcy."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Nie wysyłaj wiadomości do siebie, po prostu powiedz to sobie po cichu."
@@ -2228,7 +2226,7 @@ msgstr "Wysłano wiadomość"
msgid "Direct message to %s sent."
msgstr "Wysłano bezpośrednią wiadomość do użytkownika %s."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "BÅ‚Ä…d AJAX"
@@ -2348,7 +2346,7 @@ msgstr "Programiści mogą zmodyfikować ustawienia rejestracji swoich aplikacji
msgid "Notice has no profile"
msgstr "Wpis nie posiada profilu"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Stan użytkownika %1$s na %2$s"
@@ -2361,8 +2359,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "To nie jest obsługiwany format danych."
@@ -2493,7 +2491,7 @@ msgstr "Niepoprawne poprzednie hasło"
msgid "Error saving user; invalid."
msgstr "Błąd podczas zapisywania użytkownika; nieprawidłowy."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Nie można zapisać nowego hasła."
@@ -2709,8 +2707,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 małe litery lub liczby, bez spacji i znaków przestankowych"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "ImiÄ™ i nazwisko"
@@ -2737,9 +2735,9 @@ msgid "Bio"
msgstr "O mnie"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Położenie"
@@ -2753,7 +2751,7 @@ msgstr "Podziel się swoim obecnym położeniem podczas wysyłania wpisów"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Znaczniki"
@@ -2995,7 +2993,7 @@ msgstr "Przywróć hasło"
msgid "Recover password"
msgstr "Przywróć hasło"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Zażądano przywracania hasła"
@@ -3015,19 +3013,19 @@ msgstr "Przywróć"
msgid "Enter a nickname or email address."
msgstr "Podaj pseudonim lub adres e-mail."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Brak użytkownika z tym adresem e-mail lub nazwą użytkownika."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Brak zarejestrowanych adresów e-mail dla tego użytkownika."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "BÅ‚Ä…d podczas zapisywania potwierdzenia adresu."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3035,23 +3033,23 @@ msgstr ""
"Instrukcje przywracania hasła zostały wysłane na adres e-mail zarejestrowany "
"z twoim kontem."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Nieoczekiwane przywrócenie hasła."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Hasło musi mieć sześć lub więcej znaków."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Hasło i potwierdzenie nie pasują do siebie."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Błąd podczas ustawiania użytkownika."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Pomyślnie zapisano nowe hasło. Jesteś teraz zalogowany."
@@ -3216,7 +3214,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Adres URL profilu na innej, zgodnej usłudze mikroblogowania"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subskrybuj"
@@ -3254,7 +3252,7 @@ msgstr "Nie można powtórzyć własnego wpisu."
msgid "You already repeated that notice."
msgstr "Już powtórzono ten wpis."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Powtórzono"
@@ -3397,7 +3395,7 @@ msgstr "Organizacja"
msgid "Description"
msgstr "Opis"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statystyki"
@@ -3518,67 +3516,67 @@ msgstr "Grupa %s"
msgid "%1$s group, page %2$d"
msgstr "Grupa %1$s, strona %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Profil grupy"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "Adres URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Wpis"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Aliasy"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Działania grupy"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Kanał wpisów dla grupy %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF dla grupy %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Członkowie"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Brak)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Wszyscy członkowie"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Utworzono"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3594,7 +3592,7 @@ msgstr ""
"action.register%%%%), aby stać się częścią tej grupy i wiele więcej. "
"([Przeczytaj więcej](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3607,7 +3605,7 @@ msgstr ""
"narzędziu [StatusNet](http://status.net/). Jej członkowie dzielą się "
"krótkimi wiadomościami o swoim życiu i zainteresowaniach. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administratorzy"
@@ -4161,12 +4159,12 @@ msgstr "Brak parametru identyfikatora."
msgid "Tag %s"
msgstr "Znacznik %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Profil użytkownika"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Zdjęcie"
@@ -4507,7 +4505,7 @@ msgstr "Wersja"
msgid "Author(s)"
msgstr "Autorzy"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4516,13 +4514,13 @@ msgstr ""
"Żaden plik nie może być większy niż %d bajty, a wysłany plik miał %d bajty. "
"Spróbuj wysłać mniejszą wersję."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Plik tej wielkości przekroczyłby przydział użytkownika wynoszący %d bajty."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4562,27 +4560,27 @@ msgstr "Nie można wprowadzić wiadomości."
msgid "Could not update message with new URI."
msgstr "Nie można zaktualizować wiadomości za pomocą nowego adresu URL."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "BÅ‚Ä…d bazy danych podczas wprowadzania znacznika mieszania: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problem podczas zapisywania wpisu. Za długi."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Za dużo wpisów w za krótkim czasie, weź głęboki oddech i wyślij ponownie za "
"kilka minut."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4590,19 +4588,19 @@ msgstr ""
"Za dużo takich samych wiadomości w za krótkim czasie, weź głęboki oddech i "
"wyślij ponownie za kilka minut."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Zabroniono ci wysyłania wpisów na tej witrynie."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problem podczas zapisywania wpisu."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4631,28 +4629,28 @@ msgstr "Nie można usunąć autosubskrypcji."
msgid "Couldn't delete subscription OMB token."
msgstr "Nie można usunąć tokenu subskrypcji OMB."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Nie można usunąć subskrypcji."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Witaj w %1$s, @%2$s."
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Nie można utworzyć grupy."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Nie można ustawić adresu URI grupy."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Nie można ustawić członkostwa w grupie."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Nie można zapisać informacji o lokalnej grupie."
@@ -4856,7 +4854,7 @@ msgstr "Odznaka"
msgid "StatusNet software license"
msgstr "Licencja oprogramowania StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4865,12 +4863,12 @@ msgstr ""
"**%%site.name%%** jest usługą mikroblogowania prowadzoną przez [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** jest usługą mikroblogowania. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4881,45 +4879,45 @@ msgstr ""
"status.net/) w wersji %s, dostępnego na [Powszechnej Licencji Publicznej GNU "
"Affero](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licencja zawartości witryny"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Treść i dane %1$s są prywatne i poufne."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością %1$s. Wszystkie prawa "
"zastrzeżone."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością współtwórców. Wszystkie "
"prawa zastrzeżone."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Wszystko "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licencja."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginacja"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Później"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Wcześniej"
@@ -4935,6 +4933,10 @@ msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści XML."
msgid "Can't handle embedded Base64 content yet."
msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści Base64."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5023,7 +5025,7 @@ msgstr ""
"Zasób API wymaga dostępu do zapisu i do odczytu, ale powiadasz dostęp tylko "
"do odczytu."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5100,11 +5102,11 @@ msgstr "Unieważnij"
msgid "Attachments"
msgstr "Załączniki"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Dostawca"
@@ -5124,37 +5126,50 @@ msgstr "Zmiana hasła nie powiodła się"
msgid "Password changing is not allowed"
msgstr "Zmiana hasła nie jest dozwolona"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Wyniki polecenia"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Zakończono polecenie"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Polecenie nie powiodło się"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Te polecenie nie zostało jeszcze zaimplementowane."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Wpis z tym identyfikatorem nie istnieje."
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Użytkownik nie posiada ostatniego wpisu."
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Nie można odnaleźć użytkownika z pseudonimem %s."
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Nie można odnaleźć lokalnego użytkownika z pseudonimem %s."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Te polecenie nie zostało jeszcze zaimplementowane."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Szturchanie samego siebie nie ma zbyt wiele sensu."
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Wysłano szturchnięcie do użytkownika %s."
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5165,200 +5180,200 @@ msgstr ""
"Subskrybenci: %2$s\n"
"Wpisy: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Wpis z tym identyfikatorem nie istnieje."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Użytkownik nie posiada ostatniego wpisu."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Zaznaczono wpis jako ulubiony."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Jesteś już członkiem tej grupy."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Nie można dołączyć użytkownika %1$s do grupy %2$s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "Użytkownik %1$s dołączył do grupy %2$s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Nie można usunąć użytkownika %1$s z grupy %2$s."
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "Użytkownik %1$s opuścił grupę %2$s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "ImiÄ™ i nazwisko: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Położenie: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Strona domowa: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "O mnie: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s to zdalny profil; można wysyłać bezpośrednie wiadomości tylko do "
+"użytkowników na tym samym serwerze."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d."
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Wysłano bezpośrednią wiadomość do użytkownika %s."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Błąd podczas wysyłania bezpośredniej wiadomości."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Nie można powtórzyć własnego wpisu"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Już powtórzono ten wpis"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Powtórzono wpis od użytkownika %s"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "BÅ‚Ä…d podczas powtarzania wpisu."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Wpis jest za długi - maksymalnie %1$d znaków, wysłano %2$d."
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Wysłano odpowiedź do %s."
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "BÅ‚Ä…d podczas zapisywania wpisu."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Podaj nazwę użytkownika do subskrybowania."
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Brak takiego użytkownika."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Nie można subskrybować profili OMB za pomocą polecenia."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Subskrybowano użytkownika %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Podaj nazwę użytkownika do usunięcia subskrypcji."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Usunięto subskrypcję użytkownika %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Nie zaimplementowano polecenia."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Wyłączono powiadomienia."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Nie można wyłączyć powiadomień."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "WÅ‚Ä…czono powiadomienia."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Nie można włączyć powiadomień."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Polecenie logowania jest wyłączone"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Tego odnośnika można użyć tylko raz i będzie prawidłowy tylko przez dwie "
"minuty: %s."
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Usunięto subskrypcję użytkownika %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Nie subskrybujesz nikogo."
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Nikt ciÄ™ nie subskrybuje."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Nie jesteś członkiem żadnej grupy."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5440,19 +5455,19 @@ msgstr ""
"tracks - jeszcze nie zaimplementowano\n"
"tracking - jeszcze nie zaimplementowano\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Nie odnaleziono pliku konfiguracji."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Szukano plików konfiguracji w następujących miejscach: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Należy uruchomić instalator, aby to naprawić."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Przejdź do instalatora."
@@ -5630,49 +5645,49 @@ msgstr "Znaczniki we wpisach grupy %s"
msgid "This page is not available in a media type you accept"
msgstr "Ta strona jest niedostępna dla akceptowanego typu medium"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Nieobsługiwany format pliku obrazu."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Ten plik jest za duży. Maksymalny rozmiar pliku to %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Częściowo wysłano."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Błąd systemu podczas wysyłania pliku."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "To nie jest obraz lub lub plik jest uszkodzony."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Nieobsługiwany format pliku obrazu."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Utracono plik."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Nieznany typ pliku"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "KB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Nieznane źródło skrzynki odbiorczej %d."
@@ -5954,7 +5969,7 @@ msgstr ""
"rozmowę z innymi użytkownikami. Inni mogą wysyłać ci wiadomości tylko dla "
"twoich oczu."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "z"
@@ -6107,23 +6122,23 @@ msgstr "Zachód"
msgid "at"
msgstr "w"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "w rozmowie"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Powtórzone przez"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Odpowiedz na ten wpis"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Odpowiedz"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Powtórzono wpis"
@@ -6265,7 +6280,7 @@ msgstr "Powtórz ten wpis"
msgid "Revoke the \"%s\" role from this user"
msgstr "Unieważnij rolę \"%s\" tego użytkownika"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
"Nie określono pojedynczego użytkownika dla trybu pojedynczego użytkownika."
@@ -6392,89 +6407,93 @@ msgstr "Zrezygnuj z subskrypcji tego użytkownika"
msgid "Unsubscribe"
msgstr "Zrezygnuj z subskrypcji"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Zmodyfikuj awatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Czynności użytkownika"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Zmodyfikuj ustawienia profilu"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Edycja"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Wyślij bezpośrednią wiadomość do tego użytkownika"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Wiadomość"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderuj"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Rola użytkownika"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "Administrator"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "kilka sekund temu"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "około rok temu"
@@ -6490,7 +6509,7 @@ msgstr ""
"%s nie jest prawidłowym kolorem. Użyj trzech lub sześciu znaków "
"szesnastkowych."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Wiadomość jest za długa - maksymalnie %1$d znaków, wysłano %2$d."
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index 7041bea81..4d94d95b0 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:48+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:23+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
@@ -98,7 +98,7 @@ msgstr "Página não encontrada."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -107,10 +107,8 @@ msgstr "Página não encontrada."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Utilizador não encontrado."
@@ -208,14 +206,14 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método da API não encontrado."
@@ -228,8 +226,8 @@ msgstr "Método da API não encontrado."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requer um POST."
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "Não foi possível gravar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "Nenhum estado encontrado com esse ID."
msgid "This status is already a favorite."
msgstr "Este estado já é um favorito."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Não foi possível criar o favorito."
@@ -464,7 +462,7 @@ msgstr "Grupo não foi encontrado!"
msgid "You are already a member of that group."
msgstr "Já é membro desse grupo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Foi bloqueado desse grupo pelo gestor."
@@ -515,7 +513,7 @@ msgstr "Tamanho inválido."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -582,9 +580,9 @@ msgstr "Conta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Utilizador"
@@ -655,12 +653,12 @@ msgstr "Tamanho máx. das notas é %d caracteres, incluíndo a URL do anexo."
msgid "Unsupported format."
msgstr "Formato não suportado."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritas de %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizações preferidas por %2$s / %2$s."
@@ -670,7 +668,7 @@ msgstr "%1$s actualizações preferidas por %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Actualizações que mencionam %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s actualizações em resposta a actualizações de %2$s / %3$s."
@@ -680,7 +678,7 @@ msgstr "%1$s actualizações em resposta a actualizações de %2$s / %3$s."
msgid "%s public timeline"
msgstr "Notas públicas de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s actualizações de todos!"
@@ -695,12 +693,12 @@ msgstr "Repetida para %s"
msgid "Repeats of %s"
msgstr "Repetências de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notas categorizadas com %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizações categorizadas com %1$s em %2$s!"
@@ -728,7 +726,7 @@ msgstr "Tamanho não definido."
msgid "Invalid size."
msgstr "Tamanho inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -760,7 +758,7 @@ msgid "Preview"
msgstr "Antevisão"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Apagar"
@@ -843,8 +841,8 @@ msgstr "Não foi possível gravar informação do bloqueio."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Grupo não foi encontrado."
@@ -949,7 +947,7 @@ msgstr "Não é membro deste grupo."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com a sua sessão."
@@ -1013,7 +1011,7 @@ msgstr "Tem a certeza de que quer apagar esta nota?"
msgid "Do not delete this notice"
msgstr "Não apagar esta nota"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Apagar esta nota"
@@ -1278,7 +1276,7 @@ msgstr "descrição é demasiada extensa (máx. %d caracteres)."
msgid "Could not update group."
msgstr "Não foi possível actualizar o grupo."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Não foi possível criar sinónimos."
@@ -1989,7 +1987,7 @@ msgstr "Convidar novos utilizadores"
msgid "You are already subscribed to these users:"
msgstr "Já subscreveu estes utilizadores:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2120,7 +2118,7 @@ msgstr "%1$s juntou-se ao grupo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Precisa de iniciar uma sessão para deixar um grupo."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Não é um membro desse grupo."
@@ -2239,12 +2237,12 @@ msgstr "Use este formulário para criar um grupo novo."
msgid "New message"
msgstr "Mensagem nova"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Não pode enviar uma mensagem a este utilizador."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Sem conteúdo!"
@@ -2252,7 +2250,7 @@ msgstr "Sem conteúdo!"
msgid "No recipient specified."
msgstr "Não especificou um destinatário."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Não auto-envie uma mensagem; basta lê-la baixinho a si próprio."
@@ -2266,7 +2264,7 @@ msgstr "Mensagem enviada"
msgid "Direct message to %s sent."
msgstr "Mensagem directa para %s foi enviada."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Erro do Ajax"
@@ -2388,7 +2386,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Nota não tem perfil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Estado de %1$s em %2$s"
@@ -2401,8 +2399,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -2540,7 +2538,7 @@ msgstr "Senha antiga incorrecta."
msgid "Error saving user; invalid."
msgstr "Erro ao guardar utilizador; inválido."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Não é possível guardar a nova senha."
@@ -2755,8 +2753,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 letras minúsculas ou números, sem pontuação ou espaços"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nome completo"
@@ -2783,9 +2781,9 @@ msgid "Bio"
msgstr "Biografia"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Localidade"
@@ -2799,7 +2797,7 @@ msgstr "Compartilhar a minha localização presente ao publicar notas"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Categorias"
@@ -3043,7 +3041,7 @@ msgstr "Reiniciar senha"
msgid "Recover password"
msgstr "Recuperar senha"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Solicitada recuperação da senha"
@@ -3063,20 +3061,20 @@ msgstr "Reiniciar"
msgid "Enter a nickname or email address."
msgstr "Introduza uma utilizador ou um endereço de correio electrónico."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
"Não existe nenhum utilizador com esse correio electrónico nem com esse nome."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Nenhum endereço de email registado para esse utilizador."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Erro ao guardar confirmação do endereço."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3084,23 +3082,23 @@ msgstr ""
"Instruções para recuperação da sua senha foram enviadas para o correio "
"electrónico registado na sua conta."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Reinício inesperado da senha."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Senha tem de ter 6 ou mais caracteres."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "A senha e a confirmação não coincidem."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Erro ao configurar utilizador."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "A senha nova foi gravada com sucesso. Iniciou uma sessão."
@@ -3264,7 +3262,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil noutro serviço de microblogues compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Subscrever"
@@ -3302,7 +3300,7 @@ msgstr "Não pode repetir a sua própria nota."
msgid "You already repeated that notice."
msgstr "Já repetiu essa nota."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repetida"
@@ -3451,7 +3449,7 @@ msgstr "Paginação"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3572,67 +3570,67 @@ msgstr "Grupo %s"
msgid "%1$s group, page %2$d"
msgstr "Membros do grupo %1$s, página %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Anotação"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Sinónimos"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Acções do grupo"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de notas do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de notas do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de notas do grupo %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF do grupo %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3648,7 +3646,7 @@ msgstr ""
"[Registe-se agora](%%action.register%%) para se juntar a este grupo e a "
"muitos mais! ([Saber mais](%%doc.help%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3661,7 +3659,7 @@ msgstr ""
"programa de Software Livre [StatusNet](http://status.net/). Os membros deste "
"grupo partilham mensagens curtas acerca das suas vidas e interesses. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Gestores"
@@ -4221,12 +4219,12 @@ msgstr "Argumento de identificação (ID) em falta."
msgid "Tag %s"
msgstr "Categoria %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Perfil"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4567,7 +4565,7 @@ msgstr "Versão"
msgid "Author(s)"
msgstr "Autores"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4576,13 +4574,13 @@ msgstr ""
"Nenhum ficheiro pode ter mais de %d bytes e o que enviou tinha %d bytes. "
"Tente carregar uma versão menor."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
"Um ficheiro desta dimensão excederia a sua quota de utilizador de %d bytes."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Um ficheiro desta dimensão excederia a sua quota mensal de %d bytes."
@@ -4624,27 +4622,27 @@ msgstr "Não foi possível inserir a mensagem."
msgid "Could not update message with new URI."
msgstr "Não foi possível actualizar a mensagem com a nova URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro na base de dados ao inserir a marca: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problema na gravação da nota. Demasiado longa."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problema na gravação da nota. Utilizador desconhecido."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiadas notas, demasiado rápido; descanse e volte a publicar daqui a "
"alguns minutos."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4652,20 +4650,20 @@ msgstr ""
"Demasiadas mensagens duplicadas, demasiado rápido; descanse e volte a "
"publicar daqui a alguns minutos."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Está proibido de publicar notas neste site."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4695,29 +4693,29 @@ msgstr "Não foi possível apagar a auto-subscrição."
msgid "Couldn't delete subscription OMB token."
msgstr "Não foi possível apagar a subscrição."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Não foi possível apagar a subscrição."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%1$s dá-lhe as boas-vindas, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Não foi possível configurar membros do grupo."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Não foi possível configurar membros do grupo."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Não foi possível gravar a subscrição."
@@ -4939,7 +4937,7 @@ msgstr "Emblema"
msgid "StatusNet software license"
msgstr "Licença de software do StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4948,12 +4946,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblogues. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4964,41 +4962,41 @@ msgstr ""
"disponibilizado nos termos da [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licença de conteúdos do site"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Tudo "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licença."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Posteriores"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Anteriores"
@@ -5014,6 +5012,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5107,7 +5109,7 @@ msgstr "Configuração das localizações"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5186,11 +5188,11 @@ msgstr "Remover"
msgid "Attachments"
msgstr "Anexos"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Fornecedor"
@@ -5210,37 +5212,50 @@ msgstr "Não foi possível mudar a palavra-chave"
msgid "Password changing is not allowed"
msgstr "Não é permitido mudar a palavra-chave"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultados do comando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Comando terminado"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Comando falhou"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Desculpe, este comando ainda não foi implementado."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Não existe nenhuma nota com essa identificação"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Utilizador não tem nenhuma última nota"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Não foi encontrado um utilizador com a alcunha %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Não foi encontrado um utilizador com a alcunha %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Desculpe, este comando ainda não foi implementado."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Não faz muito sentido tocar-nos a nós mesmos!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Cotovelada enviada a %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5251,198 +5266,196 @@ msgstr ""
"Subscritores: %2$s\n"
"Notas: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Não existe nenhuma nota com essa identificação"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Utilizador não tem nenhuma última nota"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Nota marcada como favorita."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Já é membro desse grupo"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Não foi possível juntar o utilizador %s ao grupo %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s juntou-se ao grupo %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Não foi possível remover o utilizador %s do grupo %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s deixou o grupo %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localidade: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Página pessoal: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Sobre: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Mensagem demasiado extensa - máx. %d caracteres, enviou %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Mensagem directa para %s enviada"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Erro no envio da mensagem directa."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Não pode repetir a sua própria nota"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Já repetiu essa nota"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Nota de %s repetida"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Erro ao repetir nota."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Nota demasiado extensa - máx. %d caracteres, enviou %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Resposta a %s enviada"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Erro ao gravar nota."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Introduza o nome do utilizador para subscrever"
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "Utilizador não encontrado."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Não subscreveu esse perfil."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Subscreveu %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Introduza o nome do utilizador para deixar de subscrever"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Deixou de subscrever %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Comando ainda não implementado."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificação desligada."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Não foi possível desligar a notificação."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificação ligada."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Não foi possível ligar a notificação."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Comando para iniciar sessão foi desactivado"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Esta ligação é utilizável uma única vez e só durante os próximos 2 minutos: %"
"s"
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Deixou de subscrever %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Não subscreveu ninguém."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Subscreveu esta pessoa:"
msgstr[1] "Subscreveu estas pessoas:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ninguém subscreve as suas notas."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Não está em nenhum grupo."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
#, fuzzy
msgid ""
"Commands:\n"
@@ -5522,19 +5535,19 @@ msgstr ""
"tracks - ainda não implementado.\n"
"tracking - ainda não implementado.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Ficheiro de configuração não encontrado. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Procurei ficheiros de configuração nos seguintes sítios: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Talvez queira correr o instalador para resolver esta questão."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5712,49 +5725,49 @@ msgstr "Categorias nas notas do grupo %s"
msgid "This page is not available in a media type you accept"
msgstr "Esta página não está disponível num formato que você aceite"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato do ficheiro da imagem não é suportado."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Esse ficheiro é demasiado grande. O tamanho máximo de ficheiro é %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Transferência parcial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Ocorreu um erro de sistema ao transferir o ficheiro."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Ficheiro não é uma imagem ou está corrompido."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato do ficheiro da imagem não é suportado."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Perdi o nosso ficheiro."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tipo do ficheiro é desconhecido"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "Língua desconhecida \"%s\"."
@@ -6035,7 +6048,7 @@ msgstr ""
"conversa com outros utilizadores. Outros podem enviar-lhe mensagens, a que "
"só você terá acesso."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "de"
@@ -6191,23 +6204,23 @@ msgstr "O"
msgid "at"
msgstr "coords."
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Responder a esta nota"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Nota repetida"
@@ -6349,7 +6362,7 @@ msgstr "Repetir esta nota"
msgid "Revoke the \"%s\" role from this user"
msgstr "Bloquear acesso deste utilizador a este grupo"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6475,92 +6488,96 @@ msgstr "Deixar de subscrever este utilizador"
msgid "Unsubscribe"
msgstr "Abandonar"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Editar Avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Acções do utilizador"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Editar configurações do perfil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Enviar mensagem directa a este utilizador"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Mensagem"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderar"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Perfil"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "Gestores"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "Moderar"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "há alguns segundos"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "há cerca de um ano"
@@ -6574,7 +6591,7 @@ msgstr "%s não é uma cor válida!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s não é uma cor válida! Use 3 ou 6 caracteres hexadecimais."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Mensagem demasiado extensa - máx. %1$d caracteres, enviou %2$d."
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index 51d926eba..a431c99b8 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -2,6 +2,7 @@
#
# Author@translatewiki.net: Aracnus
# Author@translatewiki.net: Ewout
+# Author@translatewiki.net: Luckas Blade
# Author@translatewiki.net: McDutchie
# Author@translatewiki.net: Vuln
# --
@@ -11,12 +12,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:51+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:27+0000\n"
"Language-Team: Brazilian Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
@@ -76,7 +77,6 @@ msgid "Save access settings"
msgstr "Salvar as configurações de acesso"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Salvar"
@@ -97,7 +97,7 @@ msgstr "Esta página não existe."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,10 +106,8 @@ msgstr "Esta página não existe."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Este usuário não existe."
@@ -209,14 +207,14 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "O método da API não foi encontrado!"
@@ -229,8 +227,8 @@ msgstr "O método da API não foi encontrado!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Este método requer um POST."
@@ -261,7 +259,7 @@ msgid "Could not save profile."
msgstr "Não foi possível salvar o perfil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -349,7 +347,7 @@ msgstr "Não foi encontrado nenhum status com esse ID."
msgid "This status is already a favorite."
msgstr "Esta mensagem já é favorita!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Não foi possível criar a favorita."
@@ -468,7 +466,7 @@ msgstr "O grupo não foi encontrado!"
msgid "You are already a member of that group."
msgstr "Você já é membro desse grupo."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "O administrador desse grupo bloqueou sua inscrição."
@@ -518,7 +516,7 @@ msgstr "Token inválido."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -591,9 +589,9 @@ msgstr "Conta"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Usuário"
@@ -662,12 +660,12 @@ msgstr "O tamanho máximo da mensagem é de %s caracteres"
msgid "Unsupported format."
msgstr "Formato não suportado."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoritas de %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
@@ -677,7 +675,7 @@ msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Mensagens mencionando %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s."
@@ -687,7 +685,7 @@ msgstr "%1$s mensagens em resposta a mensagens de %2$s / %3$s."
msgid "%s public timeline"
msgstr "Mensagens públicas de %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s mensagens de todo mundo!"
@@ -702,12 +700,12 @@ msgstr "Repetida para %s"
msgid "Repeats of %s"
msgstr "Repetições de %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Mensagens etiquetadas como %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mensagens etiquetadas como %1$s no %2$s!"
@@ -735,7 +733,7 @@ msgstr "Sem tamanho definido."
msgid "Invalid size."
msgstr "Tamanho inválido."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -768,7 +766,7 @@ msgid "Preview"
msgstr "Visualização"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Excluir"
@@ -852,8 +850,8 @@ msgstr "Não foi possível salvar a informação de bloqueio."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Esse grupo não existe."
@@ -954,7 +952,7 @@ msgstr "Você não é o dono desta aplicação."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com o seu token de sessão."
@@ -1015,7 +1013,7 @@ msgstr "Tem certeza que deseja excluir esta mensagem?"
msgid "Do not delete this notice"
msgstr "Não excluir esta mensagem."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Excluir esta mensagem"
@@ -1268,7 +1266,7 @@ msgstr "descrição muito extensa (máximo %d caracteres)."
msgid "Could not update group."
msgstr "Não foi possível atualizar o grupo."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Não foi possível criar os apelidos."
@@ -1982,7 +1980,7 @@ msgstr "Convidar novos usuários"
msgid "You are already subscribed to these users:"
msgstr "Você já está assinando esses usuários:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2029,7 +2027,6 @@ msgstr "Você pode, opcionalmente, adicionar uma mensagem pessoal ao convite."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Enviar"
@@ -2114,7 +2111,7 @@ msgstr "%1$s associou-se ao grupo %2$s"
msgid "You must be logged in to leave a group."
msgstr "Você deve estar autenticado para sair de um grupo."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Você não é um membro desse grupo."
@@ -2232,12 +2229,12 @@ msgstr "Utilize este formulário para criar um novo grupo."
msgid "New message"
msgstr "Nova mensagem"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Você não pode enviar mensagens para este usuário."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Nenhum conteúdo!"
@@ -2245,7 +2242,7 @@ msgstr "Nenhum conteúdo!"
msgid "No recipient specified."
msgstr "Não foi especificado nenhum destinatário."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2261,7 +2258,7 @@ msgstr "A mensagem foi enviada"
msgid "Direct message to %s sent."
msgstr "A mensagem direta para %s foi enviada."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Erro no Ajax"
@@ -2383,7 +2380,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "A mensagem não está associada a nenhum perfil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Mensagem de %1$s no %2$s"
@@ -2396,8 +2393,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Não é um formato de dados suportado."
@@ -2530,7 +2527,7 @@ msgstr "A senha anterior está errada"
msgid "Error saving user; invalid."
msgstr "Erro ao salvar usuário; inválido."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Não é possível salvar a nova senha."
@@ -2745,8 +2742,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 letras minúsculas ou números, sem pontuações ou espaços"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Nome completo"
@@ -2773,9 +2770,9 @@ msgid "Bio"
msgstr "Descrição"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Localização"
@@ -2789,7 +2786,7 @@ msgstr "Compartilhe minha localização atual ao publicar mensagens"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Etiquetas"
@@ -3032,7 +3029,7 @@ msgstr "Restaurar a senha"
msgid "Recover password"
msgstr "Recuperar a senha"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Foi solicitada a recuperação da senha"
@@ -3052,21 +3049,21 @@ msgstr "Restaurar"
msgid "Enter a nickname or email address."
msgstr "Digite a identificação ou endereço de e-mail."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
"Não foi encontrado nenhum usuário com essa identificação ou endereço de "
"email."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Nenhum endereço de e-mail registrado para esse usuário."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Erro ao salvar o endereço de confirmação."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3074,23 +3071,23 @@ msgstr ""
"As instruções para recuperar a sua senha foram enviadas para o endereço de e-"
"mail informado no seu cadastro."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Restauração inesperada da senha."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "A senha deve ter 6 ou mais caracteres."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "A senha e a confirmação não coincidem."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Erro na configuração do usuário."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
"A nova senha foi salva com sucesso. A partir de agora você já está "
@@ -3256,7 +3253,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil em outro serviço de microblog compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Assinar"
@@ -3293,7 +3290,7 @@ msgstr "Você não pode repetir sua própria mensagem."
msgid "You already repeated that notice."
msgstr "Você já repetiu essa mensagem."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Repetida"
@@ -3439,7 +3436,7 @@ msgstr "Organização"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3560,67 +3557,67 @@ msgstr "Grupo %s"
msgid "%1$s group, page %2$d"
msgstr "Grupo %1$s, pág. %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Perfil do grupo"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "Site"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Mensagem"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Apelidos"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Ações do grupo"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de mensagens do grupo %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF para o grupo %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3636,7 +3633,7 @@ msgstr ""
"para se tornar parte deste grupo e muito mais! ([Saiba mais](%%%%doc.help%%%"
"%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3649,7 +3646,7 @@ msgstr ""
"[StatusNet](http://status.net/). Seus membros compartilham mensagens curtas "
"sobre suas vidas e interesses. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administradores"
@@ -3843,9 +3840,8 @@ msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horário padrão para o seu site; geralmente UTC."
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Idioma padrão do site"
+msgstr "Idioma padrão"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
@@ -4209,12 +4205,12 @@ msgstr "Nenhum argumento de ID."
msgid "Tag %s"
msgstr "Etiqueta %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Perfil do usuário"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Imagem"
@@ -4283,7 +4279,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Usuário"
@@ -4559,7 +4554,7 @@ msgstr "Versão"
msgid "Author(s)"
msgstr "Autor(es)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4568,12 +4563,12 @@ msgstr ""
"Nenhum arquivo pode ser maior que %d bytes e o arquivo que você enviou "
"possui %d bytes. Experimente enviar uma versão menor."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Um arquivo deste tamanho excederá a sua conta de %d bytes."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Um arquivo deste tamanho excederá a sua conta mensal de %d bytes."
@@ -4612,27 +4607,27 @@ msgstr "Não foi possível inserir a mensagem."
msgid "Could not update message with new URI."
msgstr "Não foi possível atualizar a mensagem com a nova URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Erro no banco de dados durante a inserção da hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problema no salvamento da mensagem. Ela é muito extensa."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problema no salvamento da mensagem. Usuário desconhecido."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Muitas mensagens em um período curto de tempo; dê uma respirada e publique "
"novamente daqui a alguns minutos."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4640,19 +4635,19 @@ msgstr ""
"Muitas mensagens duplicadas em um período curto de tempo; dê uma respirada e "
"publique novamente daqui a alguns minutos."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Você está proibido de publicar mensagens neste site."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problema no salvamento da mensagem."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problema no salvamento das mensagens recebidas do grupo."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4682,29 +4677,29 @@ msgstr "Não foi possível excluir a auto-assinatura."
msgid "Couldn't delete subscription OMB token."
msgstr "Não foi possível excluir a assinatura."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Não foi possível excluir a assinatura."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bem vindo(a) a %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Não foi possível configurar a associação ao grupo."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Não foi possível configurar a associação ao grupo."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Não foi possível salvar a assinatura."
@@ -4802,33 +4797,28 @@ msgid "Invite friends and colleagues to join you on %s"
msgstr "Convide seus amigos e colegas para unir-se a você no %s"
#: lib/action.php:456
-#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Convidar"
#. TRANS: Tooltip for main menu option "Logout"
#: lib/action.php:462
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Sai do site"
+msgstr "Sair do site"
#: lib/action.php:465
-#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Sair"
#. TRANS: Tooltip for main menu option "Register"
#: lib/action.php:470
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
-msgstr "Cria uma conta"
+msgstr "Criar uma conta"
#: lib/action.php:473
-#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrar-se"
@@ -4854,7 +4844,6 @@ msgid "Help me!"
msgstr "Ajudem-me!"
#: lib/action.php:485
-#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ajuda"
@@ -4867,10 +4856,9 @@ msgid "Search for people or text"
msgstr "Procura por pessoas ou textos"
#: lib/action.php:491
-#, fuzzy
msgctxt "MENU"
msgid "Search"
-msgstr "Procurar"
+msgstr "Pesquisar"
#. TRANS: DT element for site notice. String is hidden in default CSS.
#. TRANS: Menu item for site administration
@@ -4926,7 +4914,7 @@ msgstr "Mini-aplicativo"
msgid "StatusNet software license"
msgstr "Licença do software StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4935,12 +4923,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblog disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblog. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4951,43 +4939,43 @@ msgstr ""
"versão %s, disponível sob a [GNU Affero General Public License] (http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licença do conteúdo do site"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "O conteúdo e os dados de %1$s são privados e confidenciais."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Conteúdo e dados licenciados sob %1$s. Todos os direitos reservados."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Conteúdo e dados licenciados pelos colaboradores. Todos os direitos "
"reservados."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Todas "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licença."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Próximo"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Anterior"
@@ -5003,6 +4991,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5095,7 +5087,7 @@ msgstr ""
"Os recursos de API exigem acesso de leitura e escrita, mas você possui "
"somente acesso de leitura."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5172,11 +5164,11 @@ msgstr "Revogar"
msgid "Attachments"
msgstr "Anexos"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Autor"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Operadora"
@@ -5196,37 +5188,50 @@ msgstr "Não foi possível alterar a senha"
msgid "Password changing is not allowed"
msgstr "Não é permitido alterar a senha"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultados do comando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "O comando foi completado"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "O comando falhou"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Desculpe, mas esse comando ainda não foi implementado."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Não existe uma mensagem com essa id"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "O usuário não tem uma \"última mensagem\""
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Não foi possível encontrar um usuário com a identificação %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Não foi possível encontrar um usuário com a identificação %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Desculpe, mas esse comando ainda não foi implementado."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Não faz muito sentido chamar a sua própria atenção!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Foi enviada a chamada de atenção para %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5237,199 +5242,198 @@ msgstr ""
"Assinantes: %2$s\n"
"Mensagens: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Não existe uma mensagem com essa id"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "O usuário não tem uma \"última mensagem\""
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Mensagem marcada como favorita."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Você já é um membro desse grupo."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Não foi possível associar o usuário %s ao grupo %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s associou-se ao grupo %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Não foi possível remover o usuário %s do grupo %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s deixou o grupo %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localização: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Site: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Sobre: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
"A mensagem é muito extensa - o máximo são %d caracteres e você enviou %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "A mensagem direta para %s foi enviada"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Ocorreu um erro durante o envio da mensagem direta."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Você não pode repetir sua própria mensagem"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Você já repetiu essa mensagem"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Mensagem de %s repetida"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Erro na repetição da mensagem."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
"A mensagem é muito extensa - o máximo são %d caracteres e você enviou %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "A resposta a %s foi enviada"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Erro no salvamento da mensagem."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Especifique o nome do usuário que será assinado"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Este usuário não existe."
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Você não está assinando esse perfil."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Efetuada a assinatura de %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Especifique o nome do usuário cuja assinatura será cancelada"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Cancelada a assinatura de %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "O comando não foi implementado ainda."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notificação desligada."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Não é possível desligar a notificação."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notificação ligada."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Não é possível ligar a notificação."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "O comando para autenticação está desabilitado"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Este link é utilizável somente uma vez e é válido somente por dois minutos: %"
"s"
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Cancelada a assinatura de %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Você não está assinando ninguém."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Você já está assinando esta pessoa:"
msgstr[1] "Você já está assinando estas pessoas:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ninguém o assinou ainda."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Esta pessoa está assinando você:"
msgstr[1] "Estas pessoas estão assinando você:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Você não é membro de nenhum grupo."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Você é membro deste grupo:"
msgstr[1] "Você é membro destes grupos:"
-#: lib/command.php:769
+#: lib/command.php:812
#, fuzzy
msgid ""
"Commands:\n"
@@ -5510,19 +5514,19 @@ msgstr ""
"tracks - não implementado ainda\n"
"tracking - não implementado ainda\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Não foi encontrado nenhum arquivo de configuração. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Eu procurei pelos arquivos de configuração nos seguintes lugares: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Você pode querer executar o instalador para corrigir isto."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Ir para o instalador."
@@ -5700,49 +5704,49 @@ msgstr "Etiquetas nas mensagens do grupo %s"
msgid "This page is not available in a media type you accept"
msgstr "Esta página não está disponível em um tipo de mídia que você aceita"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Formato de imagem não suportado."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "O arquivo é muito grande. O tamanho máximo é de %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Envio parcial."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Erro no sistema durante o envio do arquivo."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Imagem inválida ou arquivo corrompido."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Formato de imagem não suportado."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Nosso arquivo foi perdido."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Tipo de arquivo desconhecido"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "Mb"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "Kb"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Fonte da caixa de entrada desconhecida %d."
@@ -6022,7 +6026,7 @@ msgstr ""
"privadas para envolver outras pessoas em uma conversa. Você também pode "
"receber mensagens privadas."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "de"
@@ -6118,7 +6122,6 @@ msgid "Available characters"
msgstr "Caracteres disponíveis"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Enviar"
@@ -6181,23 +6184,23 @@ msgstr "O"
msgid "at"
msgstr "em"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "no contexto"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Repetida por"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Responder a esta mensagem"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Responder"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Mensagem repetida"
@@ -6339,7 +6342,7 @@ msgstr "Repetir esta mensagem"
msgid "Revoke the \"%s\" role from this user"
msgstr "Bloquear este usuário neste grupo"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Nenhum usuário definido para o modo de usuário único."
@@ -6465,92 +6468,95 @@ msgstr "Cancelar a assinatura deste usuário"
msgid "Unsubscribe"
msgstr "Cancelar"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Editar o avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Ações do usuário"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Editar as configurações do perfil"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Editar"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Enviar uma mensagem para este usuário."
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Mensagem"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderar"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Perfil do usuário"
-#: lib/userprofile.php:354
-#, fuzzy
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
-msgstr "Administradores"
+msgstr "Administrador"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
#, fuzzy
msgctxt "role"
msgid "Moderator"
msgstr "Moderar"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "alguns segundos atrás"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "cerca de 1 minuto atrás"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "cerca de %d minutos atrás"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "cerca de 1 hora atrás"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "cerca de %d horas atrás"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "cerca de 1 dia atrás"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "cerca de %d dias atrás"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "cerca de 1 mês atrás"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "cerca de %d meses atrás"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "cerca de 1 ano atrás"
@@ -6564,7 +6570,7 @@ msgstr "%s não é uma cor válida!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s não é uma cor válida! Utilize 3 ou 6 caracteres hexadecimais."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index 03aaa074a..b436d9f1e 100644
--- a/locale/ru/LC_MESSAGES/statusnet.po
+++ b/locale/ru/LC_MESSAGES/statusnet.po
@@ -12,12 +12,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:54+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:30+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ru\n"
"X-Message-Group: out-statusnet\n"
@@ -98,7 +98,7 @@ msgstr "Ðет такой Ñтраницы"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -107,10 +107,8 @@ msgstr "Ðет такой Ñтраницы"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Ðет такого пользователÑ."
@@ -208,14 +206,14 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Метод API не найден."
@@ -228,8 +226,8 @@ msgstr "Метод API не найден."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Этот метод требует POST."
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "Ðе удаётÑÑ Ñохранить профиль."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr "Ðет ÑтатуÑа Ñ Ñ‚Ð°ÐºÐ¸Ð¼ ID."
msgid "This status is already a favorite."
msgstr "Этот ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÐ¶Ðµ входит в чиÑло любимых."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Ðе удаётÑÑ Ñоздать любимую запиÑÑŒ."
@@ -468,7 +466,7 @@ msgstr "Группа не найдена!"
msgid "You are already a member of that group."
msgstr "Ð’Ñ‹ уже ÑвлÑетеÑÑŒ членом Ñтой группы."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Ð’Ñ‹ заблокированы из Ñтой группы админиÑтратором."
@@ -518,7 +516,7 @@ msgstr "Ðеправильный токен"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -587,9 +585,9 @@ msgstr "ÐаÑтройки"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "ИмÑ"
@@ -658,12 +656,12 @@ msgstr "МакÑÐ¸Ð¼Ð°Ð»ÑŒÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° запиÑи — %d Ñимволов
msgid "Unsupported format."
msgstr "Ðеподдерживаемый формат."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Любимое от %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2$s / %2$s."
@@ -673,7 +671,7 @@ msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %1$s, отмеченные как любимые %2
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / ОбновлениÑ, упоминающие %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s / %3$s."
@@ -683,7 +681,7 @@ msgstr "%1$s обновил Ñтот ответ на Ñообщение: %2$s /
msgid "%s public timeline"
msgstr "ÐžÐ±Ñ‰Ð°Ñ Ð»ÐµÐ½Ñ‚Ð° %s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ %s от вÑех!"
@@ -698,12 +696,12 @@ msgstr "Повторено Ð´Ð»Ñ %s"
msgid "Repeats of %s"
msgstr "Повторы за %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "ЗапиÑи Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "ÐžÐ±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ Ñ‚ÐµÐ³Ð¾Ð¼ %1$s на %2$s!"
@@ -731,7 +729,7 @@ msgstr "Ðет размера."
msgid "Invalid size."
msgstr "Ðеверный размер."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватара"
@@ -764,7 +762,7 @@ msgid "Preview"
msgstr "ПроÑмотр"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Удалить"
@@ -847,8 +845,8 @@ msgstr "Ðе удаётÑÑ Ñохранить информацию о блокÐ
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Ðет такой группы."
@@ -949,7 +947,7 @@ msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ владельцем Ñтого прилоÐ
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Проблема Ñ Ð’Ð°ÑˆÐµÐ¹ ÑеÑÑией. Попробуйте ещё раз, пожалуйÑта."
@@ -1010,7 +1008,7 @@ msgstr "Ð’Ñ‹ уверены, что хотите удалить Ñту запиÑ
msgid "Do not delete this notice"
msgstr "Ðе удалÑÑ‚ÑŒ Ñту запиÑÑŒ"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Удалить Ñту запиÑÑŒ"
@@ -1263,7 +1261,7 @@ msgstr "Слишком длинное опиÑание (макÑимум %d Ñи
msgid "Could not update group."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ информацию о группе."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Ðе удаётÑÑ Ñоздать алиаÑÑ‹."
@@ -1978,7 +1976,7 @@ msgstr "ПриглаÑить новых пользователей"
msgid "You are already subscribed to these users:"
msgstr "Ð’Ñ‹ уже подпиÑаны на пользователÑ:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2108,7 +2106,7 @@ msgstr "%1$s вÑтупил в группу %2$s"
msgid "You must be logged in to leave a group."
msgstr "Ð’Ñ‹ должны авторизоватьÑÑ, чтобы покинуть группу."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Ð’Ñ‹ не ÑвлÑетеÑÑŒ членом Ñтой группы."
@@ -2222,12 +2220,12 @@ msgstr "ИÑпользуйте Ñту форму Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð½Ð¾Ð²Ð
msgid "New message"
msgstr "Ðовое Ñообщение"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Ð’Ñ‹ не можете поÑлать Ñообщение Ñтому пользователю."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ðет контента!"
@@ -2235,7 +2233,7 @@ msgstr "Ðет контента!"
msgid "No recipient specified."
msgstr "Ðет адреÑата."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "Ðе поÑылайте ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñами Ñебе; проÑто потихоньку Ñкажите Ñто Ñебе."
@@ -2249,7 +2247,7 @@ msgstr "Сообщение отправлено"
msgid "Direct message to %s sent."
msgstr "ПрÑмое Ñообщение Ð´Ð»Ñ %s поÑлано."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ошибка AJAX"
@@ -2368,7 +2366,7 @@ msgstr "Разработчики могут изменÑÑ‚ÑŒ наÑтройки
msgid "Notice has no profile"
msgstr "ЗапиÑÑŒ без профилÑ"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Ð¡Ñ‚Ð°Ñ‚ÑƒÑ %1$s на %2$s"
@@ -2381,8 +2379,8 @@ msgstr "тип Ñодержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Ðеподдерживаемый формат данных."
@@ -2515,7 +2513,7 @@ msgstr "Ðекорректный Ñтарый пароль"
msgid "Error saving user; invalid."
msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ; неверное имÑ."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Ðе удаётÑÑ Ñохранить новый пароль."
@@ -2728,8 +2726,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 латинÑких Ñтрочных буквы или цифры, без пробелов"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Полное имÑ"
@@ -2756,9 +2754,9 @@ msgid "Bio"
msgstr "БиографиÑ"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "МеÑтораÑположение"
@@ -2772,7 +2770,7 @@ msgstr "ДелитьÑÑ Ñвоим текущим меÑтоположениеÐ
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Теги"
@@ -3012,7 +3010,7 @@ msgstr "ПереуÑтановить пароль"
msgid "Recover password"
msgstr "ВоÑÑтановление паролÑ"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Запрошено воÑÑтановление паролÑ"
@@ -3032,19 +3030,19 @@ msgstr "СброÑить"
msgid "Enter a nickname or email address."
msgstr "Введите Ð¸Ð¼Ñ Ð¸Ð»Ð¸ Ñлектронный адреÑ."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Ðет Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ñ‚Ð°ÐºÐ¸Ð¼ Ñлектронным адреÑом или именем."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ðет зарегиÑтрированных Ñлектронных адреÑов Ð´Ð»Ñ Ñтого пользователÑ."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Ошибка ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´Ñ‘Ð½Ð½Ð¾Ð³Ð¾ адреÑа."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3052,23 +3050,23 @@ msgstr ""
"ИнÑтрукции по воÑÑтановлению Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¿Ð¾Ñланы на Ñлектронный адреÑ, который Ð’Ñ‹ "
"указали при региÑтрации вашего аккаунта."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "ÐÐµÑ‚Ð¸Ð¿Ð¾Ð²Ð°Ñ Ð¿ÐµÑ€ÐµÑƒÑтановка паролÑ."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Пароль должен быть длиной не менее 6 Ñимволов."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Пароль и его подтверждение не Ñовпадают."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Ошибка в уÑтановках пользователÑ."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Ðовый пароль уÑпешно Ñохранён. Ð’Ñ‹ авторизовалиÑÑŒ."
@@ -3235,7 +3233,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "ÐÐ´Ñ€ÐµÑ URL твоего Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ Ð½Ð° другом подходÑщем ÑервиÑе микроблогинга"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "ПодпиÑатьÑÑ"
@@ -3271,7 +3269,7 @@ msgstr "Ð’Ñ‹ не можете повторить ÑобÑтвенную запÐ
msgid "You already repeated that notice."
msgstr "Ð’Ñ‹ уже повторили Ñту запиÑÑŒ."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Повторено"
@@ -3415,7 +3413,7 @@ msgstr "ОрганизациÑ"
msgid "Description"
msgstr "ОпиÑание"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
@@ -3536,67 +3534,67 @@ msgstr "Группа %s"
msgid "%1$s group, page %2$d"
msgstr "Группа %1$s, Ñтраница %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Профиль группы"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "ЗапиÑÑŒ"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "ÐлиаÑÑ‹"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Лента запиÑей группы %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Лента запиÑей группы %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Лента запиÑей группы %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "УчаÑтники"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(пока ничего нет)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Ð’Ñе учаÑтники"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Создано"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3612,7 +3610,7 @@ msgstr ""
"action.register%%%%), чтобы Ñтать учаÑтником группы и получить множеÑтво "
"других возможноÑтей! ([Читать далее](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3625,7 +3623,7 @@ msgstr ""
"обеÑпечении [StatusNet](http://status.net/). УчаÑтники обмениваютÑÑ "
"короткими ÑообщениÑми о Ñвоей жизни и интереÑах. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "ÐдминиÑтраторы"
@@ -4182,12 +4180,12 @@ msgstr "Ðет аргумента ID."
msgid "Tag %s"
msgstr "Теги %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Профиль пользователÑ"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Фото"
@@ -4528,7 +4526,7 @@ msgstr "ВерÑиÑ"
msgid "Author(s)"
msgstr "Ðвтор(Ñ‹)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4537,12 +4535,12 @@ msgstr ""
"Файл не может быть больше %d байт, тогда как отправленный вами файл Ñодержал "
"%d байт. Попробуйте загрузить меньшую верÑию."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Файл такого размера превыÑит вашу пользовательÑкую квоту в %d байта."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Файл такого размера превыÑит вашу меÑÑчную квоту в %d байта."
@@ -4580,27 +4578,27 @@ msgstr "Ðе удаётÑÑ Ð²Ñтавить Ñообщение."
msgid "Could not update message with new URI."
msgstr "Ðе удаётÑÑ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ Ñообщение Ñ Ð½Ð¾Ð²Ñ‹Ð¼ URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Ошибка баз данных при вÑтавке хеш-тегов Ð´Ð»Ñ %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Проблемы Ñ Ñохранением запиÑи. Слишком длинно."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при Ñохранении запиÑи. ÐеизвеÑтный пользователь."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Слишком много запиÑей за Ñтоль короткий Ñрок; передохните немного и "
"попробуйте вновь через пару минут."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4608,19 +4606,19 @@ msgstr ""
"Слишком много одинаковых запиÑей за Ñтоль короткий Ñрок; передохните немного "
"и попробуйте вновь через пару минут."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Вам запрещено поÑтитьÑÑ Ð½Ð° Ñтом Ñайте (бан)"
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Проблемы Ñ Ñохранением запиÑи."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Проблемы Ñ Ñохранением входÑщих Ñообщений группы."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4649,28 +4647,28 @@ msgstr "Ðевозможно удалить ÑамоподпиÑку."
msgid "Couldn't delete subscription OMB token."
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑочный жетон OMB."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ подпиÑку."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добро пожаловать на %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Ðе удаётÑÑ Ñоздать группу."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ URI группы."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Ðе удаётÑÑ Ð½Ð°Ð·Ð½Ð°Ñ‡Ð¸Ñ‚ÑŒ членÑтво в группе."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Ðе удаётÑÑ Ñохранить информацию о локальной группе."
@@ -4874,7 +4872,7 @@ msgstr "Бедж"
msgid "StatusNet software license"
msgstr "StatusNet лицензиÑ"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4883,12 +4881,12 @@ msgstr ""
"**%%site.name%%** — Ñто ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°, Ñозданный Ð´Ð»Ñ Ð²Ð°Ñ Ð¿Ñ€Ð¸ помощи [%"
"%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — ÑÐµÑ€Ð²Ð¸Ñ Ð¼Ð¸ÐºÑ€Ð¾Ð±Ð»Ð¾Ð³Ð¸Ð½Ð³Ð°. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4900,44 +4898,44 @@ msgstr ""
"лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Ð›Ð¸Ñ†ÐµÐ½Ð·Ð¸Ñ Ñодержимого Ñайта"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содержание и данные %1$s ÑвлÑÑŽÑ‚ÑÑ Ð»Ð¸Ñ‡Ð½Ñ‹Ð¼Ð¸ и конфиденциальными."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"ÐвторÑкие права на Ñодержание и данные принадлежат %1$s. Ð’Ñе права защищены."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑкие права на Ñодержание и данные принадлежат разработчикам. Ð’Ñе права "
"защищены."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "All "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "license."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Разбиение на Ñтраницы"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Сюда"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Туда"
@@ -4953,6 +4951,10 @@ msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенны
msgid "Can't handle embedded Base64 content yet."
msgstr "Пока ещё Ð½ÐµÐ»ÑŒÐ·Ñ Ð¾Ð±Ñ€Ð°Ð±Ð°Ñ‚Ñ‹Ð²Ð°Ñ‚ÑŒ вÑтроенное Ñодержание Base64."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5041,7 +5043,7 @@ msgstr ""
"API реÑурÑа требует доÑтуп Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸ запиÑи, но у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ только доÑтуп "
"Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5118,11 +5120,11 @@ msgstr "Отозвать"
msgid "Attachments"
msgstr "ВложениÑ"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Ðвтор"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "СервиÑ"
@@ -5142,37 +5144,50 @@ msgstr "Изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ удалоÑÑŒ"
msgid "Password changing is not allowed"
msgstr "Смена Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ разрешена"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Команда иÑполнена"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Команда завершена"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Команда неудачна"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "ПроÑтите, Ñта команда ещё не выполнена."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "ЗапиÑи Ñ Ñ‚Ð°ÐºÐ¸Ð¼ id не ÑущеÑтвует"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ поÑледней запиÑи."
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Ðе удаётÑÑ Ð½Ð°Ð¹Ñ‚Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "ПроÑтите, Ñта команда ещё не выполнена."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Ðет ÑмыÑла «подталкивать» Ñамого ÑебÑ!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "«Подталкивание» поÑлано %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5183,198 +5198,198 @@ msgstr ""
"ПодпиÑчиков: %2$s\n"
"ЗапиÑей: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "ЗапиÑи Ñ Ñ‚Ð°ÐºÐ¸Ð¼ id не ÑущеÑтвует"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "У Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÑ‚ поÑледней запиÑи."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "ЗапиÑÑŒ помечена как любимаÑ."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Ð’Ñ‹ уже ÑвлÑетеÑÑŒ членом Ñтой группы."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Ðе удаётÑÑ Ð¿Ñ€Ð¸Ñоединить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %s к группе %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%1$s вÑтупил в группу %2$s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Ðе удаётÑÑ ÑƒÐ´Ð°Ð»Ð¸Ñ‚ÑŒ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ %1$s из группы %2$s."
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%1$s покинул группу %2$s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Полное имÑ: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "МеÑтораÑположение: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "ДомашнÑÑ Ñтраница: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "О пользователе: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s профиль другой ÑиÑтемы; вы можете отÑылать личное Ñообщение только "
+"пользователÑм Ñтой ÑиÑтемы."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Сообщение Ñлишком длинное — не больше %d Ñимволов, вы поÑылаете %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "ПрÑмое Ñообщение Ð´Ð»Ñ %s поÑлано."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Ошибка при отправке прÑмого ÑообщениÑ."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Ðевозможно повторить ÑобÑтвенную запиÑÑŒ."
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Эта запиÑÑŒ уже повторена"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "ЗапиÑÑŒ %s повторена"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Ошибка при повторении запиÑи."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "ЗапиÑÑŒ Ñлишком Ð´Ð»Ð¸Ð½Ð½Ð°Ñ â€” не больше %d Ñимволов, вы поÑылаете %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Ответ %s отправлен"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Проблемы Ñ Ñохранением запиÑи."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки."
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Ðет такого пользователÑ."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Ðевозможно подпиÑатьÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ на профили OMB."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "ПодпиÑано на %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Укажите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹ подпиÑки."
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "ОтпиÑано от %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Команда ещё не выполнена."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Оповещение отÑутÑтвует."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Ðет оповещениÑ."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "ЕÑÑ‚ÑŒ оповещение."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "ЕÑÑ‚ÑŒ оповещение."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Команда входа отключена"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "Эта ÑÑылка дейÑтвительна только один раз в течение 2 минут: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "ОтпиÑано %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Ð’Ñ‹ ни на кого не подпиÑаны."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[1] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
msgstr[2] "Ð’Ñ‹ подпиÑаны на Ñтих людей:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ðикто не подпиÑан на ваÑ."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[1] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
msgstr[2] "Эти люди подпиÑалиÑÑŒ на ваÑ:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Ð’Ñ‹ не ÑоÑтоите ни в одной группе."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5454,19 +5469,19 @@ msgstr ""
"tracks — пока не реализовано.\n"
"tracking — пока не реализовано.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Конфигурационный файл не найден. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Конфигурационные файлы иÑкалиÑÑŒ в Ñледующих меÑтах: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Возможно, вы решите запуÑтить уÑтановщик Ð´Ð»Ñ Ð¸ÑÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñтого."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Перейти к уÑтановщику"
@@ -5644,49 +5659,49 @@ msgstr "Теги запиÑей группы %s"
msgid "This page is not available in a media type you accept"
msgstr "Страница недоÑтупна Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типа, который Ð’Ñ‹ задейÑтвовали."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Ðеподдерживаемый формат файла изображениÑ."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Этот файл Ñлишком большой. МакÑимальный размер файла ÑоÑтавлÑет %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "ЧаÑÑ‚Ð¸Ñ‡Ð½Ð°Ñ Ð·Ð°Ð³Ñ€ÑƒÐ·ÐºÐ°."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при загрузке файла."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Ðе ÑвлÑетÑÑ Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸ÐµÐ¼ или повреждённый файл."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Ðеподдерживаемый формат файла изображениÑ."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "ПотерÑн файл."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Ðеподдерживаемый тип файла"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "МБ"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "КБ"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "ÐеизвеÑтный иÑточник входÑщих Ñообщений %d."
@@ -5967,7 +5982,7 @@ msgstr ""
"Ð²Ð¾Ð²Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ… пользователей в разговор. СообщениÑ, получаемые от других "
"людей, видите только вы."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "от "
@@ -6122,23 +6137,23 @@ msgstr "з. д."
msgid "at"
msgstr "на"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "в контекÑте"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Повторено"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Ответить на Ñту запиÑÑŒ"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Ответить"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "ЗапиÑÑŒ повторена"
@@ -6280,7 +6295,7 @@ msgstr "Повторить Ñту запиÑÑŒ"
msgid "Revoke the \"%s\" role from this user"
msgstr "Отозвать у Ñтого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ€Ð¾Ð»ÑŒ «%s»"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Ðи задан пользователь Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого режима."
@@ -6406,89 +6421,93 @@ msgstr "ОтпиÑатьÑÑ Ð¾Ñ‚ Ñтого пользователÑ"
msgid "Unsubscribe"
msgstr "ОтпиÑатьÑÑ"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Изменить аватару"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "ДейÑÑ‚Ð²Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Изменение наÑтроек профилÑ"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Редактировать"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "ПоÑлать приватное Ñообщение Ñтому пользователю."
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Сообщение"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Модерировать"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Роль пользователÑ"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "ÐдминиÑтратор"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Модератор"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "пару Ñекунд назад"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "около чаÑа назад"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "около %d чаÑа(ов) назад"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "около Ð´Ð½Ñ Ð½Ð°Ð·Ð°Ð´"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "около %d днÑ(ей) назад"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "около меÑÑца назад"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "около %d меÑÑца(ев) назад"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "около года назад"
@@ -6504,7 +6523,7 @@ msgstr ""
"%s не ÑвлÑетÑÑ Ð´Ð¾Ð¿ÑƒÑтимым цветом! ИÑпользуйте 3 или 6 шеÑтнадцатеричных "
"Ñимволов."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/statusnet.po b/locale/statusnet.po
index 61d902a1a..eccc291e2 100644
--- a/locale/statusnet.po
+++ b/locale/statusnet.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-08 21:09+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+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"
@@ -90,7 +90,7 @@ msgstr ""
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -99,10 +99,8 @@ msgstr ""
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr ""
@@ -193,14 +191,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr ""
@@ -213,8 +211,8 @@ msgstr ""
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -243,7 +241,7 @@ msgid "Could not save profile."
msgstr ""
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -327,7 +325,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr ""
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -444,7 +442,7 @@ msgstr ""
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -494,7 +492,7 @@ msgstr ""
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -558,9 +556,9 @@ msgstr ""
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr ""
@@ -629,12 +627,12 @@ msgstr ""
msgid "Unsupported format."
msgstr ""
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
@@ -644,7 +642,7 @@ msgstr ""
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -654,7 +652,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -669,12 +667,12 @@ msgstr ""
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -702,7 +700,7 @@ msgstr ""
msgid "Invalid size."
msgstr ""
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr ""
@@ -734,7 +732,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr ""
@@ -814,8 +812,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr ""
@@ -916,7 +914,7 @@ msgstr ""
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -972,7 +970,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr ""
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr ""
@@ -1221,7 +1219,7 @@ msgstr ""
msgid "Could not update group."
msgstr ""
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr ""
@@ -1882,7 +1880,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -1982,7 +1980,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr ""
@@ -2091,12 +2089,12 @@ msgstr ""
msgid "New message"
msgstr ""
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr ""
@@ -2104,7 +2102,7 @@ msgstr ""
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2118,7 +2116,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2229,7 +2227,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr ""
@@ -2242,8 +2240,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2374,7 +2372,7 @@ msgstr ""
msgid "Error saving user; invalid."
msgstr ""
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr ""
@@ -2583,8 +2581,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr ""
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr ""
@@ -2611,9 +2609,9 @@ msgid "Bio"
msgstr ""
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr ""
@@ -2627,7 +2625,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -2851,7 +2849,7 @@ msgstr ""
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2871,41 +2869,41 @@ msgstr ""
msgid "Enter a nickname or email address."
msgstr ""
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr ""
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr ""
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr ""
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr ""
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr ""
@@ -3044,7 +3042,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr ""
@@ -3080,7 +3078,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr ""
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr ""
@@ -3217,7 +3215,7 @@ msgstr ""
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3328,67 +3326,67 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr ""
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr ""
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr ""
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr ""
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3398,7 +3396,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3407,7 +3405,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -3924,12 +3922,12 @@ msgstr ""
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr ""
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4241,19 +4239,19 @@ msgstr ""
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4291,43 +4289,43 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4356,28 +4354,28 @@ msgstr ""
msgid "Couldn't delete subscription OMB token."
msgstr ""
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr ""
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr ""
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr ""
@@ -4581,19 +4579,19 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4601,41 +4599,41 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr ""
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr ""
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr ""
@@ -4651,6 +4649,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4737,7 +4739,7 @@ msgstr ""
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4811,11 +4813,11 @@ msgstr ""
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr ""
@@ -4835,37 +4837,50 @@ msgstr ""
msgid "Password changing is not allowed"
msgstr ""
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
msgstr ""
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr ""
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr ""
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr ""
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr ""
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -4873,195 +4888,193 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr ""
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr ""
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr ""
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr ""
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr ""
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr ""
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr ""
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr ""
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr ""
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr ""
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr ""
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr ""
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr ""
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr ""
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr ""
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr ""
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr ""
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] ""
msgstr[1] ""
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5103,19 +5116,19 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr ""
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5289,49 +5302,49 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr ""
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5526,7 +5539,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr ""
@@ -5676,23 +5689,23 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr ""
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr ""
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr ""
@@ -5834,7 +5847,7 @@ msgstr ""
msgid "Revoke the \"%s\" role from this user"
msgstr ""
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5960,89 +5973,93 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr ""
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr ""
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr ""
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr ""
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr ""
@@ -6056,7 +6073,7 @@ msgstr ""
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index 2a508849f..eee7b6d72 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:50:58+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:33+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
@@ -94,7 +94,7 @@ msgstr "Ingen sådan sida"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -103,10 +103,8 @@ msgstr "Ingen sådan sida"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Ingen sådan användare."
@@ -204,14 +202,14 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metod hittades inte."
@@ -224,8 +222,8 @@ msgstr "API-metod hittades inte."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Denna metod kräver en POST."
@@ -254,7 +252,7 @@ msgid "Could not save profile."
msgstr "Kunde inte spara profil."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -340,7 +338,7 @@ msgstr "Ingen status hittad med det ID:t."
msgid "This status is already a favorite."
msgstr "Denna status är redan en favorit."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Kunde inte skapa favorit."
@@ -458,7 +456,7 @@ msgstr "Grupp hittades inte!"
msgid "You are already a member of that group."
msgstr "Du är redan en medlem i denna grupp."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Du har blivit blockerad från denna grupp av administratören."
@@ -508,7 +506,7 @@ msgstr "Ogiltig token."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -575,9 +573,9 @@ msgstr "Konto"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Smeknamn"
@@ -646,12 +644,12 @@ msgstr "Maximal notisstorlek är %d tecken, inklusive URL för bilaga."
msgid "Unsupported format."
msgstr "Format som inte stödjs."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Favoriter från %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s."
@@ -661,7 +659,7 @@ msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Uppdateringar som nämner %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s uppdateringar med svar på uppdatering från %2$s / %3$s."
@@ -671,7 +669,7 @@ msgstr "%1$s uppdateringar med svar på uppdatering från %2$s / %3$s."
msgid "%s public timeline"
msgstr "%s publika tidslinje"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s uppdateringar från alla!"
@@ -686,12 +684,12 @@ msgstr "Upprepat till %s"
msgid "Repeats of %s"
msgstr "Upprepningar av %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Notiser taggade med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Uppdateringar taggade med %1$s på %2$s!"
@@ -719,7 +717,7 @@ msgstr "Ingen storlek."
msgid "Invalid size."
msgstr "Ogiltig storlek."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -752,7 +750,7 @@ msgid "Preview"
msgstr "Förhandsgranska"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Ta bort"
@@ -835,8 +833,8 @@ msgstr "Misslyckades att spara blockeringsinformation."
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Ingen sådan grupp."
@@ -938,7 +936,7 @@ msgstr "Du är inte ägaren av denna applikation."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Det var ett problem med din sessions-token."
@@ -999,7 +997,7 @@ msgstr "Är du säker på att du vill ta bort denna notis?"
msgid "Do not delete this notice"
msgstr "Ta inte bort denna notis"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Ta bort denna notis"
@@ -1252,7 +1250,7 @@ msgstr "beskrivning är för lång (max %d tecken)."
msgid "Could not update group."
msgstr "Kunde inte uppdatera grupp."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Kunde inte skapa alias."
@@ -1954,7 +1952,7 @@ msgstr "Bjud in nya användare"
msgid "You are already subscribed to these users:"
msgstr "Du prenumererar redan på dessa användare:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2086,7 +2084,7 @@ msgstr "%1$s gick med i grupp %2$s"
msgid "You must be logged in to leave a group."
msgstr "Du måste vara inloggad för att lämna en grupp."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Du är inte en medlem i den gruppen."
@@ -2199,12 +2197,12 @@ msgstr "Använd detta formulär för att skapa en ny grupp."
msgid "New message"
msgstr "Nytt meddelande"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Du kan inte skicka ett meddelande till den användaren."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Inget innehåll!"
@@ -2212,7 +2210,7 @@ msgstr "Inget innehåll!"
msgid "No recipient specified."
msgstr "Ingen mottagare angiven."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2228,7 +2226,7 @@ msgstr "Meddelande skickat"
msgid "Direct message to %s sent."
msgstr "Direktmeddelande till %s skickat."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "AJAX-fel"
@@ -2348,7 +2346,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Notisen har ingen profil"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$ss status den %2$s"
@@ -2361,8 +2359,8 @@ msgstr "innehållstyp "
msgid "Only "
msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Ett dataformat som inte stödjs"
@@ -2493,7 +2491,7 @@ msgstr "Felaktigt gammalt lösenord"
msgid "Error saving user; invalid."
msgstr "Fel vid sparande av användare; ogiltig."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Kan inte spara nytt lösenord."
@@ -2707,8 +2705,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 små bokstäver eller nummer, inga punkter eller mellanslag"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Fullständigt namn"
@@ -2735,9 +2733,9 @@ msgid "Bio"
msgstr "Biografi"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Plats"
@@ -2751,7 +2749,7 @@ msgstr "Dela min nuvarande plats när jag skickar notiser"
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Taggar"
@@ -2995,7 +2993,7 @@ msgstr "Återställ lösenord"
msgid "Recover password"
msgstr "Återskapa lösenord"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Återskapande av lösenord begärd"
@@ -3015,19 +3013,19 @@ msgstr "Återställ"
msgid "Enter a nickname or email address."
msgstr "Skriv in ett smeknamn eller en e-postadress."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "Ingen användare med den e-postadressen eller användarnamn."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ingen registrerad e-postadress för den användaren."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Fel vid sparande av adressbekräftelse."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3035,23 +3033,23 @@ msgstr ""
"Instruktioner för att återställa ditt lösenord har skickats till e-"
"postadressen som är registrerat till ditt konto "
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Oväntad återställning av lösenord."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Lösenordet måste vara minst 6 tecken."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Lösenord och bekräftelse matchar inte."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Fel uppstog i användarens inställning"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Nya lösenordet sparat. Du är nu inloggad."
@@ -3218,7 +3216,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL till din profil på en annan kompatibel mikrobloggtjänst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Prenumerera"
@@ -3256,7 +3254,7 @@ msgstr "Du kan inte upprepa din egna notis."
msgid "You already repeated that notice."
msgstr "Du har redan upprepat denna notis."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Upprepad"
@@ -3327,9 +3325,8 @@ msgid "You cannot revoke user roles on this site."
msgstr "Du kan inte återkalla användarroller på denna webbplats."
#: actions/revokerole.php:82
-#, fuzzy
msgid "User doesn't have this role."
-msgstr "Användare utan matchande profil."
+msgstr "Användare har inte denna roll."
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
@@ -3400,7 +3397,7 @@ msgstr "Organisation"
msgid "Description"
msgstr "Beskrivning"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistik"
@@ -3522,67 +3519,67 @@ msgstr "%s grupp"
msgid "%1$s group, page %2$d"
msgstr "%1$s grupp, sida %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Grupprofil"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "Notis"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Alias"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "Åtgärder för grupp"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Flöde av notiser för %s grupp (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Flöde av notiser för %s grupp (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Flöde av notiser för %s grupp (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF för %s grupp"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Alla medlemmar"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Skapad"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3597,7 +3594,7 @@ msgstr ""
"sina liv och intressen. [Gå med nu](%%%%action.register%%%%) för att bli en "
"del av denna grupp och många fler! ([Läs mer](%%%%doc.help%%%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3610,7 +3607,7 @@ msgstr ""
"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
"sina liv och intressen. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Administratörer"
@@ -3731,7 +3728,6 @@ msgid "User is already silenced."
msgstr "Användaren är redan nedtystad."
#: actions/siteadminpanel.php:69
-#, fuzzy
msgid "Basic settings for this StatusNet site"
msgstr "Grundinställningar för din StatusNet-webbplats"
@@ -3801,13 +3797,14 @@ msgid "Default timezone for the site; usually UTC."
msgstr "Standardtidzon för denna webbplats; vanligtvis UTC."
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "Webbplatsens standardspråk"
+msgstr "Standardspråk"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
msgstr ""
+"Webbplatsspråk när automatisk identifiering av inställningar i webbläsaren "
+"inte är tillgänglig"
#: actions/siteadminpanel.php:271
msgid "Limits"
@@ -3831,37 +3828,32 @@ msgstr ""
"Hur länge användare måste vänta (i sekunder) för att posta samma sak igen."
#: actions/sitenoticeadminpanel.php:56
-#, fuzzy
msgid "Site Notice"
msgstr "Webbplatsnotis"
#: actions/sitenoticeadminpanel.php:67
-#, fuzzy
msgid "Edit site-wide message"
-msgstr "Nytt meddelande"
+msgstr "Redigera webbplastsnotis"
#: actions/sitenoticeadminpanel.php:103
-#, fuzzy
msgid "Unable to save site notice."
-msgstr "Kunde inte spara dina utseendeinställningar."
+msgstr "Kunde inte spara webbplatsnotis."
#: actions/sitenoticeadminpanel.php:113
msgid "Max length for the site-wide notice is 255 chars"
-msgstr ""
+msgstr "Maximal längd för webbplatsnotisen är 255 tecken"
#: actions/sitenoticeadminpanel.php:176
-#, fuzzy
msgid "Site notice text"
-msgstr "Webbplatsnotis"
+msgstr "Text för webbplatsnotis"
#: actions/sitenoticeadminpanel.php:178
msgid "Site-wide notice text (255 chars max; HTML okay)"
-msgstr ""
+msgstr "Text för webbplatsnotis (max 255 tecken; HTML ok)"
#: actions/sitenoticeadminpanel.php:198
-#, fuzzy
msgid "Save site notice"
-msgstr "Webbplatsnotis"
+msgstr "Spara webbplatsnotis"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3966,12 +3958,11 @@ msgstr "Ingen kod ifylld"
#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
#: lib/adminpanelaction.php:406
msgid "Snapshots"
-msgstr "Ögonblicksbild"
+msgstr "Ögonblicksbilder"
#: actions/snapshotadminpanel.php:65
-#, fuzzy
msgid "Manage snapshot configuration"
-msgstr "Ändra webbplatskonfiguration"
+msgstr "Hantera konfiguration för ögonblicksbild"
#: actions/snapshotadminpanel.php:127
msgid "Invalid snapshot run value."
@@ -4018,9 +4009,8 @@ msgid "Snapshots will be sent to this URL"
msgstr "Ögonblicksbild kommer skickat till denna URL"
#: actions/snapshotadminpanel.php:248
-#, fuzzy
msgid "Save snapshot settings"
-msgstr "Spara webbplatsinställningar"
+msgstr "Spara inställningar för ögonblicksbild"
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
@@ -4165,12 +4155,12 @@ msgstr "Inget ID-argument."
msgid "Tag %s"
msgstr "Tagg %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Användarprofil"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Foto"
@@ -4514,7 +4504,7 @@ msgstr "Version"
msgid "Author(s)"
msgstr "Författare"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4523,12 +4513,12 @@ 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:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "En så här stor fil skulle överskrida din användarkvot på %d byte."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "En sådan här stor fil skulle överskrida din månatliga kvot på %d byte."
@@ -4566,27 +4556,27 @@ msgstr "Kunde inte infoga meddelande."
msgid "Could not update message with new URI."
msgstr "Kunde inte uppdatera meddelande med ny URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Databasfel vid infogning av hashtag: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Problem vid sparande av notis. För långt."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Problem vid sparande av notis. Okänd användare."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
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:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4594,19 +4584,19 @@ msgstr ""
"För många duplicerade meddelanden för snabbt; ta en vilopaus och posta igen "
"om ett par minuter."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Du är utestängd från att posta notiser på denna webbplats."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Problem med att spara notis."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Problem med att spara gruppinkorg."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4632,32 +4622,31 @@ msgid "Couldn't delete self-subscription."
msgstr "Kunde inte ta bort själv-prenumeration."
#: classes/Subscription.php:190
-#, fuzzy
msgid "Couldn't delete subscription OMB token."
-msgstr "Kunde inte ta bort prenumeration."
+msgstr "Kunde inte radera OMB prenumerations-token."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Kunde inte ta bort prenumeration."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Välkommen till %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Kunde inte skapa grupp."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Kunde inte ställa in grupp-URI."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Kunde inte ställa in gruppmedlemskap."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Kunde inte spara lokal gruppinformation."
@@ -4861,7 +4850,7 @@ msgstr "Emblem"
msgid "StatusNet software license"
msgstr "Programvarulicens för StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4870,12 +4859,12 @@ msgstr ""
"**%%site.name%%** är en mikrobloggtjänst tillhandahållen av [%%site.broughtby"
"%%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** är en mikrobloggtjänst. "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4886,42 +4875,42 @@ msgstr ""
"version %s, tillgänglig under [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Licens för webbplatsinnehåll"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Innehåll och data av %1$s är privat och konfidensiell."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Innehåll och data copyright av %1$s. Alla rättigheter reserverade."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Innehåll och data copyright av medarbetare. Alla rättigheter reserverade."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Alla "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "licens."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "Numrering av sidor"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Senare"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Tidigare"
@@ -4937,6 +4926,10 @@ msgstr "Kan inte hantera inbäddat XML-innehåll ännu."
msgid "Can't handle embedded Base64 content yet."
msgstr "Kan inte hantera inbäddat Base64-innehåll ännu."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5011,22 +5004,20 @@ msgstr "Konfiguration av sessioner"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:396
-#, fuzzy
msgid "Edit site notice"
-msgstr "Webbplatsnotis"
+msgstr "Redigera webbplatsnotis"
#. TRANS: Menu item title/tooltip
#: lib/adminpanelaction.php:404
-#, fuzzy
msgid "Snapshots configuration"
-msgstr "Konfiguration av sökvägar"
+msgstr "Konfiguration av ögonblicksbilder"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
"API-resursen kräver läs- och skrivrättigheter, men du har bara läsrättighet."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5103,11 +5094,11 @@ msgstr "Ã…terkalla"
msgid "Attachments"
msgstr "Bilagor"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Författare"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Tillhandahållare"
@@ -5127,37 +5118,50 @@ msgstr "Byte av lösenord misslyckades"
msgid "Password changing is not allowed"
msgstr "Byte av lösenord är inte tillåtet"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Resultat av kommando"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Kommando komplett"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Kommando misslyckades"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Tyvärr, detta kommando är inte implementerat än."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Notis med den ID:n finns inte"
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "Användare har ingen sista notis"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Kunde inte hitta en användare med smeknamnet %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Kunde inte hitta en lokal användare med smeknamnet %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Tyvärr, detta kommando är inte implementerat än."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Det verkar inte vara särskilt meningsfullt att knuffa dig själv!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Knuff skickad till %s"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5168,196 +5172,196 @@ msgstr ""
"Prenumeranter: %2$s\n"
"Notiser: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Notis med den ID:n finns inte"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "Användare har ingen sista notis"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Notis markerad som favorit."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Du är redan en medlem i denna grupp"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Kunde inte ansluta användare %s till groupp %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s gick med i grupp %s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Kunde inte ta bort användare %s från grupp %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s lämnade grupp %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Fullständigt namn: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Plats: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Hemsida: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Om: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s är en fjärrprofil; du kan bara skicka direktmeddelanden till användare på "
+"samma server."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "Meddelande för långt - maximum är %d tecken, du skickade %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "Direktmeddelande till %s skickat"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Fel vid sändning av direktmeddelande."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Kan inte upprepa din egen notis"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Redan upprepat denna notis"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Notis fron %s upprepad"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Fel vid upprepning av notis."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Notis för långt - maximum är %d tecken, du skickade %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Svar på %s skickat"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Fel vid sparande av notis."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Ange namnet på användaren att prenumerara på"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Ingen sådan användare."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Kan inte prenumera på OMB-profiler via kommando."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "Prenumerar på %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Ange namnet på användaren att avsluta prenumeration på"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "Prenumeration hos %s avslutad"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Kommando inte implementerat än."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Notifikation av."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Kan inte sätta på notifikation."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Notifikation på."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Kan inte stänga av notifikation."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Inloggningskommando är inaktiverat"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Denna länk är endast användbar en gång, och gäller bara i 2 minuter: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "Prenumeration avslutad %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Du prenumererar inte på någon."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Du prenumererar på denna person:"
msgstr[1] "Du prenumererar på dessa personer:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "Ingen prenumerar på dig."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Denna person prenumererar på dig:"
msgstr[1] "Dessa personer prenumererar på dig:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Du är inte medlem i några grupper."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "Du är en medlem i denna grupp:"
msgstr[1] "Du är en medlem i dessa grupper:"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5437,19 +5441,19 @@ msgstr ""
"tracks - inte implementerat än.\n"
"tracking - inte implementerat än.\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Ingen konfigurationsfil hittades. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Jag letade efter konfigurationsfiler på följande platser: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "Du kanske vill köra installeraren för att åtgärda detta."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "GÃ¥ till installeraren."
@@ -5551,7 +5555,7 @@ msgstr "GÃ¥"
#: lib/grantroleform.php:91
#, php-format
msgid "Grant this user the \"%s\" role"
-msgstr ""
+msgstr "Bevilja denna användare \"%s\"-rollen"
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
@@ -5625,49 +5629,49 @@ msgstr "Taggar i %s grupps notiser"
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
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Bildfilens format stödjs inte."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Denna fil är för stor. Den maximala filstorleken är %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Bitvis uppladdad."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Systemfel vid uppladdning av fil."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Inte en bildfil eller så är filen korrupt."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Bildfilens format stödjs inte."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Förlorade vår fil."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Okänd filtyp"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "MB"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "kB"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Okänd källa för inkorg %d."
@@ -5947,7 +5951,7 @@ msgstr ""
"engagera andra användare i konversationen. Folk kan skicka meddelanden till "
"dig som bara du ser."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "från"
@@ -6103,23 +6107,23 @@ msgstr "V"
msgid "at"
msgstr "på"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "i sammanhang"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Upprepad av"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "Svara på denna notis"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Svara"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Notis upprepad"
@@ -6257,11 +6261,11 @@ msgid "Repeat this notice"
msgstr "Upprepa denna notis"
#: lib/revokeroleform.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Revoke the \"%s\" role from this user"
-msgstr "Blockera denna användare från denna grupp"
+msgstr "Återkalla rollen \"%s\" från denna användare"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "Ingen enskild användare definierad för enanvändarläge."
@@ -6387,92 +6391,93 @@ msgstr "Avsluta prenumerationen på denna användare"
msgid "Unsubscribe"
msgstr "Avsluta pren."
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Redigera avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "Åtgärder för användare"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "Redigera profilinställningar"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Redigera"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "Skicka ett direktmeddelande till denna användare"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "Meddelande"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Moderera"
-#: lib/userprofile.php:352
-#, fuzzy
+#: lib/userprofile.php:364
msgid "User role"
-msgstr "Användarprofil"
+msgstr "Användarroll"
-#: lib/userprofile.php:354
-#, fuzzy
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
-msgstr "Administratörer"
+msgstr "Administratör"
-#: lib/userprofile.php:355
-#, fuzzy
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
-msgstr "Moderera"
+msgstr "Moderator"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "ett par sekunder sedan"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "för ett år sedan"
@@ -6486,7 +6491,7 @@ msgstr "%s är inte en giltig färg!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s är inte en giltig färg! Använd 3 eller 6 hexadecimala tecken."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "Meddelande för långt - maximum är %1$d tecken, du skickade %2$d."
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index c8a2f5c1a..091dd8fda 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:01+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:36+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
@@ -23,9 +23,8 @@ msgstr ""
#. TRANS: Page title
#. TRANS: Menu item for site administration
#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
-#, fuzzy
msgid "Access"
-msgstr "అంగీకరించà±"
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±"
#. TRANS: Page notice
#: actions/accessadminpanel.php:67
@@ -44,7 +43,6 @@ msgstr "à°…à°œà±à°žà°¾à°¤ (à°ªà±à°°à°µà±‡à°¶à°¿à°‚చని) వాడà±à°•à°
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "అంతరంగికం"
@@ -66,18 +64,15 @@ msgstr "కొతà±à°¤ నమోదà±à°²à°¨à± అచేతనంచేయి.
#. TRANS: Checkbox label for disabling new user registrations.
#: actions/accessadminpanel.php:185
-#, fuzzy
msgid "Closed"
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
+msgstr "మూసివేయబడింది"
#. TRANS: Title / tooltip for button to save access settings in site admin panel
#: actions/accessadminpanel.php:202
-#, fuzzy
msgid "Save access settings"
-msgstr "సైటౠఅమరికలనౠభదà±à°°à°ªà°°à°šà±"
+msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà± అమరికలనౠభదà±à°°à°ªà°°à°šà±"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "à°­à°¦à±à°°à°ªà°°à°šà±"
@@ -98,7 +93,7 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -107,10 +102,8 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పేజీ లేదà±"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±."
@@ -201,14 +194,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±."
@@ -222,8 +215,8 @@ msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం కనబడలేదà±."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -254,7 +247,7 @@ msgid "Could not save profile."
msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -273,7 +266,7 @@ msgstr ""
#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
msgid "Unable to save your design settings."
-msgstr ""
+msgstr "మీ రూపà±à°°à±‡à°–à°² అమరికలని à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°•à±à°¨à±à°¨à°¾à°‚."
#: actions/apiaccountupdateprofilebackgroundimage.php:187
#: actions/apiaccountupdateprofilecolors.php:142
@@ -339,7 +332,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "à°ˆ నోటీసౠఇపà±à°ªà°Ÿà°¿à°•à±‡ మీ ఇషà±à°Ÿà°¾à°‚శం."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "ఇషà±à°Ÿà°¾à°‚శానà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
@@ -459,7 +452,7 @@ msgstr "à°—à±à°‚పౠదొరకలేదà±!"
msgid "You are already a member of that group."
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à±."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à± à°† à°—à±à°‚పౠనà±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిరోధించారà±."
@@ -510,7 +503,7 @@ msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -556,11 +549,11 @@ msgstr ""
#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "à°’à°• ఉపకరణం మీ ఖాతాకి à°…à°¨à±à°¸à°‚ధానమవà±à°µà°¾à°²à°¨à±à°•à±à°‚టూంది."
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
-msgstr ""
+msgstr "à°…à°¨à±à°®à°¤à°¿à°¨à°¿ ఇవà±à°µà°‚à°¡à°¿ లేదా తిరసà±à°•à°°à°¿à°‚à°šà°‚à°¡à°¿"
#: actions/apioauthauthorize.php:292
#, php-format
@@ -576,9 +569,9 @@ msgstr "ఖాతా"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "పేరà±"
@@ -597,7 +590,7 @@ msgstr "à°…à°¨à±à°®à°¤à°¿à°‚à°šà±"
#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "మీ ఖాతా సమాచారానà±à°¨à°¿ సంపà±à°°à°¾à°ªà°¿à°‚చడానికి à°…à°¨à±à°®à°¤à°¿à°‚à°šà°‚à°¡à°¿ లేదా నిరాకరించండి."
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -626,7 +619,7 @@ msgstr "à°¸à±à°¥à°¿à°¤à°¿à°¨à°¿ తొలగించాం."
#: actions/apistatusesshow.php:144
msgid "No status with that ID found."
-msgstr ""
+msgstr "à°† IDతో ఠనోటీసౠకనబడలేదà±."
#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
#: lib/mailhandler.php:60
@@ -647,12 +640,12 @@ msgstr "à°—à°°à°¿à°·à±à°  నోటీసౠపొడవౠ%d à°…à°•à±à°·à°°
msgid "Unsupported format."
msgstr ""
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr ""
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
@@ -662,7 +655,7 @@ msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
msgid "%1$s / Updates mentioning %2$s"
msgstr ""
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -672,7 +665,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "%s బహిరంగ కాలరేఖ"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "అందరి à°¨à±à°‚à°¡à°¿ %s తాజాకరణలà±!"
@@ -687,12 +680,12 @@ msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgid "Repeats of %s"
msgstr "%s యొకà±à°• à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¾à°²à±"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s యొకà±à°• మైకà±à°°à±‹à°¬à±à°²à°¾à°—à±"
@@ -721,7 +714,7 @@ msgstr "పరిమాణం లేదà±."
msgid "Invalid size."
msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "అవతారం"
@@ -753,7 +746,7 @@ msgid "Preview"
msgstr "à°®à±à°¨à±à°œà±‚à°ªà±"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "తొలగించà±"
@@ -799,6 +792,8 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"మీరౠఈ వాడà±à°•à°°à°¿à°¨à°¿ నిజంగానే నిరోధించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à°¾? à°† తరà±à°µà°¾à°¤, వారౠమీ à°¨à±à°‚à°¡à°¿ చందా విరమింపబడతారà±, "
+"భవిషà±à°¯à°¤à±à°¤à±à°²à±‹ మీకౠచందా చేరలేరà±, మరియౠవారి à°¨à±à°‚à°¡à°¿ @-à°¸à±à°ªà°‚దనలని మీకౠతెలియజేయమà±."
#: actions/block.php:143 actions/deleteapplication.php:153
#: actions/deletenotice.php:145 actions/deleteuser.php:150
@@ -833,8 +828,8 @@ msgstr "నిరోధపౠసమాచారానà±à°¨à°¿ à°­à°¦à±à°°à°ªà
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ à°—à±à°‚పౠలేదà±."
@@ -937,7 +932,7 @@ msgstr "మీరౠఈ ఉపకరణం యొకà±à°• యజమాని à
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -995,7 +990,7 @@ msgstr "మీరౠనిజంగానే à°ˆ నోటీసà±à°¨à°¿ à°¤à±
msgid "Do not delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించకà±"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "à°ˆ నోటీసà±à°¨à°¿ తొలగించà±"
@@ -1115,7 +1110,7 @@ msgstr "లంకెలà±"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯à°¾à°²à°¨à°¿ ఉపయోగించà±"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
@@ -1155,7 +1150,6 @@ msgid "No such document \"%s\""
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పతà±à°°à°®à±‡à°®à±€ లేదà±."
#: actions/editapplication.php:54
-#, fuzzy
msgid "Edit Application"
msgstr "ఉపకరణానà±à°¨à°¿ మారà±à°šà±"
@@ -1181,7 +1175,6 @@ msgid "Name is too long (max 255 chars)."
msgstr "పేరౠచాలా పెదà±à°¦à°—à°¾ ఉంది (à°—à°°à°¿à°·à±à° à°‚à°—à°¾ 255 à°…à°•à±à°·à°°à°¾à°²à±)."
#: actions/editapplication.php:183 actions/newapplication.php:162
-#, fuzzy
msgid "Name already in use. Try another one."
msgstr "à°† పేరà±à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ వాడà±à°¤à±à°¨à±à°¨à°¾à°°à±. మరోటి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿."
@@ -1250,7 +1243,7 @@ msgstr "వివరణ చాలా పెదà±à°¦à°¦à°¿à°—à°¾ ఉంది (1
msgid "Could not update group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "మారà±à°ªà±‡à°°à±à°²à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
@@ -1265,7 +1258,7 @@ msgstr "ఈమెయిలౠఅమరికలà±"
#: actions/emailsettings.php:71
#, php-format
msgid "Manage how you get email from %%site.name%%."
-msgstr ""
+msgstr "%%site.name%% à°¨à±à°‚à°¡à°¿ మీకౠఎలా మెయిలౠవసà±à°¤à±‚ంతో సంభాళించà±à°•à±‹à°‚à°¡à°¿."
#: actions/emailsettings.php:100 actions/imsettings.php:100
#: actions/smssettings.php:104
@@ -1287,6 +1280,8 @@ msgid ""
"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
"a message with further instructions."
msgstr ""
+"à°ˆ à°šà°¿à°°à±à°¨à°¾à°®à°¾ నిరà±à°§à°¾à°°à°£à°•à±ˆ వేచివà±à°¨à±à°¨à°¾à°‚. తదà±à°ªà°°à°¿ సూచనలతో ఉనà±à°¨ సందేశానికై మీ ఇనà±â€Œà°¬à°¾à°•à±à°¸à±â€Œà°²à±‹ (à°¸à±à°ªà°¾à°®à± బాకà±à°¸à±à°²à±‹ కూడా!) "
+"చూడండి."
#: actions/emailsettings.php:117 actions/imsettings.php:120
#: actions/smssettings.php:126 lib/applicationeditform.php:331
@@ -1556,23 +1551,20 @@ msgid "Cannot read file."
msgstr "ఫైలà±à°¨à°¿ చదవలేకపోతà±à°¨à±à°¨à°¾à°‚."
#: actions/grantrole.php:62 actions/revokerole.php:62
-#, fuzzy
msgid "Invalid role."
-msgstr "తపà±à°ªà±à°¡à± పరిమాణం."
+msgstr "తపà±à°ªà±à°¡à± పాతà±à°°."
#: actions/grantrole.php:66 actions/revokerole.php:66
msgid "This role is reserved and cannot be set."
msgstr ""
#: actions/grantrole.php:75
-#, fuzzy
msgid "You cannot grant user roles on this site."
-msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
+msgstr "à°ˆ సైటà±à°²à±‹ మీరౠవాడà±à°•à°°à°²à°•à°¿ పాతà±à°°à°²à°¨à± ఇవà±à°µà°²à±‡à°°à±."
#: actions/grantrole.php:82
-#, fuzzy
msgid "User already has this role."
-msgstr "వాడà±à°•à°°à°¿à°¨à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ నిరోధించారà±."
+msgstr "వాడà±à°•à°°à°¿à°•à°¿ ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ పాతà±à°° ఉంది."
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
@@ -1646,7 +1638,7 @@ msgstr "à°—à±à°‚పౠఅలంకారం"
msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
-msgstr ""
+msgstr "నేపథà±à°¯ à°šà°¿à°¤à±à°°à°‚ మరియౠరంగà±à°² ఎంపికతో మీ à°—à±à°‚పౠఎలా కనిపించాలో మలచà±à°•à±‹à°‚à°¡à°¿."
#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
@@ -1701,7 +1693,7 @@ msgstr "à°ˆ à°—à±à°‚à°ªà±à°²à±‹ వాడà±à°•à°°à±à°²à± జాబితా
#: actions/groupmembers.php:182 lib/groupnav.php:107
msgid "Admin"
-msgstr ""
+msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
#: actions/groupmembers.php:355 lib/blockform.php:69
msgid "Block"
@@ -1890,9 +1882,9 @@ msgid "That is not your Jabber ID."
msgstr "ఇది మీ Jabber ID కాదà±"
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "%sà°•à°¿ వచà±à°šà°¿à°¨à°µà°¿"
+msgstr "%1$sà°•à°¿ వచà±à°šà°¿à°¨à°µà°¿ - %2$dà°µ పేజీ"
#: actions/inbox.php:62
#, php-format
@@ -1929,7 +1921,7 @@ msgstr "కొతà±à°¤ వాడà±à°•à°°à±à°²à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à
msgid "You are already subscribed to these users:"
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ వాడà±à°•à°°à±à°²à°•à± చందాచేరి ఉనà±à°¨à°¾à°°à±:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -1972,7 +1964,6 @@ msgstr "à°à°šà±à°›à°¿à°•à°‚à°—à°¾ ఆహà±à°µà°¾à°¨à°¾à°¨à°¿à°•à°¿ à°µà±à°¯à
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "పంపించà±"
@@ -2031,7 +2022,7 @@ msgstr "%1$s %2$s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±"
msgid "You must be logged in to leave a group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ మీరౠపà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿ ఉండాలి."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "మీరౠఆ à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à± కాదà±."
@@ -2050,7 +2041,7 @@ msgstr "వాడà±à°•à°°à°¿à°ªà±‡à°°à± లేదా సంకేతపదం
#: actions/login.php:132 actions/otp.php:120
msgid "Error setting user. You are probably not authorized."
-msgstr ""
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ అమరà±à°šà°¡à°‚లో పొరపాటà±. బహà±à°¶à°¾ మీకౠఅధీకరణ లేకపోవచà±à°šà±."
#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
msgid "Login"
@@ -2144,12 +2135,12 @@ msgstr "కొతà±à°¤ à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚డానిà
msgid "New message"
msgstr "కొతà±à°¤ సందేశం"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ మీరౠసందేశానà±à°¨à°¿ పంపించలేరà±."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "విషయం లేదà±!"
@@ -2157,7 +2148,7 @@ msgstr "విషయం లేదà±!"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "మీకౠమీరే సందేశానà±à°¨à°¿ పంపà±à°•à±‹à°•à°‚à°¡à°¿; దాని బదà±à°²à± మీలో మీరే మెలà±à°²à°—à°¾ చెపà±à°ªà±à°•à±‹à°‚à°¡à°¿."
@@ -2171,7 +2162,7 @@ msgstr "సందేశానà±à°¨à°¿ పంపించాం"
msgid "Direct message to %s sent."
msgstr "%sà°•à°¿ నేరౠసందేశానà±à°¨à°¿ పంపించాం"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "అజాకà±à°¸à± పొరపాటà±"
@@ -2287,10 +2278,10 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
-msgstr ""
+msgstr "%2$sలో %1$s యొకà±à°• à°¸à±à°¥à°¿à°¤à°¿"
#: actions/oembed.php:157
msgid "content type "
@@ -2300,8 +2291,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాతà±à°°à°®à±‡ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2437,7 +2428,7 @@ msgstr "పాత సంకేతపదం తపà±à°ªà±"
msgid "Error saving user; invalid."
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±: సరికాదà±."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "కొతà±à°¤ సంకేతపదానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°²à±‡à°®à±."
@@ -2448,7 +2439,7 @@ msgstr "సంకేతపదం à°­à°¦à±à°°à°®à°¯à±à°¯à°¿à°‚ది."
#. TRANS: Menu item for site administration
#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
-msgstr ""
+msgstr "à°¤à±à°°à±‹à°µà°²à±"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
@@ -2656,8 +2647,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 à°šà°¿à°¨à±à°¨à°¬à°¡à°¿ à°…à°•à±à°·à°°à°¾à°²à± లేదా అంకెలà±, విరామచిహà±à°¨à°¾à°²à± మరియౠఖాళీలౠతపà±à°ª"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "పూరà±à°¤à°¿ పేరà±"
@@ -2684,9 +2675,9 @@ msgid "Bio"
msgstr "à°¸à±à°µà°ªà°°à°¿à°šà°¯à°‚"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "à°ªà±à°°à°¾à°‚తం"
@@ -2700,7 +2691,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "à°Ÿà±à°¯à°¾à°—à±à°²à±"
@@ -2789,19 +2780,16 @@ msgid "Public timeline"
msgstr "à°ªà±à°°à°œà°¾ కాలరేఖ"
#: actions/public.php:160
-#, fuzzy
msgid "Public Stream Feed (RSS 1.0)"
-msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
+msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(RSS 1.0)"
#: actions/public.php:164
-#, fuzzy
msgid "Public Stream Feed (RSS 2.0)"
-msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
+msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(RSS 2.0)"
#: actions/public.php:168
-#, fuzzy
msgid "Public Stream Feed (Atom)"
-msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడà±"
+msgstr "à°ªà±à°°à°œà°¾ వాహిని ఫీడౠ(ఆటమà±)"
#: actions/public.php:188
#, php-format
@@ -2818,7 +2806,7 @@ msgstr ""
#, php-format
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
-msgstr ""
+msgstr "[ఖాతా నమోదౠచేసà±à°•à±à°¨à°¿](%%action.register%%) మొదటగా à°µà±à°°à°¾à°¸à±‡à°¦à°¿ మీరే à°Žà°‚à°¦à±à°•à± కాకూడదà±!"
#: actions/public.php:242
#, php-format
@@ -2895,7 +2883,7 @@ msgstr "à°ˆ నిరà±à°§à°¾à°°à°£ సంకేతం చాలా పాతà°
#: actions/recoverpassword.php:111
msgid "Could not update user with confirmed email address."
-msgstr ""
+msgstr "నిరà±à°§à°¾à°°à°¿à°¤ ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°¤à±‹ వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకపోయాం."
#: actions/recoverpassword.php:152
msgid ""
@@ -2932,7 +2920,7 @@ msgstr ""
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2952,41 +2940,41 @@ msgstr ""
msgid "Enter a nickname or email address."
msgstr "పేరౠలేదా ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ ఇవà±à°µà°‚à°¡à°¿."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à±ˆ నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°²à± à°à°®à±€ లేవà±."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "à°šà°¿à°°à±à°¨à°¾à°®à°¾ నిరà±à°§à°¾à°°à°£à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr "మీ సంకేతపదానà±à°¨à°¿ తిరిగి పొందడానికై అవసరమైన సూచనలని మీ ఖాతాతో నమోదైన ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾à°•à°¿ పంపించాం."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "సంకేతపదం 6 లేదా అంతకంటే à°Žà°•à±à°•à°µ à°…à°•à±à°·à°°à°¾à°²à±à°‚డాలి."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "సంకేతపదం మరియౠనిరà±à°§à°¾à°°à°£ సరిపోలేదà±."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr ""
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "మీ కొతà±à°¤ సంకేతపదం à°­à°¦à±à°°à°®à±ˆà°‚ది. మీరౠఇపà±à°ªà±à°¡à± లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±."
@@ -3103,6 +3091,8 @@ 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
@@ -3111,6 +3101,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 ""
+"చందా చేరడానికి, మీరౠ[à°ªà±à°°à°µà±‡à°¶à°¿à°‚చవచà±à°šà±](%%action.login%%), లేదా కొతà±à°¤ ఖాతాని [నమోదà±à°šà±‡à°¸à±à°•à±‹à°µà°šà±à°šà±](%%"
+"action.register%%). ఒకవేళ మీకౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°à°¦à±ˆà°¨à°¾ [పొసగే మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠసైటà±à°²à±‹](%%doc.openmublog%"
+"%) ఖాతా ఉంటే, మీ à°ªà±à°°à±Šà°«à±ˆà°²à± à°šà°¿à°°à±à°¨à°¾à°®à°¾à°¨à°¿ à°•à±à°°à°¿à°‚à°¦ ఇవà±à°µà°‚à°¡à°¿."
#: actions/remotesubscribe.php:112
msgid "Remote subscribe"
@@ -3138,7 +3131,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "చందాచేరà±"
@@ -3160,7 +3153,7 @@ msgstr ""
#: actions/repeat.php:57
msgid "Only logged-in users can repeat notices."
-msgstr ""
+msgstr "కేవలం à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°¿à°¨ వాడà±à°•à°°à±à°²à± మాతà±à°°à°®à±‡ నోటీసà±à°²à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చగలరà±."
#: actions/repeat.php:64 actions/repeat.php:71
#, fuzzy
@@ -3168,16 +3161,14 @@ msgid "No notice specified."
msgstr "కొతà±à°¤ సందేశం"
#: actions/repeat.php:76
-#, fuzzy
msgid "You can't repeat your own notice."
-msgstr "à°ˆ లైసెనà±à°¸à±à°•à°¿ అంగీకరించకపోతే మీరౠనమోదà±à°šà±‡à°¸à±à°•à±‹à°²à±‡à°°à±."
+msgstr "మీ నోటీసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించారà±."
+msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
@@ -3194,24 +3185,24 @@ msgid "Replies to %s"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
#: actions/replies.php:128
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s, page %2$d"
-msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+msgstr "%1$sà°•à°¿ à°¸à±à°ªà°‚దనలà±, %2$dà°µ పేజీ"
#: actions/replies.php:145
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 1.0)"
-msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
+msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(RSS 1.0)"
#: actions/replies.php:152
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (RSS 2.0)"
-msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
+msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(RSS 2.0)"
#: actions/replies.php:159
-#, fuzzy, php-format
+#, php-format
msgid "Replies feed for %s (Atom)"
-msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
+msgstr "%s కొరకౠసà±à°ªà°‚దనల ఫీడౠ(ఆటమà±)"
#: actions/replies.php:199
#, fuzzy, php-format
@@ -3237,9 +3228,9 @@ msgid ""
msgstr ""
#: actions/repliesrss.php:72
-#, fuzzy, php-format
+#, php-format
msgid "Replies to %1$s on %2$s!"
-msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
+msgstr "%2$sలో %1$sà°•à°¿ à°¸à±à°ªà°‚దనలà±!"
#: actions/revokerole.php:75
#, fuzzy
@@ -3304,7 +3295,7 @@ msgstr "à°—à±à°‚à°ªà±à°¨à°¿ వదిలివెళà±à°³à°¡à°¾à°¨à°¿à°•à°¿ à
#: actions/showapplication.php:157
msgid "Application profile"
-msgstr ""
+msgstr "ఉపకరణ à°ªà±à°°à°µà°°"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
@@ -3324,7 +3315,7 @@ msgstr "సంసà±à°§"
msgid "Description"
msgstr "వివరణ"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "గణాంకాలà±"
@@ -3433,71 +3424,71 @@ msgid "%s group"
msgstr "%s à°—à±à°‚à°ªà±"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
+msgstr "%1$s à°—à±à°‚పౠ, %2$dà°µ పేజీ"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "à°—à±à°‚పౠపà±à°°à±Šà°«à±ˆà°²à±"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "గమనిక"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "మారà±à°ªà±‡à°°à±à°²à±"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "à°—à±à°‚పౠచరà±à°¯à°²à±"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s యొకà±à°• సందేశమà±à°² ఫీడà±"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "%s à°—à±à°‚à°ªà±"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "సభà±à°¯à±à°²à±"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(à°à°®à±€à°²à±‡à°¦à±)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "అందరౠసభà±à°¯à±à°²à±‚"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3507,7 +3498,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3516,7 +3507,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
@@ -3548,9 +3539,9 @@ msgid " tagged %s"
msgstr ""
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%1$s మరియౠమితà±à°°à±à°²à±, పేజీ %2$d"
+msgstr "%1$s, %2$dవ పేజీ"
#: actions/showstream.php:122
#, fuzzy, php-format
@@ -3699,9 +3690,8 @@ msgid "Default timezone for the site; usually UTC."
msgstr ""
#: actions/siteadminpanel.php:262
-#, fuzzy
msgid "Default language"
-msgstr "à°…à°ªà±à°°à°®à±‡à°¯ సైటౠభాష"
+msgstr "à°…à°ªà±à°°à°®à±‡à°¯ భాష"
#: actions/siteadminpanel.php:263
msgid "Site language when autodetection from browser settings is not available"
@@ -3744,7 +3734,7 @@ msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొà
#: actions/sitenoticeadminpanel.php:113
msgid "Max length for the site-wide notice is 255 chars"
-msgstr ""
+msgstr "సైటà±-వారీ నోటీసà±à°•à°¿ à°—à°°à°¿à°·à±à°  పొడవౠ255 à°…à°•à±à°·à°°à°¾à°²à±"
#: actions/sitenoticeadminpanel.php:176
#, fuzzy
@@ -3753,7 +3743,7 @@ msgstr "సైటౠగమనిక"
#: actions/sitenoticeadminpanel.php:178
msgid "Site-wide notice text (255 chars max; HTML okay)"
-msgstr ""
+msgstr "సైటà±-వారీ నోటీసౠపాఠà±à°¯à°‚ (255 à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚; HTML పరà±à°²à±‡à°¦à±)"
#: actions/sitenoticeadminpanel.php:198
#, fuzzy
@@ -4012,7 +4002,7 @@ msgstr ""
#: actions/subscriptions.php:128 actions/subscriptions.php:132
#, php-format
msgid "%s is not listening to anyone."
-msgstr ""
+msgstr "%s à°ªà±à°°à°¸à±à°¤à±à°¤à°‚ ఎవరినీ వినడంలేదà±."
#: actions/subscriptions.php:199
msgid "Jabber"
@@ -4052,12 +4042,12 @@ msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ పతà±à°°à°®à±‡à°®à±€ లేదà±."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "ఫొటో"
@@ -4123,7 +4113,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "వాడà±à°•à°°à°¿"
@@ -4225,11 +4214,11 @@ msgstr "à°ˆ చందాని తిరసà±à°•à°°à°¿à°‚à°šà±"
#: actions/userauthorization.php:232
msgid "No authorization request!"
-msgstr ""
+msgstr "అధీకరణ à°…à°­à±à°¯à°°à±à°¥à°¨ లేదà±!"
#: actions/userauthorization.php:254
msgid "Subscription authorized"
-msgstr ""
+msgstr "చందాని అధీకరించారà±"
#: actions/userauthorization.php:256
msgid ""
@@ -4299,9 +4288,9 @@ msgid "Enjoy your hotdog!"
msgstr ""
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "%1$s à°—à±à°‚పౠసభà±à°¯à±à°²à±, పేజీ %2$d"
+msgstr "%1$s à°—à±à°‚à°ªà±à°²à±, %2$dà°µ పేజీ"
#: actions/usergroups.php:130
msgid "Search for more groups"
@@ -4374,19 +4363,19 @@ msgstr "సంచిక"
msgid "Author(s)"
msgstr "రచయిత(à°²à±)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4404,9 +4393,8 @@ msgid "Group leave failed."
msgstr "à°—à±à°‚పౠనà±à°‚à°¡à°¿ వైదొలగడం విఫలమైంది."
#: classes/Local_group.php:41
-#, fuzzy
msgid "Could not update local group."
-msgstr "à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
+msgstr "à°¸à±à°¥à°¾à°¨à°¿à°• à°—à±à°‚à°ªà±à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
#: classes/Login_token.php:76
#, fuzzy, php-format
@@ -4425,46 +4413,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "à°ˆ సైటà±à°²à±‹ నోటీసà±à°²à± రాయడం à°¨à±à°‚à°¡à°¿ మిమà±à°®à°²à±à°¨à°¿ నిషేధించారà±."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4496,29 +4484,29 @@ msgstr "చందాని తొలగించలేకపోయాం."
msgid "Couldn't delete subscription OMB token."
msgstr "చందాని తొలగించలేకపోయాం."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "చందాని తొలగించలేకపోయాం."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "@%2$s, %1$sà°•à°¿ à°¸à±à°µà°¾à°—తం!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "à°—à±à°‚à°ªà±à°¨à°¿ సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "à°—à±à°‚పౠసభà±à°¯à°¤à±à°µà°¾à°¨à±à°¨à°¿ అమరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "చందాని సృషà±à°Ÿà°¿à°‚చలేకపోయాం."
@@ -4559,7 +4547,7 @@ msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
-msgstr ""
+msgstr "శీరà±à°·à°¿à°•à°²à±‡à°¨à°¿ పేజీ"
#: lib/action.php:424
msgid "Primary site navigation"
@@ -4572,7 +4560,6 @@ msgid "Personal profile and friends timeline"
msgstr ""
#: lib/action.php:433
-#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "à°µà±à°¯à°•à±à°¤à°¿à°—à°¤"
@@ -4597,13 +4584,11 @@ msgstr "à°…à°¨à±à°¸à°‚ధానించà±"
#. TRANS: Tooltip for menu option "Admin"
#: lib/action.php:446
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "చందాలà±"
+msgstr "సైటౠసà±à°µà°°à±‚పణానà±à°¨à°¿ మారà±à°šà°‚à°¡à°¿"
#: lib/action.php:449
-#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
@@ -4616,72 +4601,61 @@ msgid "Invite friends and colleagues to join you on %s"
msgstr "à°ˆ ఫారానà±à°¨à°¿ ఉపయోగించి మీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à°¨à± మరియౠసహోదà±à°¯à±‹à°—à±à°²à°¨à± à°ˆ సేవనౠవినియోగించà±à°•à±‹à°®à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà°‚à°¡à°¿."
#: lib/action.php:456
-#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
#. TRANS: Tooltip for main menu option "Logout"
#: lib/action.php:462
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "సైటౠనà±à°‚à°¡à°¿ నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
#: lib/action.php:465
-#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "నిషà±à°•à±à°°à°®à°¿à°‚à°šà±"
#. TRANS: Tooltip for main menu option "Register"
#: lib/action.php:470
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
-msgstr "కొతà±à°¤ ఖాతా సృషà±à°Ÿà°¿à°‚à°šà±"
+msgstr "ఖాతాని సృషà±à°Ÿà°¿à°‚à°šà±à°•à±‹à°‚à°¡à°¿"
#: lib/action.php:473
-#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "నమోదà±"
#. TRANS: Tooltip for main menu option "Login"
#: lib/action.php:476
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr "సైటà±à°²à±‹à°¨à°¿ à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±"
+msgstr "సైటౠలోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
#: lib/action.php:479
-#, fuzzy
msgctxt "MENU"
msgid "Login"
-msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà°‚à°¡à°¿"
+msgstr "à°ªà±à°°à°µà±‡à°¶à°¿à°‚à°šà±"
#. TRANS: Tooltip for main menu option "Help"
#: lib/action.php:482
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "సహాయం కావాలి!"
#: lib/action.php:485
-#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "సహాయం"
#. TRANS: Tooltip for main menu option "Search"
#: lib/action.php:488
-#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr "మరినà±à°¨à°¿ à°—à±à°‚à°ªà±à°²à°•à±ˆ వెతà±à°•à±"
+msgstr "à°ªà±à°°à°œà°²à± లేదా పాఠà±à°¯à°‚ కొరకౠవెతకండి"
#: lib/action.php:491
-#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "వెతà±à°•à±"
@@ -4741,7 +4715,7 @@ msgstr "బాడà±à°œà°¿"
msgid "StatusNet software license"
msgstr "à°¸à±à°Ÿà±‡à°Ÿà°¸à±â€Œà°¨à±†à°Ÿà± మృదూపకరణ లైసెనà±à°¸à±"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4750,12 +4724,12 @@ msgstr ""
"**%%site.name%%** అనేది [%%site.broughtby%%](%%site.broughtbyurl%%) వారౠ"
"అందిసà±à°¤à±à°¨à±à°¨ మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚. "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** అనేది మైకà±à°°à±‹ à°¬à±à°²à°¾à°—ింగౠసదà±à°ªà°¾à°¯à°‚."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4766,42 +4740,42 @@ msgstr ""
"html) à°•à°¿à°‚à°¦ లభà±à°¯à°®à°¯à±à°¯à±‡ [à°¸à±à°Ÿà±‡à°Ÿà°¸à±&zwnj;నెటà±](http://status.net/) మైకà±à°°à±‹à°¬à±à°²à°¾à°—ింగౠఉపకరణం సంచిక %s "
"పై నడà±à°¸à±à°¤à±à°‚ది."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "కొతà±à°¤ సందేశం"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "à°…à°¨à±à°¨à±€ "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
-msgstr ""
+msgstr "లైసెనà±à°¸à±."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "పేజీకరణ"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "తరà±à°µà°¾à°¤"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "ఇంతకà±à°°à°¿à°¤à°‚"
@@ -4817,6 +4791,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4849,7 +4827,6 @@ msgstr "à°ªà±à°°à°¾à°¥à°®à°¿à°• సైటౠసà±à°µà°°à±‚పణం"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:350
-#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "సైటà±"
@@ -4861,7 +4838,6 @@ msgstr "రూపకలà±à°ªà°¨ à°¸à±à°µà°°à±‚పణం"
#. TRANS: Menu item for site administration
#: lib/adminpanelaction.php:358
-#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "రూపà±à°°à±‡à°–à°²à±"
@@ -4910,7 +4886,7 @@ msgstr "SMS నిరà±à°§à°¾à°°à°£"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -4960,11 +4936,11 @@ msgstr "విహారిణి"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "మేజోపరి"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "ఉపకరణ రకం, విహారిణి లేదా మేజోపరి"
#: lib/applicationeditform.php:297
msgid "Read-only"
@@ -4987,11 +4963,11 @@ msgstr "తొలగించà±"
msgid "Attachments"
msgstr "జోడింపà±à°²à±"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "రచయిత"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "à°ªà±à°°à±Šà°«à±ˆà°²à±"
@@ -5014,37 +4990,52 @@ msgstr "సంకేతపదం మారà±à°ªà±"
msgid "Password changing is not allowed"
msgstr "సంకేతపదం మారà±à°ªà±"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "ఆదేశ ఫలితాలà±"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "ఆదేశం పూరà±à°¤à°¯à±à°¯à°¿à°‚ది"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "ఆదేశం విఫలమైంది"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±."
+
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "వాడà±à°•à°°à°¿à°¨à°¿ తాజాకరించలేకà±à°¨à±à°¨à°¾à°‚."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, à°ˆ ఆదేశం ఇంకా అమలà±à°ªà°°à°šà°¬à°¡à°²à±‡à°¦à±."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5055,199 +5046,195 @@ msgstr ""
"చందాదారà±à°²à±: %2$s\n"
"నోటీసà±à°²à±: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "à°† ఈమెయిలౠచిరà±à°¨à°¾à°®à°¾ లేదా వాడà±à°•à°°à°¿à°ªà±‡à°°à±à°¤à±‹ వాడà±à°•à°°à±à°²à±†à°µà°°à±‚ లేరà±."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "వాడà±à°•à°°à°¿à°•à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à± లేదà±."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ à°† à°—à±à°‚à°ªà±à°²à±‹ సభà±à°¯à±à°²à±"
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚à°ªà±à°²à±‹ చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚"
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%s %s à°—à±à°‚à°ªà±à°²à±‹ చేరారà±"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "వాడà±à°•à°°à°¿ %sని %s à°—à±à°‚పౠనà±à°‚à°¡à°¿ తొలగించలేకపోయాం"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%2$s à°—à±à°‚పౠనà±à°‚à°¡à°¿ %1$s వైదొలిగారà±"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "పూరà±à°¤à°¿à°ªà±‡à°°à±: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "à°ªà±à°°à°¾à°‚తం: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "హోంపేజీ: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "à°—à±à°°à°¿à°‚à°šà°¿: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%d పంపించారà±"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "%sà°•à°¿ నేరౠసందేశానà±à°¨à°¿ పంపించాం"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "మీ నోటిసà±à°¨à°¿ మీరే à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చలేరà±"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "ఇపà±à°ªà°Ÿà°¿à°•à±‡ à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚చారà±"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "సందేశాలà±"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%d పంపించారà±"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "సందేశానà±à°¨à°¿ à°­à°¦à±à°°à°ªà°°à°šà°¡à°‚లో పొరపాటà±."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "à°à°µà°°à°¿à°•à°¿ చందా చేరాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ వాడà±à°•à°°à°¿ లేరà±"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "%sà°•à°¿ చందా చేరారà±"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "ఎవరి à°¨à±à°‚à°¡à°¿ చందా విరమించాలనà±à°•à±à°‚à°Ÿà±à°¨à±à°¨à°¾à°°à±‹ à°† వాడà±à°•à°°à°¿ పేరౠతెలియజేయండి"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr "à°ˆ లంకెని ఒకే సారి ఉపయోగించగలరà±, మరియౠఅది పనిచేసేది 2 నిమిషాలౠమాతà±à°°à°®à±‡: %s"
-#: lib/command.php:692
-#, fuzzy, php-format
+#: lib/command.php:735
+#, php-format
msgid "Unsubscribed %s"
msgstr "%s à°¨à±à°‚à°¡à°¿ చందా విరమించారà±"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "మీరౠఎవరికీ చందాచేరలేదà±."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "మీకౠచందాదారà±à°²à± ఎవరూ లేరà±."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
msgstr[1] "%sà°•à°¿ à°¸à±à°ªà°‚దనలà±"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "మీరౠఠగà±à°‚à°ªà±à°²à±‹à°¨à±‚ సభà±à°¯à±à°²à± కాదà±."
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
msgstr[1] "మీరౠఇపà±à°ªà°Ÿà°¿à°•à±‡ లోనికి à°ªà±à°°à°µà±‡à°¶à°¿à°‚చారà±!"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5289,20 +5276,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "నిరà±à°§à°¾à°°à°£ సంకేతం లేదà±."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5324,7 +5311,7 @@ msgstr "à°…à°¨à±à°¸à°‚ధానాలà±"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "అధీకృత à°…à°¨à±à°¸à°‚ధాన ఉపకరణాలà±"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5480,50 +5467,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "ఇది చాలా పొడవà±à°‚ది. à°—à°°à°¿à°·à±à°  సందేశ పరిమాణం 140 à°…à°•à±à°·à°°à°¾à°²à±."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "పాకà±à°·à°¿à°• à°Žà°—à±à°®à°¤à°¿."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "బొమà±à°® కాదౠలేదా పాడైపోయిన ఫైలà±."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "à°…à°Ÿà±à°µà°‚à°Ÿà°¿ సందేశమేమీ లేదà±."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "తెలియని ఫైలౠరకం"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "మెబై"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "కిబై"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, fuzzy, php-format
msgid "Unknown inbox source %d."
msgstr "à°—à±à°°à±à°¤à± తెలియని భాష \"%s\""
@@ -5672,6 +5659,20 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) మీకౠఒక అంతరంగిక సందేశానà±à°¨à°¿ పంపించారà±:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"వారి సందేశానికి మీరౠఇకà±à°•à°¡ జవాబివà±à°µà°µà°šà±à°šà±:\n"
+"\n"
+"%4$s\n"
+"\n"
+"à°ˆ ఈమెయిలà±à°•à°¿ à°¸à±à°ªà°‚దించకండి; ఇది వారికి వెళà±à°³à°¦à±.\n"
+"\n"
+"à°¶à±à°­à°¾à°•à°¾à°‚à°•à±à°·à°²à°¤à±‹,\n"
+"%5$s\n"
#: lib/mail.php:568
#, php-format
@@ -5739,7 +5740,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "à°¨à±à°‚à°¡à°¿"
@@ -5780,11 +5781,11 @@ msgstr ""
#: lib/mediafile.php:152
msgid "The uploaded file was only partially uploaded."
-msgstr ""
+msgstr "à°Žà°•à±à°•à°¿à°‚à°šà°¿à°¨ ఫైలౠకేవలం పాకà±à°·à°¿à°•à°‚à°—à°¾ మాతà±à°°à°®à±‡ à°Žà°•à±à°•à°¿à°‚ది."
#: lib/mediafile.php:159
msgid "Missing a temporary folder."
-msgstr ""
+msgstr "తాతà±à°•à°¾à°²à°¿à°• సంచయం కనబడటంలేదà±."
#: lib/mediafile.php:162
msgid "Failed to write file to disk."
@@ -5830,7 +5831,6 @@ msgid "Available characters"
msgstr "à°…à°‚à°¦à±à°¬à°¾à°Ÿà±à°²à±‹ ఉనà±à°¨ à°…à°•à±à°·à°°à°¾à°²à±"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "పంపించà±"
@@ -5868,6 +5868,8 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"à°•à±à°·à°®à°¿à°‚à°šà°‚à°¡à°¿, మీ భౌగోళిక à°ªà±à°°à°¾à°‚తానà±à°¨à°¿ తెలà±à°¸à±à°•à±‹à°µà°¡à°‚ à°…à°¨à±à°•à±à°¨à±à°¨à°¦à°¾à°¨à°¿à°•à°‚టే à°Žà°•à±à°•à°µ సమయం తీసà±à°•à±à°‚టూంది, దయచేసి "
+"కాసేపాగి à°ªà±à°°à°¯à°¤à±à°¨à°¿à°‚à°šà°‚à°¡à°¿"
#: lib/noticelist.php:429
#, php-format
@@ -5894,24 +5896,24 @@ msgstr "à°ª"
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "సందరà±à°­à°‚లో"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "సృషà±à°Ÿà°¿à°¤à°‚"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "à°ˆ నోటీసà±à°ªà±ˆ à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "à°¸à±à°ªà°‚దించండి"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "నోటీసà±à°¨à°¿ తొలగించాం."
@@ -5948,7 +5950,7 @@ msgstr "కొతà±à°¤ సందేశం"
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
-msgstr ""
+msgstr "కొతà±à°¤ చందాని చేరà±à°šà°²à±‡à°•à°ªà±‹à°¯à°¾à°‚."
#: lib/personalgroupnav.php:99
msgid "Personal"
@@ -6057,7 +6059,7 @@ msgstr "à°ˆ నోటీసà±à°¨à°¿ à°ªà±à°¨à°°à°¾à°µà±ƒà°¤à°¿à°‚à°šà±"
msgid "Revoke the \"%s\" role from this user"
msgstr "à°ˆ à°—à±à°‚à°ªà±à°¨à±à°‚à°¡à°¿ à°ˆ వాడà±à°•à°°à°¿à°¨à°¿ నిరోధించà±"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6092,7 +6094,7 @@ msgstr "à°ªà±à°°à°œà°²à±"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr ""
+msgstr "à°ˆ సైటà±à°²à±‹à°¨à°¿ à°µà±à°¯à°•à±à°¤à±à°²à°¨à°¿ à°•à°¨à±à°—ొనండి"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
@@ -6100,11 +6102,11 @@ msgstr ""
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
-msgstr ""
+msgstr "à°ˆ సైటà±à°²à±‹à°¨à°¿ à°—à±à°‚à°ªà±à°²à°¨à°¿ à°•à°¨à±à°—ొనండి"
#: lib/section.php:89
msgid "Untitled section"
-msgstr ""
+msgstr "శీరà±à°·à°¿à°•à°²à±‡à°¨à°¿ విభాగం"
#: lib/section.php:106
msgid "More..."
@@ -6142,7 +6144,7 @@ msgstr "ఆహà±à°µà°¾à°¨à°¿à°‚à°šà±"
#: lib/subgroupnav.php:106
#, php-format
msgid "Invite friends and colleagues to join you on %s"
-msgstr ""
+msgstr "%sలో తోడà±à°•à±ˆ మీ à°¸à±à°¨à±‡à°¹à°¿à°¤à±à°²à°¨à°¿ మరియౠసహోదà±à°¯à±‹à°—à±à°²à°¨à°¿ ఆహà±à°µà°¾à°¨à°¿à°‚à°šà°‚à°¡à°¿"
#: lib/subscriberspeopleselftagcloudsection.php:48
#: lib/subscriptionspeopleselftagcloudsection.php:48
@@ -6188,92 +6190,94 @@ msgstr "à°ˆ వాడà±à°•à°°à°¿ à°¨à±à°‚à°¡à°¿ చందామానà±"
msgid "Unsubscribe"
msgstr "చందామానà±"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "అవతారానà±à°¨à°¿ మారà±à°šà±"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "వాడà±à°•à°°à°¿ à°šà°°à±à°¯à°²à±"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "à°«à±à°°à±Šà°«à±ˆà°²à± అమరికలà±"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "మారà±à°šà±"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "à°ˆ వాడà±à°•à°°à°¿à°•à°¿ à°’à°• నేరౠసందేశానà±à°¨à°¿ పంపించండి"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "సందేశం"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
-#, fuzzy
+#: lib/userprofile.php:364
msgid "User role"
-msgstr "వాడà±à°•à°°à°¿ à°ªà±à°°à±Šà°«à±ˆà°²à±"
+msgstr "వాడà±à°•à°°à°¿ పాతà±à°°"
-#: lib/userprofile.php:354
-#, fuzzy
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "నిరà±à°µà°¾à°¹à°•à±à°²à±"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
-msgstr ""
+msgstr "సమనà±à°µà°¯à°•à°°à±à°¤"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "కొనà±à°¨à°¿ à°•à±à°·à°£à°¾à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "à°“ నిమిషం à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "à°’à°• à°—à°‚à°Ÿ à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "%d à°—à°‚à°Ÿà°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "à°“ రోజౠకà±à°°à°¿à°¤à°‚"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "%d రోజà±à°² à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "à°“ నెల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల à°•à±à°°à°¿à°¤à°‚"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "à°’à°• సంవతà±à°¸à°°à°‚ à°•à±à°°à°¿à°¤à°‚"
@@ -6287,7 +6291,7 @@ msgstr "%s అనేది సరైన రంగౠకాదà±!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s అనేది సరైన రంగౠకాదà±! 3 లేదా 6 హెకà±à°¸à± à°…à°•à±à°·à°°à°¾à°²à°¨à± వాడండి."
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "నోటిసౠచాలా పొడవà±à°—à°¾ ఉంది - %1$d à°…à°•à±à°·à°°à°¾à°²à± à°—à°°à°¿à°·à±à° à°‚, మీరౠ%2$d పంపించారà±."
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index 805e55268..b6668adcd 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -9,12 +9,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:04+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:39+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
@@ -101,7 +101,7 @@ msgstr "Böyle bir durum mesajı yok."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -110,10 +110,8 @@ msgstr "Böyle bir durum mesajı yok."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Böyle bir kullanıcı yok."
@@ -205,14 +203,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Onay kodu bulunamadı."
@@ -226,8 +224,8 @@ msgstr "Onay kodu bulunamadı."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -258,7 +256,7 @@ msgid "Could not save profile."
msgstr "Profil kaydedilemedi."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -346,7 +344,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr "Bu zaten sizin Jabber ID'niz."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -471,7 +469,7 @@ msgstr "İstek bulunamadı!"
msgid "You are already a member of that group."
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -523,7 +521,7 @@ msgstr "Geçersiz büyüklük."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -591,9 +589,9 @@ msgstr "Hakkında"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Takma ad"
@@ -667,12 +665,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Desteklenmeyen görüntü dosyası biçemi."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s'in %2$s'deki durum mesajları "
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s adli kullanicinin durum mesajlari"
@@ -682,7 +680,7 @@ msgstr "%s adli kullanicinin durum mesajlari"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s'in %2$s'deki durum mesajları "
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -692,7 +690,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -707,12 +705,12 @@ msgstr "%s için cevaplar"
msgid "Repeats of %s"
msgstr "%s için cevaplar"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s adli kullanicinin durum mesajlari"
@@ -742,7 +740,7 @@ msgstr ""
msgid "Invalid size."
msgstr "Geçersiz büyüklük."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Avatar"
@@ -775,7 +773,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr ""
@@ -860,8 +858,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "Böyle bir durum mesajı yok."
@@ -970,7 +968,7 @@ msgstr "Bize o profili yollamadınız"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1030,7 +1028,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "Böyle bir durum mesajı yok."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr ""
@@ -1301,7 +1299,7 @@ msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
msgid "Could not update group."
msgstr "Kullanıcı güncellenemedi."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Avatar bilgisi kaydedilemedi"
@@ -2009,7 +2007,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2111,7 +2109,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "Bize o profili yollamadınız"
@@ -2230,12 +2228,12 @@ msgstr ""
msgid "New message"
msgstr ""
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "İçerik yok!"
@@ -2243,7 +2241,7 @@ msgstr "İçerik yok!"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2257,7 +2255,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2372,7 +2370,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Bu durum mesajının ait oldugu kullanıcı profili yok"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s'in %2$s'deki durum mesajları "
@@ -2386,8 +2384,8 @@ msgstr "BaÄŸlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2527,7 +2525,7 @@ msgstr "Eski parola yanlış"
msgid "Error saving user; invalid."
msgstr "Kullanıcıyı kaydetmede hata oluştu; geçersiz."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Yeni parola kaydedilemedi."
@@ -2753,8 +2751,8 @@ msgstr ""
"verilmez"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Tam Ä°sim"
@@ -2783,9 +2781,9 @@ msgid "Bio"
msgstr "Hakkında"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Yer"
@@ -2799,7 +2797,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -3029,7 +3027,7 @@ msgstr "Parolayı sıfırla"
msgid "Recover password"
msgstr "Parolanı geri al"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Parola geri alma isteÄŸi"
@@ -3049,19 +3047,19 @@ msgstr "Sıfırla"
msgid "Enter a nickname or email address."
msgstr "Bir takma ad veya eposta adresi girin."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Adres onayını kaydetmede hata."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3069,23 +3067,23 @@ msgstr ""
"Hesabınıza eklemiş olduğunuz eposta adresine parolanızı geri getirmek için "
"gerekli olan talimatlar yollanmıştır."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Beklemeğen parola sıfırlaması."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Parola 6 veya daha fazla karakterden oluşmalıdır."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Parola ve onaylaması birbirini tutmuyor."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Kullanıcı ayarlamada hata oluştu."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Yeni parola başarıyla kaydedildi. Şimdi giriş yaptınız."
@@ -3230,7 +3228,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Abone ol"
@@ -3270,7 +3268,7 @@ msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
msgid "You already repeated that notice."
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Yarat"
@@ -3419,7 +3417,7 @@ msgstr "Yer"
msgid "Description"
msgstr "Abonelikler"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Ä°statistikler"
@@ -3530,71 +3528,71 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "Bütün abonelikler"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "Böyle bir durum mesajı yok."
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
#, fuzzy
msgid "Note"
msgstr "Durum mesajları"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Üyelik başlangıcı"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "Yarat"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3604,7 +3602,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3613,7 +3611,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4152,13 +4150,13 @@ msgstr "Böyle bir belge yok."
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "Kullanıcının profili yok."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4488,19 +4486,19 @@ msgstr "KiÅŸisel"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4542,46 +4540,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4614,31 +4612,31 @@ msgstr "Abonelik silinemedi."
msgid "Couldn't delete subscription OMB token."
msgstr "Abonelik silinemedi."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Abonelik silinemedi."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "Avatar bilgisi kaydedilemedi"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Abonelik oluşturulamadı."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "Abonelik oluşturulamadı."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Abonelik oluşturulamadı."
@@ -4860,7 +4858,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4869,12 +4867,12 @@ msgstr ""
"**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından "
"hazırlanan anında mesajlaşma ağıdır. "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** bir aninda mesajlaşma sosyal ağıdır."
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4885,43 +4883,43 @@ msgstr ""
"licenses/agpl-3.0.html) lisansı ile korunan [StatusNet](http://status.net/) "
"microbloglama yazılımının %s. versiyonunu kullanmaktadır."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "Yeni durum mesajı"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "« Sonra"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "Önce »"
@@ -4938,6 +4936,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5034,7 +5036,7 @@ msgstr "Eposta adresi onayı"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5115,11 +5117,11 @@ msgstr "Kaldır"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "Profil"
@@ -5142,37 +5144,51 @@ msgstr "Parola kaydedildi."
msgid "Password changing is not allowed"
msgstr "Parola kaydedildi."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
msgstr ""
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "Kullanıcının profili yok."
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Kullanıcı güncellenemedi."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Kullanıcı güncellenemedi."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "%s için cevaplar"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5180,202 +5196,199 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "Kullanıcının profili yok."
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Sunucuya yönlendirme yapılamadı: %s"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%1$s'in %2$s'deki durum mesajları "
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "OpenID formu yaratılamadı: %s"
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "%1$s'in %2$s'deki durum mesajları "
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "Tam Ä°sim"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Eğer lisansı kabul etmezseniz kayıt olamazsınız."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Zaten giriş yapmış durumdasıznız!"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Durum mesajları"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "%s için cevaplar"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "Böyle bir kullanıcı yok."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Bize o profili yollamadınız"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Aboneliği sonlandır"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Uzaktan abonelik"
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Uzaktan abonelik"
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "Bize o profili yollamadınız"
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5417,20 +5430,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Onay kodu yok."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5615,51 +5628,51 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "Bu sayfa kabul ettiğiniz ortam türünde kullanılabilir değil"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Desteklenmeyen görüntü dosyası biçemi."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
"Ah, durumunuz biraz uzun kaçtı. Azami 180 karaktere sığdırmaya ne dersiniz?"
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Kısmi yükleme."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Dosya yüklemede sistem hatası."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Bu bir resim dosyası değil ya da dosyada hata var"
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Desteklenmeyen görüntü dosyası biçemi."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "Böyle bir durum mesajı yok."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5864,7 +5877,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr ""
@@ -6020,26 +6033,26 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "İçerik yok!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Yarat"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
#, fuzzy
msgid "Reply"
msgstr "cevapla"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Durum mesajları"
@@ -6188,7 +6201,7 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Revoke the \"%s\" role from this user"
msgstr "Böyle bir kullanıcı yok."
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6321,92 +6334,96 @@ msgstr ""
msgid "Unsubscribe"
msgstr "Aboneliği sonlandır"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Avatar"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Profil ayarları"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr ""
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Kullanıcının profili yok."
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "birkaç saniye önce"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
@@ -6420,7 +6437,7 @@ msgstr "Başlangıç sayfası adresi geçerli bir URL değil."
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index 78aa5dc23..39b7d186b 100644
--- a/locale/uk/LC_MESSAGES/statusnet.po
+++ b/locale/uk/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:07+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:42+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: uk\n"
"X-Message-Group: out-statusnet\n"
@@ -97,7 +97,7 @@ msgstr "Ðемає такої Ñторінки"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,10 +106,8 @@ msgstr "Ðемає такої Ñторінки"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Такого кориÑтувача немає."
@@ -206,14 +204,14 @@ msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ %1$s та друзів на %2$s!"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API метод не знайдено."
@@ -226,8 +224,8 @@ msgstr "API метод не знайдено."
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Цей метод потребує POST."
@@ -257,7 +255,7 @@ msgid "Could not save profile."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ профіль."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -344,7 +342,7 @@ msgstr "Жодних ÑтатуÑів з таким ID."
msgid "This status is already a favorite."
msgstr "Цей ÑÑ‚Ð°Ñ‚ÑƒÑ Ð²Ð¶Ðµ Ñ” обраним."
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Ðе можна позначити Ñк обране."
@@ -463,7 +461,7 @@ msgstr "Групу не знайдено!"
msgid "You are already a member of that group."
msgstr "Ви вже Ñ” учаÑником цієї групи."
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr "Ðдмін цієї групи заблокував Вашу приÑутніÑÑ‚ÑŒ в ній."
@@ -513,7 +511,7 @@ msgstr "Ðевірний токен."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -584,9 +582,9 @@ msgstr "Ðкаунт"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Ð†Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
@@ -657,12 +655,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Формат не підтримуєтьÑÑ."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s / Обрані від %2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… від %2$s / %2$s."
@@ -672,7 +670,7 @@ msgstr "%1$s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¾Ð±Ñ€Ð°Ð½Ð¸Ñ… від %2$s / %2$s."
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Оновленні відповіді %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s оновив цю відповідь на Ð´Ð¾Ð¿Ð¸Ñ Ð²Ñ–Ð´ %2$s / %3$s."
@@ -682,7 +680,7 @@ msgstr "%1$s оновив цю відповідь на Ð´Ð¾Ð¿Ð¸Ñ Ð²Ñ–Ð´ %2$s /
msgid "%s public timeline"
msgstr "%s загальна Ñтрічка"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð²Ñ–Ð´ уÑÑ–Ñ…!"
@@ -697,12 +695,12 @@ msgstr "Повторено Ð´Ð»Ñ %s"
msgid "Repeats of %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "ДопиÑи позначені з %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "ÐžÐ½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ñ– з %1$s на %2$s!"
@@ -730,7 +728,7 @@ msgstr "Ðемає розміру."
msgid "Invalid size."
msgstr "ÐедійÑний розмір."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Ðватара"
@@ -762,7 +760,7 @@ msgid "Preview"
msgstr "ПереглÑд"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr "Видалити"
@@ -845,8 +843,8 @@ msgstr "Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ— про Ð±Ð»Ð¾ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð·
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "Такої групи немає."
@@ -947,7 +945,7 @@ msgstr "Ви не Ñ” влаÑником цього додатку."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr "Виникли певні проблеми з токеном поточної ÑеÑÑ–Ñ—."
@@ -1006,7 +1004,7 @@ msgstr "Ви впевненні, що бажаєте видалити цей дÐ
msgid "Do not delete this notice"
msgstr "Ðе видалÑти цей допиÑ"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr "Видалити допиÑ"
@@ -1259,7 +1257,7 @@ msgstr "Ð¾Ð¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий (%d знаків макÑимум)."
msgid "Could not update group."
msgstr "Ðе вдалоÑÑ Ð¾Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ групу."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
msgid "Could not create aliases."
msgstr "Ðеможна призначити додаткові імена."
@@ -1961,7 +1959,7 @@ msgstr "ЗапроÑити нових кориÑтувачів"
msgid "You are already subscribed to these users:"
msgstr "Ви вже підпиÑані до цих кориÑтувачів:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2093,7 +2091,7 @@ msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s"
msgid "You must be logged in to leave a group."
msgstr "Ви повинні Ñпочатку увійти на Ñайт, аби залишити групу."
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr "Ви не Ñ” учаÑником цієї групи."
@@ -2209,12 +2207,12 @@ msgstr "СкориÑтайтеÑÑŒ цією формою Ð´Ð»Ñ Ñтворенн
msgid "New message"
msgstr "Ðове повідомленнÑ"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "Ви не можете надіÑлати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð¼Ñƒ кориÑтувачеві."
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Ðемає зміÑту!"
@@ -2222,7 +2220,7 @@ msgstr "Ðемає зміÑту!"
msgid "No recipient specified."
msgstr "Жодного отримувача не визначено."
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2237,7 +2235,7 @@ msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлано"
msgid "Direct message to %s sent."
msgstr "ПрÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s надіÑлано."
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Помилка в Ajax"
@@ -2357,7 +2355,7 @@ msgstr "Розробники можуть змінити налаштуваннÑ
msgid "Notice has no profile"
msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð½Ðµ має профілю"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s має ÑÑ‚Ð°Ñ‚ÑƒÑ Ð½Ð° %2$s"
@@ -2370,8 +2368,8 @@ msgstr "тип зміÑту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Такий формат даних не підтримуєтьÑÑ."
@@ -2504,7 +2502,7 @@ msgstr "Старий пароль є неточним"
msgid "Error saving user; invalid."
msgstr "Помилка при збереженні кориÑтувача; недійÑний."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Ðеможна зберегти новий пароль."
@@ -2718,8 +2716,8 @@ msgstr ""
"1-64 літери нижнього регіÑтру Ñ– цифри, ніÑкої пунктуації або інтервалів"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Повне ім’Ñ"
@@ -2746,9 +2744,9 @@ msgid "Bio"
msgstr "Про Ñебе"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "РозташуваннÑ"
@@ -2762,7 +2760,7 @@ msgstr "Показувати мою поточну локацію при надÑ
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Теґи"
@@ -2846,7 +2844,7 @@ msgstr "Ðе вдаєтьÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ загальну Ñтрічку
#: actions/public.php:130
#, php-format
msgid "Public timeline, page %d"
-msgstr "Загальний Ñтрічка, Ñторінка %d"
+msgstr "Загальна Ñтрічка, Ñторінка %d"
#: actions/public.php:132 lib/publicgroupnav.php:79
msgid "Public timeline"
@@ -3005,7 +3003,7 @@ msgstr "Скинути пароль"
msgid "Recover password"
msgstr "Відновити пароль"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Запит на Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ відправлено"
@@ -3025,19 +3023,19 @@ msgstr "Скинути"
msgid "Enter a nickname or email address."
msgstr "Введіть Ñ–Ð¼â€™Ñ Ð°Ð±Ð¾ електронну адреÑу."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "КориÑтувача з такою електронною адреÑою або ім’Ñм немає."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Ð”Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача немає зареєÑтрованої електронної адреÑи."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Помилка при збереженні Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð°Ð´Ñ€ÐµÑи."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3045,23 +3043,23 @@ msgstr ""
"ІнÑтрукції з Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ було надіÑлано на електронну адреÑу, Ñку Ви "
"вказали у налаштуваннÑÑ… Вашого профілю."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "ÐеÑподіване ÑÐºÐ¸Ð´Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð¾Ð»ÑŽ."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Пароль має ÑкладатиÑÑŒ з 6-ти або більше знаків."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Пароль та Ð¿Ñ–Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ Ñпівпадають."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Помилка в налаштуваннÑÑ… кориÑтувача."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Ðовий пароль уÑпішно збережено. Тепер Ви увійшли."
@@ -3226,7 +3224,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL-адреÑа Вашого профілю на іншому ÑуміÑному ÑервіÑÑ–"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "ПідпиÑатиÑÑŒ"
@@ -3263,7 +3261,7 @@ msgstr "Ви не можете повторювати Ñвої влаÑні до
msgid "You already repeated that notice."
msgstr "Ви вже повторили цей допиÑ."
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
msgid "Repeated"
msgstr "Повторено"
@@ -3406,7 +3404,7 @@ msgstr "ОрганізаціÑ"
msgid "Description"
msgstr "ОпиÑ"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "СтатиÑтика"
@@ -3527,67 +3525,67 @@ msgstr "Група %s"
msgid "%1$s group, page %2$d"
msgstr "Група %1$s, Ñторінка %2$d"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
msgid "Group profile"
msgstr "Профіль групи"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr "ЗауваженнÑ"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr "Додаткові імена"
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "ДіÑльніÑÑ‚ÑŒ групи"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Стрічка допиÑів групи %s (RSS 1.0)"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Стрічка допиÑів групи %s (RSS 2.0)"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Стрічка допиÑів групи %s (Atom)"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸ %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "УчаÑники"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(ПуÑто)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "Ð’ÑÑ– учаÑники"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
msgid "Created"
msgstr "Створено"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3602,7 +3600,7 @@ msgstr ""
"короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. [ПриєднуйтеÑÑŒ](%%action.register%"
"%) зараз Ñ– долучітьÑÑ Ð´Ð¾ ÑпілкуваннÑ! ([ДізнатиÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ](%%doc.help%%))"
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3615,7 +3613,7 @@ msgstr ""
"забезпеченні [StatusNet](http://status.net/). Члени цієї групи роблÑÑ‚ÑŒ "
"короткі допиÑи про Ñвоє Ð¶Ð¸Ñ‚Ñ‚Ñ Ñ‚Ð° інтереÑи. "
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr "Ðдміни"
@@ -4167,12 +4165,12 @@ msgstr "Ðемає ID аргументу."
msgid "Tag %s"
msgstr "Позначити %s"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
msgid "User profile"
msgstr "Профіль кориÑтувача."
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "Фото"
@@ -4513,7 +4511,7 @@ msgstr "ВерÑÑ–Ñ"
msgid "Author(s)"
msgstr "Ðвтор(и)"
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
@@ -4522,12 +4520,12 @@ msgstr ""
"ÐÑ–, файл не може бути більшим за %d байтів, а те, що Ви хочете надіÑлати, "
"важить %d байтів. Спробуйте меншу верÑÑ–ÑŽ."
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr "Розміри цього файлу перевищують Вашу квоту на %d байтів."
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr "Розміри цього файлу перевищують Вашу міÑÑчну квоту на %d байтів."
@@ -4565,27 +4563,27 @@ msgstr "Ðе можна долучити повідомленнÑ."
msgid "Could not update message with new URI."
msgstr "Ðе можна оновити Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· новим URI."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Помилка бази даних при додаванні теґу: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
msgid "Problem saving notice. Too long."
msgstr "Проблема при збереженні допиÑу. Ðадто довге."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при збереженні допиÑу. Ðевідомий кориÑтувач."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Дуже багато допиÑів за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4593,19 +4591,19 @@ msgstr ""
"Дуже багато повідомлень за короткий термін; ходіть подихайте повітрÑм Ñ– "
"повертайтеÑÑŒ за кілька хвилин."
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "Вам заборонено надÑилати допиÑи до цього Ñайту."
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Проблема при збереженні допиÑу."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
msgid "Problem saving group inbox."
msgstr "Проблема при збереженні вхідних допиÑів Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¸."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4634,28 +4632,28 @@ msgstr "Ðе можу видалити ÑамопідпиÑку."
msgid "Couldn't delete subscription OMB token."
msgstr "Ðе вдаєтьÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ токен підпиÑки OMB."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ підпиÑку."
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "Вітаємо на %1$s, @%2$s!"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "Ðе вдалоÑÑ Ñтворити нову групу."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
msgid "Could not set group URI."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити URI групи."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
msgid "Could not set group membership."
msgstr "Ðе вдалоÑÑ Ð²Ñтановити членÑтво."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
msgid "Could not save local group info."
msgstr "Ðе вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ інформацію про локальну групу."
@@ -4859,7 +4857,7 @@ msgstr "Бедж"
msgid "StatusNet software license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ StatusNet"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4868,12 +4866,12 @@ msgstr ""
"**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð² наданий вам [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — це ÑÐµÑ€Ð²Ñ–Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð². "
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4884,42 +4882,42 @@ msgstr ""
"Ð´Ð»Ñ Ð¼Ñ–ÐºÑ€Ð¾Ð±Ð»Ð¾Ò‘Ñ–Ð², верÑÑ–Ñ %s, доÑтупному під [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
msgid "Site content license"
msgstr "Ð›Ñ–Ñ†ÐµÐ½Ð·Ñ–Ñ Ð·Ð¼Ñ–Ñту Ñайту"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "ЗміÑÑ‚ Ñ– дані %1$s Ñ” приватними Ñ– конфіденційними."
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать %1$s. Ð’ÑÑ– права захищено."
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"ÐвторÑькі права на зміÑÑ‚ Ñ– дані належать розробникам. Ð’ÑÑ– права захищено."
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "Ð’ÑÑ– "
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "ліцензіÑ."
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "ÐÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ Ñторінок"
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr "Вперед"
-#: lib/action.php:1169
+#: lib/action.php:1172
msgid "Before"
msgstr "Ðазад"
@@ -4935,6 +4933,10 @@ msgstr "Поки що не можу обробити вбудований XML к
msgid "Can't handle embedded Base64 content yet."
msgstr "Поки що не можу обробити вбудований контент Base64."
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -5023,7 +5025,7 @@ msgstr ""
"API-реÑÑƒÑ€Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” дозвіл типу «читаннÑ-запиÑ», але у Ð²Ð°Ñ Ñ” лише доÑтуп Ð´Ð»Ñ "
"читаннÑ."
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5099,11 +5101,11 @@ msgstr "Відкликати"
msgid "Attachments"
msgstr "ВкладеннÑ"
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr "Ðвтор"
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr "Провайдер"
@@ -5123,37 +5125,50 @@ msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ пароль"
msgid "Password changing is not allowed"
msgstr "Змінювати пароль не дозволено"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "Результати команди"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "Команду виконано"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "Команду не виконано"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "Даруйте, але Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
+msgstr "Такого допиÑу не Ñ–Ñнує"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "КориÑтувач не має оÑтаннього допиÑу"
-#: lib/command.php:88
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ кориÑтувача з іменем %s"
-#: lib/command.php:92
+#: lib/command.php:143
+#, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ локального кориÑтувача з іменем %s"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "Даруйте, але Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено."
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr "Гадаємо, кориÑÑ‚Ñ– від «розштовхуваннÑ» Ñамого Ñебе небагато, чи не так?!"
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr "Спробу «розштовхати» %s зараховано"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5164,199 +5179,199 @@ msgstr ""
"ПідпиÑчики: %2$s\n"
"ДопиÑи: %3$s"
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr "Такого допиÑу не Ñ–Ñнує"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "КориÑтувач не має оÑтаннього допиÑу"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¾ Ñк обраний."
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "Ви вже Ñ” учаÑником цієї групи."
-#: lib/command.php:231
+#: lib/command.php:331
#, php-format
msgid "Could not join user %s to group %s"
msgstr "Ðе вдалоÑÑŒ долучити кориÑтувача %1$s до групи %2$s."
-#: lib/command.php:236
+#: lib/command.php:336
#, php-format
msgid "%s joined group %s"
msgstr "%1$s приєднавÑÑ Ð´Ð¾ групи %2$s"
-#: lib/command.php:275
+#: lib/command.php:373
#, php-format
msgid "Could not remove user %s to group %s"
msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ кориÑтувача %1$s з групи %2$s."
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%1$s залишив групу %2$s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "Повне ім’Ñ: %s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "ЛокаціÑ: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Веб-Ñторінка: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "Про мене: %s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+"%s — це віддалений профіль; Ви можете надÑилати приватні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð»Ð¸ÑˆÐµ "
+"кориÑтувачам одного з вами ÑервіÑу."
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ‚Ð¾ довге — макÑимум %d знаків, а ви надÑилаєте %d"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "ПрÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s надіÑлано."
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "Помилка при відправці прÑмого повідомленнÑ."
-#: lib/command.php:413
+#: lib/command.php:490
msgid "Cannot repeat your own notice"
msgstr "Ðе можу повторити Ваш влаÑний допиÑ"
-#: lib/command.php:418
+#: lib/command.php:495
msgid "Already repeated that notice"
msgstr "Цей Ð´Ð¾Ð¿Ð¸Ñ Ð²Ð¶Ðµ повторили"
-#: lib/command.php:426
+#: lib/command.php:503
#, php-format
msgid "Notice from %s repeated"
msgstr "Ð”Ð¾Ð¿Ð¸Ñ %s повторили"
-#: lib/command.php:428
+#: lib/command.php:505
msgid "Error repeating notice."
msgstr "Помилка при повторенні допиÑу."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð½Ð°Ð´Ñ‚Ð¾ довгий — макÑимум %d знаків, а ви надÑилаєте %d"
-#: lib/command.php:491
+#: lib/command.php:545
#, php-format
msgid "Reply to %s sent"
msgstr "Відповідь до %s надіÑлано"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "Проблема при збереженні допиÑу."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, до Ñкого бажаєте підпиÑатиÑÑŒ"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "Такого кориÑтувача немає."
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Ðе можу підпиÑатиÑÑŒ до профілю OMB за командою."
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "ПідпиÑано до %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "Зазначте Ñ–Ð¼â€™Ñ ÐºÐ¾Ñ€Ð¸Ñтувача, від Ñкого бажаєте відпиÑатиÑÑŒ"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "ВідпиÑано від %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "Ð’Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ ще не завершено."
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼ÐºÐ½ÑƒÑ‚Ð¾."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "Ðе можна вимкнути ÑповіщеннÑ."
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "Ð¡Ð¿Ð¾Ð²Ñ–Ñ‰ÐµÐ½Ð½Ñ ÑƒÐ²Ñ–Ð¼ÐºÐ½ÑƒÑ‚Ð¾."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "Ðе можна увімкнути ÑповіщеннÑ."
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr "Команду входу відключено"
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
"Це поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтати лише раз, воно дійÑне протÑгом 2 хвилин: %s"
-#: lib/command.php:692
+#: lib/command.php:735
#, php-format
msgid "Unsubscribed %s"
msgstr "ВідпиÑано %s"
-#: lib/command.php:709
+#: lib/command.php:752
msgid "You are not subscribed to anyone."
msgstr "Ви не маєте жодних підпиÑок."
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "Ви підпиÑані до цієї оÑоби:"
msgstr[1] "Ви підпиÑані до цих людей:"
msgstr[2] "Ви підпиÑані до цих людей:"
-#: lib/command.php:731
+#: lib/command.php:774
msgid "No one is subscribed to you."
msgstr "До Ð’Ð°Ñ Ð½Ñ–Ñ…Ñ‚Ð¾ не підпиÑаний."
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "Ð¦Ñ Ð¾Ñоба Ñ” підпиÑаною до ВаÑ:"
msgstr[1] "Ці люди підпиÑані до ВаÑ:"
msgstr[2] "Ці люди підпиÑані до ВаÑ:"
-#: lib/command.php:753
+#: lib/command.php:796
msgid "You are not a member of any groups."
msgstr "Ви не Ñ” учаÑником жодної групи."
-#: lib/command.php:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5433,19 +5448,19 @@ msgstr ""
"tracks — наразі не виконуєтьÑÑ\n"
"tracking — наразі не виконуєтьÑÑ\n"
-#: lib/common.php:148
+#: lib/common.php:136
msgid "No configuration file found. "
msgstr "Файлу конфігурації не знайдено. "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr "Шукав файли конфігурації в цих міÑцÑÑ…: "
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr "ЗапуÑÑ‚Ñ–Ñ‚ÑŒ файл інÑталÑції, аби полагодити це."
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr "Іти до файлу інÑталÑції."
@@ -5622,49 +5637,49 @@ msgstr "Теґи у допиÑах групи %s"
msgid "This page is not available in a media type you accept"
msgstr "Ð¦Ñ Ñторінка не доÑтупна Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾ типу медіа, з Ñким ви погодилиÑÑŒ"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Формат Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ."
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "Цей файл завеликий. МакÑимальний розмір %s."
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "ЧаÑткове завантаженнÑ."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "СиÑтема відповіла помилкою при завантаженні цього файла."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "Це не зображеннÑ, або файл зіпÑовано."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Формат Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ðµ підтримуєтьÑÑ."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
msgid "Lost our file."
msgstr "Файл втрачено."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "Тип файлу не підтримуєтьÑÑ"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr "Мб"
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr "кб"
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr "[%s]"
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr "Ðевідоме джерело вхідного Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ %d."
@@ -5945,7 +5960,7 @@ msgstr ""
"Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð°Ð±Ð¸ долучити кориÑтувачів до розмови. Такі Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±Ð°Ñ‡Ð¸Ñ‚Ðµ "
"лише Ви."
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr "від"
@@ -6100,23 +6115,23 @@ msgstr "Зах."
msgid "at"
msgstr "в"
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
msgid "in context"
msgstr "в контекÑÑ‚Ñ–"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
msgid "Repeated by"
msgstr "Повторено"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr "ВідповіÑти на цей допиÑ"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "ВідповіÑти"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
msgid "Notice repeated"
msgstr "Ð”Ð¾Ð¿Ð¸Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð¸Ð»Ð¸"
@@ -6258,7 +6273,7 @@ msgstr "Повторити цей допиÑ"
msgid "Revoke the \"%s\" role from this user"
msgstr "Відкликати роль \"%s\" Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ кориÑтувача"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr "КориÑтувача Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾ÐºÐ¾Ñ€Ð¸Ñтувацького режиму не визначено."
@@ -6384,89 +6399,93 @@ msgstr "ВідпиÑатиÑÑŒ від цього кориÑтувача"
msgid "Unsubscribe"
msgstr "ВідпиÑатиÑÑŒ"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
msgid "Edit Avatar"
msgstr "Ðватара"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr "ДіÑльніÑÑ‚ÑŒ кориÑтувача"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
msgid "Edit profile settings"
msgstr "ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ñ„Ñ–Ð»ÑŽ"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr "Правка"
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr "ÐадіÑлати прÑме Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð¼Ñƒ кориÑтувачеві"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr "ПовідомленнÑ"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr "Модерувати"
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
msgid "User role"
msgstr "Роль кориÑтувача"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr "ÐдмініÑтратор"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr "Модератор"
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "мить тому"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "міÑÑць тому"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "близько %d міÑÑців тому"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "рік тому"
@@ -6480,7 +6499,7 @@ msgstr "%s Ñ” неприпуÑтимим кольором!"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr "%s неприпуÑтимий колір! ВикориÑтайте 3 або 6 знаків (HEX-формат)"
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index 59751aa5d..0f560f41d 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: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:10+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:45+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
@@ -100,7 +100,7 @@ msgstr "Không có tin nhắn nào."
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -109,10 +109,8 @@ msgstr "Không có tin nhắn nào."
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "Không có user nào."
@@ -204,14 +202,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Phương thức API không tìm thấy!"
@@ -225,8 +223,8 @@ msgstr "Phương thức API không tìm thấy!"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "Phương thức này yêu cầu là POST."
@@ -257,7 +255,7 @@ msgid "Could not save profile."
msgstr "Không thể lưu hồ sơ cá nhân."
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -347,7 +345,7 @@ msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
msgid "This status is already a favorite."
msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "Không thể tạo favorite."
@@ -473,7 +471,7 @@ msgstr "Phương thức API không tìm thấy!"
msgid "You are already a member of that group."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -525,7 +523,7 @@ msgstr "Kích thước không hợp lệ."
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -593,9 +591,9 @@ msgstr "Giới thiệu"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "Biệt danh"
@@ -668,12 +666,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "Không hỗ trợ kiểu file ảnh này."
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Tất cả các cập nhật của %s"
@@ -683,7 +681,7 @@ msgstr "Tất cả các cập nhật của %s"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / Các cập nhật Ä‘ang trả lá»i tá»›i %2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -693,7 +691,7 @@ msgstr ""
msgid "%s public timeline"
msgstr "Dòng tin công cộng"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s cập nhật từ tất cả má»i ngÆ°á»i!"
@@ -708,12 +706,12 @@ msgstr "Trả lá»i cho %s"
msgid "Repeats of %s"
msgstr "Trả lá»i cho %s"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Thông báo được gắn thẻ %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Dòng tin nhắn cho %s"
@@ -743,7 +741,7 @@ msgstr "Không có kích thước."
msgid "Invalid size."
msgstr "Kích thước không hợp lệ."
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "Hình đại diện"
@@ -778,7 +776,7 @@ msgid "Preview"
msgstr "Xem trÆ°á»›c"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
#, fuzzy
msgid "Delete"
msgstr "Xóa tin nhắn"
@@ -865,8 +863,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "Không có tin nhắn nào."
@@ -974,7 +972,7 @@ msgstr "Bạn chưa cập nhật thông tin riêng"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
@@ -1036,7 +1034,7 @@ msgstr "Bạn có chắc chắn là muốn xóa tin nhắn này không?"
msgid "Do not delete this notice"
msgstr "Không thể xóa tin nhắn này."
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
#, fuzzy
msgid "Delete this notice"
msgstr "Xóa tin nhắn"
@@ -1320,7 +1318,7 @@ msgstr "Lý lịch quá dài (không quá 140 ký tự)"
msgid "Could not update group."
msgstr "Không thể cập nhật thành viên."
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "Không thể tạo favorite."
@@ -2055,7 +2053,7 @@ msgstr "Gá»­i thÆ° má»i đến những ngÆ°á»i chÆ°a có tài khoản"
msgid "You are already subscribed to these users:"
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, fuzzy, php-format
msgid "%1$s (%2$s)"
msgstr "%s (%s)"
@@ -2192,7 +2190,7 @@ msgstr "%s và nhóm"
msgid "You must be logged in to leave a group."
msgstr "Bạn phải đăng nhập vào má»›i có thể gá»­i thÆ° má»i những "
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "Bạn chưa cập nhật thông tin riêng"
@@ -2313,13 +2311,13 @@ msgstr ""
msgid "New message"
msgstr "Tin mới nhất"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
#, fuzzy
msgid "You can't send a message to this user."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "Không có nội dung!"
@@ -2327,7 +2325,7 @@ msgstr "Không có nội dung!"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2342,7 +2340,7 @@ msgstr "Tin mới nhất"
msgid "Direct message to %s sent."
msgstr "Tin nhắn riêng"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
#, fuzzy
msgid "Ajax Error"
msgstr "Lá»—i"
@@ -2461,7 +2459,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "Tin nhắn không có hồ sơ cá nhân"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "Trạng thái của %1$s vào %2$s"
@@ -2475,8 +2473,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "Không hỗ trợ định dạng dữ liệu này."
@@ -2620,7 +2618,7 @@ msgstr "Mật khẩu cũ sai"
msgid "Error saving user; invalid."
msgstr "Lỗi xảy ra khi lưu thành viên; không hợp lệ."
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "Không thể lưu mật khẩu mới"
@@ -2850,8 +2848,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64 chữ cái thÆ°á»ng hoặc là chữ số, không có dấu chấm hay "
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "Tên đầy đủ"
@@ -2879,9 +2877,9 @@ msgid "Bio"
msgstr "Lý lịch"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "Thành phố"
@@ -2895,7 +2893,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "Từ khóa"
@@ -3128,7 +3126,7 @@ msgstr "Khởi tạo lại mật khẩu"
msgid "Recover password"
msgstr "Khôi phục mật khẩu"
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "Yêu cầu khôi phục lại mật khẩu đã được gửi"
@@ -3148,20 +3146,20 @@ msgstr "Khởi tạo"
msgid "Enter a nickname or email address."
msgstr "Nhập biệt hiệu hoặc email."
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
"Không tìm thấy ngÆ°á»i dùng nào tÆ°Æ¡ng ứng vá»›i địa chỉ email hoặc username đó."
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "Thành viên này đã không đăng ký địa chỉ email."
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "Lỗi xảy ra khi lưu địa chỉ đã được xác nhận."
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
@@ -3169,23 +3167,23 @@ msgstr ""
"Hướng dẫn cách khôi phục mật khẩu đã được gửi đến địa chỉ email đăng ký "
"trong tài khoản của bạn."
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "Bất ngỠreset mật khẩu."
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "Mật khẩu phải nhiá»u hÆ¡n 6 ký tá»±."
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "Mật khẩu và mật khẩu xác nhận không khớp nhau."
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "Lỗi xảy ra khi tạo thành viên."
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "Mật khẩu má»›i đã được lÆ°u. Bạn có thể đăng nhập ngay bây giá»."
@@ -3348,7 +3346,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL trong hồ sơ cá nhân của bạn ở trên các trang microblogging khác"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "Theo bạn này"
@@ -3389,7 +3387,7 @@ msgstr "Bạn không thể đăng ký nếu không đồng ý các Ä‘iá»u khoáº
msgid "You already repeated that notice."
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "Tạo"
@@ -3538,7 +3536,7 @@ msgstr "ThÆ° má»i đã gá»­i"
msgid "Description"
msgstr "Mô tả"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Số liệu thống kê"
@@ -3650,72 +3648,72 @@ msgstr "%s và nhóm"
msgid "%1$s group, page %2$d"
msgstr "Thành viên"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "Thông tin nhóm"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
#, fuzzy
msgid "Note"
msgstr "Tin nhắn"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
#, fuzzy
msgid "Group actions"
msgstr "Mã nhóm"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "Hộp thư đi của %s"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
msgid "Members"
msgstr "Thành viên"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
#, fuzzy
msgid "All members"
msgstr "Thành viên"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "Tạo"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3725,7 +3723,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3734,7 +3732,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4292,13 +4290,13 @@ msgstr "Không có tài liệu nào."
msgid "Tag %s"
msgstr "Từ khóa"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "Hồ sơ"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4638,19 +4636,19 @@ msgstr "Cá nhân"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4695,46 +4693,46 @@ msgstr "Không thể chèn thêm vào đăng nhận."
msgid "Could not update message with new URI."
msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, fuzzy, php-format
msgid "DB error inserting hashtag: %s"
msgstr "Lá»—i cÆ¡ sở dữ liệu khi chèn trả lá»i: %s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
@@ -4767,31 +4765,31 @@ msgstr "Không thể xóa đăng nhận."
msgid "Couldn't delete subscription OMB token."
msgstr "Không thể xóa đăng nhận."
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "Không thể xóa đăng nhận."
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "%s chào mừng bạn "
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "Không thể tạo favorite."
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "Không thể tạo đăng nhận."
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "Không thể tạo đăng nhận."
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "Không thể tạo đăng nhận."
@@ -5017,7 +5015,7 @@ msgstr "Tin đã gửi"
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -5026,12 +5024,12 @@ msgstr ""
"**%%site.name%%** là dịch vụ gửi tin nhắn được cung cấp từ [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** là dịch vụ gửi tin nhắn. "
-#: lib/action.php:806
+#: lib/action.php:809
#, fuzzy, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -5042,43 +5040,43 @@ msgstr ""
"quyá»n [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "Tìm theo nội dung của tin nhắn"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "Sau"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "TrÆ°á»›c"
@@ -5095,6 +5093,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5194,7 +5196,7 @@ msgstr "Xác nhận SMS"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5273,11 +5275,11 @@ msgstr "Xóa"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "Hồ sơ "
@@ -5300,39 +5302,54 @@ msgstr "Äã lÆ°u mật khẩu."
msgid "Password changing is not allowed"
msgstr "Äã lÆ°u mật khẩu."
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
#, fuzzy
msgid "Command results"
msgstr "Không có kết quả nào"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
#, fuzzy
msgid "Command failed"
msgstr " và bạn bè"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr ""
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "NgÆ°á»i dùng không có thông tin."
+
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "Không thể cập nhật thông tin user với địa chỉ email đã được xác nhận."
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "Tin đã gửi"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5340,207 +5357,203 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "Không tìm thấy trạng thái nào tương ứng với ID đó."
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "NgÆ°á»i dùng không có thông tin."
-
-#: lib/command.php:190
+#: lib/command.php:296
#, fuzzy
msgid "Notice marked as fave."
msgstr "Tin nhắn này đã có trong danh sách tin nhắn ưa thích của bạn rồi!"
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%s và nhóm"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "Không thể theo bạn này: %s đã có trong danh sách bạn bè của bạn rồi."
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "%s và nhóm"
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "Tên đầy đủ"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, fuzzy, php-format
msgid "Location: %s"
msgstr "Thành phố: %s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, fuzzy, php-format
msgid "Homepage: %s"
msgstr "Trang chủ hoặc Blog: %s"
-#: lib/command.php:318
+#: lib/command.php:410
#, fuzzy, php-format
msgid "About: %s"
msgstr "Giới thiệu"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, fuzzy, php-format
msgid "Direct message to %s sent"
msgstr "Tin nhắn riêng"
-#: lib/command.php:369
+#: lib/command.php:470
#, fuzzy
msgid "Error sending direct message."
msgstr "Thư bạn đã gửi"
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "Bạn không thể đăng ký nếu không đồng ý các Ä‘iá»u khoản."
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "Xóa tin nhắn"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "Tin đã gửi"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "Trả lá»i tin nhắn này"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
+#: lib/command.php:602
#, fuzzy
-msgid "No such user"
-msgstr "Không có user nào."
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "Bạn chưa cập nhật thông tin riêng"
-#: lib/command.php:561
+#: lib/command.php:608
#, fuzzy, php-format
msgid "Subscribed to %s"
msgstr "Theo nhóm này"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, fuzzy, php-format
msgid "Unsubscribed from %s"
msgstr "Hết theo"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
#, fuzzy
msgid "Notification off."
msgstr "Không có mã số xác nhận."
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
#, fuzzy
msgid "Notification on."
msgstr "Không có mã số xác nhận."
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "Hết theo"
-#: lib/command.php:709
+#: lib/command.php:752
#, 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:711
+#: lib/command.php:754
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:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "Không thể tạo favorite."
-#: lib/command.php:733
+#: lib/command.php:776
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:753
+#: lib/command.php:796
#, 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:755
+#: lib/command.php:798
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:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5582,20 +5595,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "Không có mã số xác nhận."
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5785,53 +5798,53 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr "Trang này không phải là phÆ°Æ¡ng tiện truyá»n thông mà bạn chấp nhận."
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "Không hỗ trợ kiểu file ảnh này."
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
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/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "Upload từng phần."
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "Hệ thống xảy ra lỗi trong khi tải file."
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "File há»ng hoặc không phải là file ảnh."
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "Không hỗ trợ kiểu file ảnh này."
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "Không có tin nhắn nào."
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
#, fuzzy
msgid "Unknown file type"
msgstr "Không hỗ trợ kiểu file ảnh này."
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -6086,7 +6099,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " từ "
@@ -6246,26 +6259,26 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "Không có nội dung!"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "Tạo"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
#, fuzzy
msgid "Reply to this notice"
msgstr "Trả lá»i tin nhắn này"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr "Trả lá»i"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "Tin đã gửi"
@@ -6421,7 +6434,7 @@ msgstr "Trả lá»i tin nhắn này"
msgid "Revoke the \"%s\" role from this user"
msgstr "Ban user"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6560,95 +6573,99 @@ msgstr "Ngừng đăng ký từ ngÆ°á»i dùng này"
msgid "Unsubscribe"
msgstr "Hết theo"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "Hình đại diện"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
#, fuzzy
msgid "User actions"
msgstr "Không tìm thấy action"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "Các thiết lập cho Hồ sơ cá nhân"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
#, fuzzy
msgid "Send a direct message to this user"
msgstr "Bạn đã theo những ngÆ°á»i này:"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
#, fuzzy
msgid "Message"
msgstr "Tin mới nhất"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "Hồ sơ"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "vài giây trước"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "1 giá» trÆ°á»›c"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "%d giá» trÆ°á»›c"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "1 năm trước"
@@ -6662,7 +6679,7 @@ msgstr "Trang chủ không phải là URL"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index cc1761616..a5cef8add 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -10,12 +10,12 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:13+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:49+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
@@ -102,7 +102,7 @@ msgstr "没有该页é¢"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -111,10 +111,8 @@ msgstr "没有该页é¢"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "没有这个用户。"
@@ -206,14 +204,14 @@ msgstr "æ¥è‡ª%2$s 上 %1$s 和好å‹çš„æ›´æ–°ï¼"
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 方法未实现ï¼"
@@ -227,8 +225,8 @@ msgstr "API 方法未实现ï¼"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr "此方法接å—POST请求。"
@@ -259,7 +257,7 @@ msgid "Could not save profile."
msgstr "无法ä¿å­˜ä¸ªäººä¿¡æ¯ã€‚"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -347,7 +345,7 @@ msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚"
msgid "This status is already a favorite."
msgstr "已收è—此通告ï¼"
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr "无法创建收è—。"
@@ -471,7 +469,7 @@ msgstr "API 方法未实现ï¼"
msgid "You are already a member of that group."
msgstr "您已ç»æ˜¯è¯¥ç»„æˆå‘˜"
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -523,7 +521,7 @@ msgstr "大å°ä¸æ­£ç¡®ã€‚"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -590,9 +588,9 @@ msgstr "å¸å·"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "昵称"
@@ -666,12 +664,12 @@ msgstr ""
msgid "Unsupported format."
msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚"
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%s çš„æ”¶è— / %s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 收è—了 %s çš„ %s 通告。"
@@ -681,7 +679,7 @@ msgstr "%s 收è—了 %s çš„ %s 通告。"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s / å›žå¤ %2$s 的消æ¯"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "å›žå¤ %2$s / %3$s çš„ %1$s 更新。"
@@ -691,7 +689,7 @@ msgstr "å›žå¤ %2$s / %3$s çš„ %1$s 更新。"
msgid "%s public timeline"
msgstr "%s 公众时间表"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "æ¥è‡ªæ‰€æœ‰äººçš„ %s 消æ¯ï¼"
@@ -706,12 +704,12 @@ msgstr "%s 的回å¤"
msgid "Repeats of %s"
msgstr "%s 的回å¤"
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "带 %s 标签的通告"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s 上 %1$s çš„æ›´æ–°ï¼"
@@ -741,7 +739,7 @@ msgstr "没有大å°ã€‚"
msgid "Invalid size."
msgstr "大å°ä¸æ­£ç¡®ã€‚"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "头åƒ"
@@ -773,7 +771,7 @@ msgid "Preview"
msgstr "预览"
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
#, fuzzy
msgid "Delete"
msgstr "删除"
@@ -859,8 +857,8 @@ msgstr "ä¿å­˜é˜»æ­¢ä¿¡æ¯å¤±è´¥ã€‚"
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
msgid "No such group."
msgstr "没有这个组。"
@@ -970,7 +968,7 @@ msgstr "您未告知此个人信æ¯"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
#, fuzzy
msgid "There was a problem with your session token."
msgstr "会è¯æ ‡è¯†æœ‰é—®é¢˜ï¼Œè¯·é‡è¯•ã€‚"
@@ -1032,7 +1030,7 @@ msgstr "确定è¦åˆ é™¤è¿™æ¡æ¶ˆæ¯å—?"
msgid "Do not delete this notice"
msgstr "无法删除通告。"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
#, fuzzy
msgid "Delete this notice"
msgstr "删除通告"
@@ -1308,7 +1306,7 @@ msgstr "æ述过长(ä¸èƒ½è¶…过140字符)。"
msgid "Could not update group."
msgstr "无法更新组"
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "无法创建收è—。"
@@ -2026,7 +2024,7 @@ msgstr "邀请新用户"
msgid "You are already subscribed to these users:"
msgstr "您已订阅这些用户:"
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr "%1$s (%2$s)"
@@ -2150,7 +2148,7 @@ msgstr "%s 加入 %s 组"
msgid "You must be logged in to leave a group."
msgstr "您必须登录æ‰èƒ½é‚€è¯·å…¶ä»–人使用 %s"
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
#, fuzzy
msgid "You are not a member of that group."
msgstr "您未告知此个人信æ¯"
@@ -2267,12 +2265,12 @@ msgstr "使用此表格创建组。"
msgid "New message"
msgstr "新消æ¯"
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "没有内容ï¼"
@@ -2280,7 +2278,7 @@ msgstr "没有内容ï¼"
msgid "No recipient specified."
msgstr "没有收件人。"
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr "ä¸è¦å‘自己å‘é€æ¶ˆæ¯ï¼›è·Ÿè‡ªå·±æ‚„悄说就得了。"
@@ -2295,7 +2293,7 @@ msgstr "新消æ¯"
msgid "Direct message to %s sent."
msgstr "å·²å‘ %s å‘é€æ¶ˆæ¯"
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr "Ajax错误"
@@ -2411,7 +2409,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr "通告没有关è”个人信æ¯"
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s çš„ %2$s 状æ€"
@@ -2425,8 +2423,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr "ä¸æ”¯æŒçš„æ•°æ®æ ¼å¼ã€‚"
@@ -2567,7 +2565,7 @@ msgstr "旧密ç ä¸æ­£ç¡®"
msgid "Error saving user; invalid."
msgstr "ä¿å­˜ç”¨æˆ·æ—¶å‡ºé”™ï¼›ä¸æ­£ç¡®ã€‚"
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "无法ä¿å­˜æ–°å¯†ç ã€‚"
@@ -2791,8 +2789,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1 到 64 个å°å†™å­—æ¯æˆ–数字,ä¸åŒ…å«æ ‡ç‚¹åŠç©ºç™½"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "å…¨å"
@@ -2820,9 +2818,9 @@ msgid "Bio"
msgstr "自述"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "ä½ç½®"
@@ -2836,7 +2834,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr "标签"
@@ -3069,7 +3067,7 @@ msgstr "é‡ç½®å¯†ç "
msgid "Recover password"
msgstr "æ¢å¤å¯†ç "
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr "请求æ¢å¤å¯†ç "
@@ -3089,41 +3087,41 @@ msgstr "é‡ç½®"
msgid "Enter a nickname or email address."
msgstr "输入昵称或电å­é‚®ä»¶ã€‚"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr "没有拥有这个用户å或电å­é‚®ä»¶çš„用户。"
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "用户没有注册电å­é‚®ä»¶ã€‚"
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "ä¿å­˜åœ°å€ç¡®è®¤æ—¶å‡ºé”™ã€‚"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr "æ¢å¤å¯†ç çš„指示已被å‘é€åˆ°æ‚¨çš„注册邮箱。"
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr "未预料的密ç é‡ç½®ã€‚"
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr "密ç å¿…须是 6 个字符或更多。"
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr "密ç å’Œç¡®è®¤ä¸åŒ¹é…。"
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "ä¿å­˜ç”¨æˆ·è®¾ç½®æ—¶å‡ºé”™ã€‚"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "新密ç å·²ä¿å­˜ï¼Œæ‚¨çŽ°åœ¨å·²ç™»å½•ã€‚"
@@ -3280,7 +3278,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "您在其他兼容的微åšå®¢æœåŠ¡çš„个人信æ¯URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr "订阅"
@@ -3323,7 +3321,7 @@ msgstr "您必须åŒæ„此授æƒæ–¹å¯æ³¨å†Œã€‚"
msgid "You already repeated that notice."
msgstr "您已æˆåŠŸé˜»æ­¢è¯¥ç”¨æˆ·ï¼š"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "创建"
@@ -3473,7 +3471,7 @@ msgstr "分页"
msgid "Description"
msgstr "æè¿°"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr "统计"
@@ -3585,71 +3583,71 @@ msgstr "%s 组"
msgid "%1$s group, page %2$d"
msgstr "%s 组æˆå‘˜, 第 %d 页"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "组资料"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr "URL 互è”网地å€"
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
#, fuzzy
msgid "Note"
msgstr "通告"
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr "组动作"
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s 的通告èšåˆ"
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, php-format
msgid "FOAF for %s group"
msgstr "%s çš„å‘件箱"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "注册于"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(没有)"
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr "所有æˆå‘˜"
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "创建"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3659,7 +3657,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3670,7 +3668,7 @@ msgstr ""
"**%s** 是一个 %%%%site.name%%%% 的用户组,一个微åšå®¢æœåŠ¡ [micro-blogging]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
#, fuzzy
msgid "Admins"
msgstr "admin管ç†å‘˜"
@@ -4221,13 +4219,13 @@ msgstr "没有这份文档。"
msgid "Tag %s"
msgstr "标签"
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "用户没有个人信æ¯ã€‚"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr "相片"
@@ -4566,19 +4564,19 @@ msgstr "个人"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4621,47 +4619,47 @@ msgstr "无法添加信æ¯ã€‚"
msgid "Could not update message with new URI."
msgstr "无法添加新URIçš„ä¿¡æ¯ã€‚"
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr "添加标签时数æ®åº“出错:%s"
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚"
-#: classes/Notice.php:256
+#: classes/Notice.php:259
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr "你在短时间里å‘布了过多的消æ¯ï¼Œè¯·æ·±å‘¼å¸ï¼Œè¿‡å‡ åˆ†é’Ÿå†å‘消æ¯ã€‚"
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr "在这个网站你被ç¦æ­¢å‘布消æ¯ã€‚"
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4695,30 +4693,30 @@ msgstr "无法删除订阅。"
msgid "Couldn't delete subscription OMB token."
msgstr "无法删除订阅。"
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "无法删除订阅。"
-#: classes/User.php:373
+#: classes/User.php:378
#, fuzzy, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr "å‘é€ç»™ %1$s çš„ %2$s 消æ¯"
-#: classes/User_group.php:477
+#: classes/User_group.php:480
msgid "Could not create group."
msgstr "无法创建组。"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "无法删除订阅。"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "无法删除订阅。"
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "无法删除订阅。"
@@ -4945,7 +4943,7 @@ msgstr "呼å«"
msgid "StatusNet software license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4954,12 +4952,12 @@ msgstr ""
"**%%site.name%%** 是一个微åšå®¢æœåŠ¡ï¼Œæ供者为 [%%site.broughtby%%](%%site."
"broughtbyurl%%)。"
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 是一个微åšå®¢æœåŠ¡ã€‚"
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4970,43 +4968,43 @@ msgstr ""
"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
"授æƒã€‚"
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "StatusNet软件注册è¯"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr "全部"
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr "注册è¯"
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr "分页"
-#: lib/action.php:1161
+#: lib/action.php:1164
#, fuzzy
msgid "After"
msgstr "« 之åŽ"
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "ä¹‹å‰ Â»"
@@ -5023,6 +5021,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
#, fuzzy
@@ -5124,7 +5126,7 @@ msgstr "SMS短信确认"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5203,11 +5205,11 @@ msgstr "移除"
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
#, fuzzy
msgid "Provider"
msgstr "个人信æ¯"
@@ -5230,37 +5232,51 @@ msgstr "密ç å·²ä¿å­˜ã€‚"
msgid "Password changing is not allowed"
msgstr "密ç å·²ä¿å­˜ã€‚"
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr "执行结果"
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr "执行完毕"
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr "执行失败"
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
-msgstr "对ä¸èµ·ï¼Œè¿™ä¸ªå‘½ä»¤è¿˜æ²¡æœ‰å®žçŽ°ã€‚"
+#: lib/command.php:83 lib/command.php:105
+#, fuzzy
+msgid "Notice with that id does not exist"
+msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚"
+
+#: lib/command.php:99 lib/command.php:570
+msgid "User has no last notice"
+msgstr "用户没有通告。"
-#: lib/command.php:88
+#: lib/command.php:125
#, fuzzy, php-format
msgid "Could not find a user with nickname %s"
msgstr "无法更新已确认的电å­é‚®ä»¶ã€‚"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "无法更新已确认的电å­é‚®ä»¶ã€‚"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr "对ä¸èµ·ï¼Œè¿™ä¸ªå‘½ä»¤è¿˜æ²¡æœ‰å®žçŽ°ã€‚"
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, fuzzy, php-format
msgid "Nudge sent to %s"
msgstr "振铃呼å«å‘出。"
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5268,200 +5284,198 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-#, fuzzy
-msgid "Notice with that id does not exist"
-msgstr "没有找到此IDçš„ä¿¡æ¯ã€‚"
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-msgid "User has no last notice"
-msgstr "用户没有通告。"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr "通告被标记为收è—。"
-#: lib/command.php:217
+#: lib/command.php:317
msgid "You are already a member of that group"
msgstr "您已ç»æ˜¯è¯¥ç»„æˆå‘˜"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "无法把 %s 用户添加到 %s 组"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%s 加入 %s 组"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "无法订阅用户:未找到。"
-#: lib/command.php:280
+#: lib/command.php:378
#, php-format
msgid "%s left group %s"
msgstr "%s 离开群 %s"
-#: lib/command.php:309
+#: lib/command.php:401
#, php-format
msgid "Fullname: %s"
msgstr "å…¨å:%s"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "ä½ç½®ï¼š%s"
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "主页:%s"
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr "关于:%s"
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, fuzzy, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。"
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr "å·²å‘ %s å‘é€æ¶ˆæ¯"
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr "å‘é€æ¶ˆæ¯å‡ºé”™ã€‚"
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "无法开å¯é€šå‘Šã€‚"
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "删除通告"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "消æ¯å·²å‘布。"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: lib/command.php:482
+#: lib/command.php:536
#, fuzzy, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。"
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "无法删除通告。"
-#: lib/command.php:493
+#: lib/command.php:547
#, fuzzy
msgid "Error saving notice."
msgstr "ä¿å­˜é€šå‘Šæ—¶å‡ºé”™ã€‚"
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr "指定è¦è®¢é˜…的用户å"
-#: lib/command.php:554 lib/command.php:589
-msgid "No such user"
-msgstr "没有这个用户。"
+#: lib/command.php:602
+#, fuzzy
+msgid "Can't subscribe to OMB profiles by command."
+msgstr "您未告知此个人信æ¯"
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr "订阅 %s"
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr "指定è¦å–消订阅的用户å"
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr "å–消订阅 %s"
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr "命令尚未实现。"
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr "通告关闭。"
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr "无法关闭通告。"
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr "通告开å¯ã€‚"
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr "无法开å¯é€šå‘Šã€‚"
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "å–消订阅 %s"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "您已订阅这些用户:"
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "无法订阅他人更新。"
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "无法订阅他人更新。"
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "您未告知此个人信æ¯"
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "您未告知此个人信æ¯"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5503,20 +5517,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "没有验è¯ç "
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
#, fuzzy
msgid "Go to the installer."
msgstr "登入本站"
@@ -5704,50 +5718,50 @@ msgstr "这个组所å‘布的消æ¯çš„标签"
msgid "This page is not available in a media type you accept"
msgstr "这个页é¢ä¸æ供您想è¦çš„媒体类型"
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚"
+
+#: lib/imagefile.php:90
#, fuzzy, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr "ä½ å¯ä»¥ç»™ä½ çš„组上载一个logo图。"
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr "部分上传。"
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr "上传文件时出错。"
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr "ä¸æ˜¯å›¾ç‰‡æ–‡ä»¶æˆ–文件已æŸå。"
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr "ä¸æ”¯æŒè¿™ç§å›¾åƒæ ¼å¼ã€‚"
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "没有这份通告。"
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr "未知文件类型"
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5960,7 +5974,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
#, fuzzy
msgid "from"
msgstr " 从 "
@@ -6119,27 +6133,27 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "没有内容ï¼"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "创建"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
#, fuzzy
msgid "Reply to this notice"
msgstr "无法删除通告。"
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
#, fuzzy
msgid "Reply"
msgstr "回å¤"
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "消æ¯å·²å‘布。"
@@ -6292,7 +6306,7 @@ msgstr "无法删除通告。"
msgid "Revoke the \"%s\" role from this user"
msgstr "该组æˆå‘˜åˆ—表。"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6430,96 +6444,100 @@ msgstr "å–消订阅 %s"
msgid "Unsubscribe"
msgstr "退订"
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "头åƒ"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
#, fuzzy
msgid "User actions"
msgstr "未知动作"
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "个人设置"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
#, fuzzy
msgid "Send a direct message to this user"
msgstr "无法å‘此用户å‘é€æ¶ˆæ¯ã€‚"
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
#, fuzzy
msgid "Message"
msgstr "新消æ¯"
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "用户没有个人信æ¯ã€‚"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
#, fuzzy
msgctxt "role"
msgid "Administrator"
msgstr "admin管ç†å‘˜"
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr "几秒å‰"
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr "一分钟å‰"
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟å‰"
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr "一å°æ—¶å‰"
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr "%d å°æ—¶å‰"
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr "一天å‰"
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr "%d 天å‰"
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr "一个月å‰"
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr "%d 个月å‰"
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr "一年å‰"
@@ -6533,7 +6551,7 @@ msgstr "主页的URLä¸æ­£ç¡®ã€‚"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, fuzzy, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr "您的消æ¯åŒ…å« %d 个字符,超出长度é™åˆ¶ - ä¸èƒ½è¶…过 140 个字符。"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 3ea887beb..a7b777d9d 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: 2010-03-06 23:49+0000\n"
-"PO-Revision-Date: 2010-03-06 23:51:15+0000\n"
+"POT-Creation-Date: 2010-03-17 21:39+0000\n"
+"PO-Revision-Date: 2010-03-17 21:41:53+0000\n"
"Language-Team: Traditional Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63880); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
@@ -97,7 +97,7 @@ msgstr "無此通知"
#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
-#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinefavorites.php:71 actions/apitimelinefriends.php:78
#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
@@ -106,10 +106,8 @@ msgstr "無此通知"
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:40
-#: actions/xrds.php:71 lib/command.php:163 lib/command.php:302
-#: lib/command.php:355 lib/command.php:401 lib/command.php:462
-#: lib/command.php:518 lib/galleryaction.php:59 lib/mailbox.php:82
-#: lib/profileaction.php:77
+#: actions/xrds.php:71 lib/command.php:456 lib/galleryaction.php:59
+#: lib/mailbox.php:82 lib/profileaction.php:77
msgid "No such user."
msgstr "無此使用者"
@@ -201,14 +199,14 @@ msgstr ""
#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
#: actions/apigroupshow.php:115 actions/apihelptest.php:88
#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
-#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:141
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
-#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelinefavorites.php:173 actions/apitimelinefriends.php:174
+#: actions/apitimelinegroup.php:151 actions/apitimelinehome.php:173
+#: actions/apitimelinementions.php:173 actions/apitimelinepublic.php:151
#: actions/apitimelineretweetedtome.php:121
-#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:160
+#: actions/apitimelineuser.php:162 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "確èªç¢¼éºå¤±"
@@ -222,8 +220,8 @@ msgstr "確èªç¢¼éºå¤±"
#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
-#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
-#: actions/apistatusesupdate.php:118
+#: actions/apigroupleave.php:91 actions/apimediaupload.php:67
+#: actions/apistatusesretweet.php:65 actions/apistatusesupdate.php:118
msgid "This method requires a POST."
msgstr ""
@@ -254,7 +252,7 @@ msgid "Could not save profile."
msgstr "無法儲存個人資料"
#: actions/apiaccountupdateprofilebackgroundimage.php:108
-#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apiaccountupdateprofileimage.php:97 actions/apimediaupload.php:80
#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
#: actions/designadminpanel.php:122 actions/editapplication.php:118
#: actions/newapplication.php:101 actions/newnotice.php:94
@@ -340,7 +338,7 @@ msgstr ""
msgid "This status is already a favorite."
msgstr ""
-#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:279
msgid "Could not create favorite."
msgstr ""
@@ -462,7 +460,7 @@ msgstr "ç›®å‰ç„¡è«‹æ±‚"
msgid "You are already a member of that group."
msgstr ""
-#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:321
msgid "You have been blocked from that group by the admin."
msgstr ""
@@ -514,7 +512,7 @@ msgstr "尺寸錯誤"
#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
#: actions/othersettings.php:145 actions/passwordsettings.php:138
-#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/profilesettings.php:194 actions/recoverpassword.php:350
#: actions/register.php:165 actions/remotesubscribe.php:77
#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
#: actions/subscribe.php:86 actions/tagother.php:166
@@ -582,9 +580,9 @@ msgstr "關於"
#: actions/apioauthauthorize.php:313 actions/login.php:230
#: actions/profilesettings.php:106 actions/register.php:424
-#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/showgroup.php:245 actions/tagother.php:94
#: actions/userauthorization.php:145 lib/groupeditform.php:152
-#: lib/userprofile.php:131
+#: lib/userprofile.php:132
msgid "Nickname"
msgstr "暱稱"
@@ -656,12 +654,12 @@ msgstr ""
msgid "Unsupported format."
msgstr ""
-#: actions/apitimelinefavorites.php:108
+#: actions/apitimelinefavorites.php:109
#, fuzzy, php-format
msgid "%1$s / Favorites from %2$s"
msgstr "%1$s的狀態是%2$s"
-#: actions/apitimelinefavorites.php:117
+#: actions/apitimelinefavorites.php:118
#, fuzzy, php-format
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "&s的微型部è½æ ¼"
@@ -671,7 +669,7 @@ msgstr "&s的微型部è½æ ¼"
msgid "%1$s / Updates mentioning %2$s"
msgstr "%1$s的狀態是%2$s"
-#: actions/apitimelinementions.php:127
+#: actions/apitimelinementions.php:130
#, php-format
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
@@ -681,7 +679,7 @@ msgstr ""
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:112 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -696,12 +694,12 @@ msgstr ""
msgid "Repeats of %s"
msgstr ""
-#: actions/apitimelinetag.php:102 actions/tag.php:67
+#: actions/apitimelinetag.php:104 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#: actions/apitimelinetag.php:106 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "&s的微型部è½æ ¼"
@@ -731,7 +729,7 @@ msgstr "無尺寸"
msgid "Invalid size."
msgstr "尺寸錯誤"
-#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: actions/avatarsettings.php:67 actions/showgroup.php:230
#: lib/accountsettingsaction.php:112
msgid "Avatar"
msgstr "個人圖åƒ"
@@ -764,7 +762,7 @@ msgid "Preview"
msgstr ""
#: actions/avatarsettings.php:149 actions/showapplication.php:252
-#: lib/deleteuserform.php:66 lib/noticelist.php:655
+#: lib/deleteuserform.php:66 lib/noticelist.php:658
msgid "Delete"
msgstr ""
@@ -849,8 +847,8 @@ msgstr ""
#: actions/groupunblock.php:86 actions/joingroup.php:82
#: actions/joingroup.php:93 actions/leavegroup.php:82
#: actions/leavegroup.php:93 actions/makeadmin.php:86
-#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
-#: lib/command.php:260
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:162
+#: lib/command.php:358
#, fuzzy
msgid "No such group."
msgstr "無此通知"
@@ -959,7 +957,7 @@ msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1217
+#: lib/action.php:1220
msgid "There was a problem with your session token."
msgstr ""
@@ -1019,7 +1017,7 @@ msgstr ""
msgid "Do not delete this notice"
msgstr "無此通知"
-#: actions/deletenotice.php:146 lib/noticelist.php:655
+#: actions/deletenotice.php:146 lib/noticelist.php:658
msgid "Delete this notice"
msgstr ""
@@ -1288,7 +1286,7 @@ msgstr "自我介紹éŽé•·(å…±140個字元)"
msgid "Could not update group."
msgstr "無法更新使用者"
-#: actions/editgroup.php:264 classes/User_group.php:493
+#: actions/editgroup.php:264 classes/User_group.php:496
#, fuzzy
msgid "Could not create aliases."
msgstr "無法存å–個人圖åƒè³‡æ–™"
@@ -1977,7 +1975,7 @@ msgstr ""
msgid "You are already subscribed to these users:"
msgstr ""
-#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:398
#, php-format
msgid "%1$s (%2$s)"
msgstr ""
@@ -2078,7 +2076,7 @@ msgstr ""
msgid "You must be logged in to leave a group."
msgstr ""
-#: actions/leavegroup.php:100 lib/command.php:265
+#: actions/leavegroup.php:100 lib/command.php:363
msgid "You are not a member of that group."
msgstr ""
@@ -2189,12 +2187,12 @@ msgstr ""
msgid "New message"
msgstr ""
-#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:459
msgid "You can't send a message to this user."
msgstr ""
-#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
-#: lib/command.php:475
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:443
+#: lib/command.php:529
msgid "No content!"
msgstr "無內容"
@@ -2202,7 +2200,7 @@ msgstr "無內容"
msgid "No recipient specified."
msgstr ""
-#: actions/newmessage.php:164 lib/command.php:361
+#: actions/newmessage.php:164 lib/command.php:462
msgid ""
"Don't send a message to yourself; just say it to yourself quietly instead."
msgstr ""
@@ -2216,7 +2214,7 @@ msgstr ""
msgid "Direct message to %s sent."
msgstr ""
-#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:189
msgid "Ajax Error"
msgstr ""
@@ -2328,7 +2326,7 @@ msgstr ""
msgid "Notice has no profile"
msgstr ""
-#: actions/oembed.php:86 actions/shownotice.php:180
+#: actions/oembed.php:86 actions/shownotice.php:175
#, php-format
msgid "%1$s's status on %2$s"
msgstr "%1$s的狀態是%2$s"
@@ -2342,8 +2340,8 @@ msgstr "連çµ"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
-#: lib/apiaction.php:1070 lib/apiaction.php:1179
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1069
+#: lib/apiaction.php:1097 lib/apiaction.php:1213
msgid "Not a supported data format."
msgstr ""
@@ -2481,7 +2479,7 @@ msgstr "舊密碼錯誤"
msgid "Error saving user; invalid."
msgstr "儲存使用者發生錯誤;使用者å稱無效"
-#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:381
msgid "Can't save new password."
msgstr "無法存å–新密碼"
@@ -2697,8 +2695,8 @@ msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
msgstr "1-64個å°å¯«è‹±æ–‡å­—æ¯æˆ–數字,勿加標點符號或空格"
#: actions/profilesettings.php:111 actions/register.php:448
-#: actions/showgroup.php:255 actions/tagother.php:104
-#: lib/groupeditform.php:157 lib/userprofile.php:149
+#: actions/showgroup.php:256 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:150
msgid "Full name"
msgstr "å…¨å"
@@ -2726,9 +2724,9 @@ msgid "Bio"
msgstr "自我介紹"
#: actions/profilesettings.php:132 actions/register.php:471
-#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/showgroup.php:265 actions/tagother.php:112
#: actions/userauthorization.php:166 lib/groupeditform.php:177
-#: lib/userprofile.php:164
+#: lib/userprofile.php:165
msgid "Location"
msgstr "地點"
@@ -2742,7 +2740,7 @@ msgstr ""
#: actions/profilesettings.php:145 actions/tagother.php:149
#: actions/tagother.php:209 lib/subscriptionlist.php:106
-#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+#: lib/subscriptionlist.php:108 lib/userprofile.php:210
msgid "Tags"
msgstr ""
@@ -2969,7 +2967,7 @@ msgstr ""
msgid "Recover password"
msgstr ""
-#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:335
msgid "Password recovery requested"
msgstr ""
@@ -2989,41 +2987,41 @@ msgstr ""
msgid "Enter a nickname or email address."
msgstr "請輸入暱稱或電å­ä¿¡ç®±"
-#: actions/recoverpassword.php:272
+#: actions/recoverpassword.php:282
msgid "No user with that email address or username."
msgstr ""
-#: actions/recoverpassword.php:287
+#: actions/recoverpassword.php:299
msgid "No registered email address for that user."
msgstr "查無此使用者所註冊的信箱"
-#: actions/recoverpassword.php:301
+#: actions/recoverpassword.php:313
msgid "Error saving address confirmation."
msgstr "儲存信箱確èªç™¼ç”ŸéŒ¯èª¤"
-#: actions/recoverpassword.php:325
+#: actions/recoverpassword.php:338
msgid ""
"Instructions for recovering your password have been sent to the email "
"address registered to your account."
msgstr "我們已寄出一å°ä¿¡åˆ°ä½ å¸³è™Ÿä¸­çš„信箱,告訴你如何å–回你的密碼。"
-#: actions/recoverpassword.php:344
+#: actions/recoverpassword.php:357
msgid "Unexpected password reset."
msgstr ""
-#: actions/recoverpassword.php:352
+#: actions/recoverpassword.php:365
msgid "Password must be 6 chars or more."
msgstr ""
-#: actions/recoverpassword.php:356
+#: actions/recoverpassword.php:369
msgid "Password and confirmation do not match."
msgstr ""
-#: actions/recoverpassword.php:375 actions/register.php:248
+#: actions/recoverpassword.php:388 actions/register.php:248
msgid "Error setting user."
msgstr "使用者設定發生錯誤"
-#: actions/recoverpassword.php:382
+#: actions/recoverpassword.php:395
msgid "New password successfully saved. You are now logged in."
msgstr "新密碼已儲存æˆåŠŸã€‚你已登入。"
@@ -3164,7 +3162,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:394
+#: lib/userprofile.php:406
msgid "Subscribe"
msgstr ""
@@ -3203,7 +3201,7 @@ msgstr ""
msgid "You already repeated that notice."
msgstr "無此使用者"
-#: actions/repeat.php:114 lib/noticelist.php:674
+#: actions/repeat.php:114 lib/noticelist.php:677
#, fuzzy
msgid "Repeated"
msgstr "新增"
@@ -3349,7 +3347,7 @@ msgstr "地點"
msgid "Description"
msgstr "所有訂閱"
-#: actions/showapplication.php:192 actions/showgroup.php:438
+#: actions/showapplication.php:192 actions/showgroup.php:439
#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3460,70 +3458,70 @@ msgstr ""
msgid "%1$s group, page %2$d"
msgstr "所有訂閱"
-#: actions/showgroup.php:226
+#: actions/showgroup.php:227
#, fuzzy
msgid "Group profile"
msgstr "無此通知"
-#: actions/showgroup.php:271 actions/tagother.php:118
-#: actions/userauthorization.php:175 lib/userprofile.php:177
+#: actions/showgroup.php:272 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:178
msgid "URL"
msgstr ""
-#: actions/showgroup.php:282 actions/tagother.php:128
-#: actions/userauthorization.php:187 lib/userprofile.php:194
+#: actions/showgroup.php:283 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:195
msgid "Note"
msgstr ""
-#: actions/showgroup.php:292 lib/groupeditform.php:184
+#: actions/showgroup.php:293 lib/groupeditform.php:184
msgid "Aliases"
msgstr ""
-#: actions/showgroup.php:301
+#: actions/showgroup.php:302
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:337
+#: actions/showgroup.php:338
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:343
+#: actions/showgroup.php:344
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:349
+#: actions/showgroup.php:350
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:354
+#: actions/showgroup.php:355
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "無此通知"
-#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+#: actions/showgroup.php:391 actions/showgroup.php:448 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "何時加入會員的呢?"
-#: actions/showgroup.php:395 lib/profileaction.php:117
+#: actions/showgroup.php:396 lib/profileaction.php:117
#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:401
+#: actions/showgroup.php:402
msgid "All members"
msgstr ""
-#: actions/showgroup.php:441
+#: actions/showgroup.php:442
#, fuzzy
msgid "Created"
msgstr "新增"
-#: actions/showgroup.php:457
+#: actions/showgroup.php:458
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3533,7 +3531,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:463
+#: actions/showgroup.php:464
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3542,7 +3540,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:491
+#: actions/showgroup.php:492
msgid "Admins"
msgstr ""
@@ -4078,13 +4076,13 @@ msgstr "無此文件"
msgid "Tag %s"
msgstr ""
-#: actions/tagother.php:77 lib/userprofile.php:75
+#: actions/tagother.php:77 lib/userprofile.php:76
#, fuzzy
msgid "User profile"
msgstr "無此通知"
#: actions/tagother.php:81 actions/userauthorization.php:132
-#: lib/userprofile.php:102
+#: lib/userprofile.php:103
msgid "Photo"
msgstr ""
@@ -4405,19 +4403,19 @@ msgstr "地點"
msgid "Author(s)"
msgstr ""
-#: classes/File.php:144
+#: classes/File.php:169
#, php-format
msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
msgstr ""
-#: classes/File.php:154
+#: classes/File.php:179
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
msgstr ""
-#: classes/File.php:161
+#: classes/File.php:186
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
@@ -4459,46 +4457,46 @@ msgstr ""
msgid "Could not update message with new URI."
msgstr ""
-#: classes/Notice.php:172
+#: classes/Notice.php:175
#, php-format
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:241
+#: classes/Notice.php:244
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:245
+#: classes/Notice.php:248
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:250
+#: classes/Notice.php:253
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:256
+#: classes/Notice.php:259
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:262
+#: classes/Notice.php:265
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:328 classes/Notice.php:354
+#: classes/Notice.php:331 classes/Notice.php:357
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:927
+#: classes/Notice.php:941
#, fuzzy
msgid "Problem saving group inbox."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:1459
+#: classes/Notice.php:1479
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4530,31 +4528,31 @@ msgstr "無法刪除帳號"
msgid "Couldn't delete subscription OMB token."
msgstr "無法刪除帳號"
-#: classes/Subscription.php:201 lib/subs.php:69
+#: classes/Subscription.php:201
msgid "Couldn't delete subscription."
msgstr "無法刪除帳號"
-#: classes/User.php:373
+#: classes/User.php:378
#, php-format
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:477
+#: classes/User_group.php:480
#, fuzzy
msgid "Could not create group."
msgstr "無法存å–個人圖åƒè³‡æ–™"
-#: classes/User_group.php:486
+#: classes/User_group.php:489
#, fuzzy
msgid "Could not set group URI."
msgstr "註冊失敗"
-#: classes/User_group.php:507
+#: classes/User_group.php:510
#, fuzzy
msgid "Could not set group membership."
msgstr "註冊失敗"
-#: classes/User_group.php:521
+#: classes/User_group.php:524
#, fuzzy
msgid "Could not save local group info."
msgstr "註冊失敗"
@@ -4774,7 +4772,7 @@ msgstr ""
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:802
+#: lib/action.php:804
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4783,12 +4781,12 @@ msgstr ""
"**%%site.name%%**是由[%%site.broughtby%%](%%site.broughtbyurl%%)所æ供的微型"
"部è½æ ¼æœå‹™"
-#: lib/action.php:804
+#: lib/action.php:806
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%**是個微型部è½æ ¼"
-#: lib/action.php:806
+#: lib/action.php:809
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4796,42 +4794,42 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:821
+#: lib/action.php:824
#, fuzzy
msgid "Site content license"
msgstr "新訊æ¯"
-#: lib/action.php:826
+#: lib/action.php:829
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:831
+#: lib/action.php:834
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:834
+#: lib/action.php:837
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:847
+#: lib/action.php:850
msgid "All "
msgstr ""
-#: lib/action.php:853
+#: lib/action.php:856
msgid "license."
msgstr ""
-#: lib/action.php:1152
+#: lib/action.php:1155
msgid "Pagination"
msgstr ""
-#: lib/action.php:1161
+#: lib/action.php:1164
msgid "After"
msgstr ""
-#: lib/action.php:1169
+#: lib/action.php:1172
#, fuzzy
msgid "Before"
msgstr "之å‰çš„內容»"
@@ -4848,6 +4846,10 @@ msgstr ""
msgid "Can't handle embedded Base64 content yet."
msgstr ""
+#: lib/activity.php:1089
+msgid "Expecting a root feed element but got a whole XML document."
+msgstr ""
+
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
@@ -4944,7 +4946,7 @@ msgstr "確èªä¿¡ç®±"
msgid "API resource requires read-write access, but you only have read access."
msgstr ""
-#: lib/apiauth.php:272
+#: lib/apiauth.php:276
#, php-format
msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
msgstr ""
@@ -5019,11 +5021,11 @@ msgstr ""
msgid "Attachments"
msgstr ""
-#: lib/attachmentlist.php:265
+#: lib/attachmentlist.php:263
msgid "Author"
msgstr ""
-#: lib/attachmentlist.php:278
+#: lib/attachmentlist.php:276
msgid "Provider"
msgstr ""
@@ -5043,37 +5045,51 @@ msgstr ""
msgid "Password changing is not allowed"
msgstr ""
-#: lib/channel.php:138 lib/channel.php:158
+#: lib/channel.php:157 lib/channel.php:177
msgid "Command results"
msgstr ""
-#: lib/channel.php:210 lib/mailhandler.php:142
+#: lib/channel.php:229 lib/mailhandler.php:142
msgid "Command complete"
msgstr ""
-#: lib/channel.php:221
+#: lib/channel.php:240
msgid "Command failed"
msgstr ""
-#: lib/command.php:44
-msgid "Sorry, this command is not yet implemented."
+#: lib/command.php:83 lib/command.php:105
+msgid "Notice with that id does not exist"
msgstr ""
-#: lib/command.php:88
+#: lib/command.php:99 lib/command.php:570
+#, fuzzy
+msgid "User has no last notice"
+msgstr "新訊æ¯"
+
+#: lib/command.php:125
#, php-format
msgid "Could not find a user with nickname %s"
msgstr "無法更新使用者"
-#: lib/command.php:92
+#: lib/command.php:143
+#, fuzzy, php-format
+msgid "Could not find a local user with nickname %s"
+msgstr "無法更新使用者"
+
+#: lib/command.php:176
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:221
msgid "It does not make a lot of sense to nudge yourself!"
msgstr ""
-#: lib/command.php:99
+#: lib/command.php:228
#, php-format
msgid "Nudge sent to %s"
msgstr ""
-#: lib/command.php:126
+#: lib/command.php:254
#, php-format
msgid ""
"Subscriptions: %1$s\n"
@@ -5081,201 +5097,197 @@ msgid ""
"Notices: %3$s"
msgstr ""
-#: lib/command.php:152 lib/command.php:390 lib/command.php:451
-msgid "Notice with that id does not exist"
-msgstr ""
-
-#: lib/command.php:168 lib/command.php:406 lib/command.php:467
-#: lib/command.php:523
-#, fuzzy
-msgid "User has no last notice"
-msgstr "新訊æ¯"
-
-#: lib/command.php:190
+#: lib/command.php:296
msgid "Notice marked as fave."
msgstr ""
-#: lib/command.php:217
+#: lib/command.php:317
#, fuzzy
msgid "You are already a member of that group"
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:231
+#: lib/command.php:331
#, fuzzy, php-format
msgid "Could not join user %s to group %s"
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:236
+#: lib/command.php:336
#, fuzzy, php-format
msgid "%s joined group %s"
msgstr "%1$s的狀態是%2$s"
-#: lib/command.php:275
+#: lib/command.php:373
#, fuzzy, php-format
msgid "Could not remove user %s to group %s"
msgstr "無法從 %s 建立OpenID"
-#: lib/command.php:280
+#: lib/command.php:378
#, fuzzy, php-format
msgid "%s left group %s"
msgstr "%1$s的狀態是%2$s"
-#: lib/command.php:309
+#: lib/command.php:401
#, fuzzy, php-format
msgid "Fullname: %s"
msgstr "å…¨å"
-#: lib/command.php:312 lib/mail.php:258
+#: lib/command.php:404 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:260
+#: lib/command.php:407 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
-#: lib/command.php:318
+#: lib/command.php:410
#, php-format
msgid "About: %s"
msgstr ""
-#: lib/command.php:349
+#: lib/command.php:437
+#, php-format
+msgid ""
+"%s is a remote profile; you can only send direct messages to users on the "
+"same server."
+msgstr ""
+
+#: lib/command.php:450
#, php-format
msgid "Message too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:367
+#: lib/command.php:468
#, php-format
msgid "Direct message to %s sent"
msgstr ""
-#: lib/command.php:369
+#: lib/command.php:470
msgid "Error sending direct message."
msgstr ""
-#: lib/command.php:413
+#: lib/command.php:490
#, fuzzy
msgid "Cannot repeat your own notice"
msgstr "儲存使用者發生錯誤"
-#: lib/command.php:418
+#: lib/command.php:495
#, fuzzy
msgid "Already repeated that notice"
msgstr "無此使用者"
-#: lib/command.php:426
+#: lib/command.php:503
#, fuzzy, php-format
msgid "Notice from %s repeated"
msgstr "更新個人圖åƒ"
-#: lib/command.php:428
+#: lib/command.php:505
#, fuzzy
msgid "Error repeating notice."
msgstr "儲存使用者發生錯誤"
-#: lib/command.php:482
+#: lib/command.php:536
#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
msgstr ""
-#: lib/command.php:491
+#: lib/command.php:545
#, fuzzy, php-format
msgid "Reply to %s sent"
msgstr "&s的微型部è½æ ¼"
-#: lib/command.php:493
+#: lib/command.php:547
msgid "Error saving notice."
msgstr "儲存使用者發生錯誤"
-#: lib/command.php:547
+#: lib/command.php:594
msgid "Specify the name of the user to subscribe to"
msgstr ""
-#: lib/command.php:554 lib/command.php:589
-#, fuzzy
-msgid "No such user"
-msgstr "無此使用者"
+#: lib/command.php:602
+msgid "Can't subscribe to OMB profiles by command."
+msgstr ""
-#: lib/command.php:561
+#: lib/command.php:608
#, php-format
msgid "Subscribed to %s"
msgstr ""
-#: lib/command.php:582 lib/command.php:685
+#: lib/command.php:629 lib/command.php:728
msgid "Specify the name of the user to unsubscribe from"
msgstr ""
-#: lib/command.php:595
+#: lib/command.php:638
#, php-format
msgid "Unsubscribed from %s"
msgstr ""
-#: lib/command.php:613 lib/command.php:636
+#: lib/command.php:656 lib/command.php:679
msgid "Command not yet implemented."
msgstr ""
-#: lib/command.php:616
+#: lib/command.php:659
msgid "Notification off."
msgstr ""
-#: lib/command.php:618
+#: lib/command.php:661
msgid "Can't turn off notification."
msgstr ""
-#: lib/command.php:639
+#: lib/command.php:682
msgid "Notification on."
msgstr ""
-#: lib/command.php:641
+#: lib/command.php:684
msgid "Can't turn on notification."
msgstr ""
-#: lib/command.php:654
+#: lib/command.php:697
msgid "Login command is disabled"
msgstr ""
-#: lib/command.php:665
+#: lib/command.php:708
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
msgstr ""
-#: lib/command.php:692
+#: lib/command.php:735
#, fuzzy, php-format
msgid "Unsubscribed %s"
msgstr "此帳號已註冊"
-#: lib/command.php:709
+#: lib/command.php:752
#, fuzzy
msgid "You are not subscribed to anyone."
msgstr "此帳號已註冊"
-#: lib/command.php:711
+#: lib/command.php:754
msgid "You are subscribed to this person:"
msgid_plural "You are subscribed to these people:"
msgstr[0] "此帳號已註冊"
-#: lib/command.php:731
+#: lib/command.php:774
#, fuzzy
msgid "No one is subscribed to you."
msgstr "無此訂閱"
-#: lib/command.php:733
+#: lib/command.php:776
msgid "This person is subscribed to you:"
msgid_plural "These people are subscribed to you:"
msgstr[0] "無此訂閱"
-#: lib/command.php:753
+#: lib/command.php:796
#, fuzzy
msgid "You are not a member of any groups."
msgstr "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:755
+#: lib/command.php:798
msgid "You are a member of this group:"
msgid_plural "You are a member of these groups:"
msgstr[0] "無法連çµåˆ°ä¼ºæœå™¨:%s"
-#: lib/command.php:769
+#: lib/command.php:812
msgid ""
"Commands:\n"
"on - turn on notifications\n"
@@ -5317,20 +5329,20 @@ msgid ""
"tracking - not yet implemented.\n"
msgstr ""
-#: lib/common.php:148
+#: lib/common.php:136
#, fuzzy
msgid "No configuration file found. "
msgstr "無確èªç¢¼"
-#: lib/common.php:149
+#: lib/common.php:137
msgid "I looked for configuration files in the following places: "
msgstr ""
-#: lib/common.php:151
+#: lib/common.php:139
msgid "You may wish to run the installer to fix this."
msgstr ""
-#: lib/common.php:152
+#: lib/common.php:140
msgid "Go to the installer."
msgstr ""
@@ -5510,50 +5522,50 @@ msgstr ""
msgid "This page is not available in a media type you accept"
msgstr ""
-#: lib/imagefile.php:75
+#: lib/imagefile.php:74
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:90
#, php-format
msgid "That file is too big. The maximum file size is %s."
msgstr ""
-#: lib/imagefile.php:80
+#: lib/imagefile.php:95
msgid "Partial upload."
msgstr ""
-#: lib/imagefile.php:88 lib/mediafile.php:170
+#: lib/imagefile.php:103 lib/mediafile.php:170
msgid "System error uploading file."
msgstr ""
-#: lib/imagefile.php:96
+#: lib/imagefile.php:111
msgid "Not an image or corrupt file."
msgstr ""
-#: lib/imagefile.php:109
-msgid "Unsupported image file format."
-msgstr ""
-
-#: lib/imagefile.php:122
+#: lib/imagefile.php:124
#, fuzzy
msgid "Lost our file."
msgstr "無此通知"
-#: lib/imagefile.php:166 lib/imagefile.php:231
+#: lib/imagefile.php:168 lib/imagefile.php:233
msgid "Unknown file type"
msgstr ""
-#: lib/imagefile.php:251
+#: lib/imagefile.php:253
msgid "MB"
msgstr ""
-#: lib/imagefile.php:253
+#: lib/imagefile.php:255
msgid "kB"
msgstr ""
-#: lib/jabber.php:220
+#: lib/jabber.php:228
#, php-format
msgid "[%s]"
msgstr ""
-#: lib/jabber.php:400
+#: lib/jabber.php:408
#, php-format
msgid "Unknown inbox source %d."
msgstr ""
@@ -5758,7 +5770,7 @@ msgid ""
"users in conversation. People can send you messages for your eyes only."
msgstr ""
-#: lib/mailbox.php:227 lib/noticelist.php:482
+#: lib/mailbox.php:227 lib/noticelist.php:485
msgid "from"
msgstr ""
@@ -5913,25 +5925,25 @@ msgstr ""
msgid "at"
msgstr ""
-#: lib/noticelist.php:566
+#: lib/noticelist.php:569
#, fuzzy
msgid "in context"
msgstr "無內容"
-#: lib/noticelist.php:601
+#: lib/noticelist.php:604
#, fuzzy
msgid "Repeated by"
msgstr "新增"
-#: lib/noticelist.php:628
+#: lib/noticelist.php:631
msgid "Reply to this notice"
msgstr ""
-#: lib/noticelist.php:629
+#: lib/noticelist.php:632
msgid "Reply"
msgstr ""
-#: lib/noticelist.php:673
+#: lib/noticelist.php:676
#, fuzzy
msgid "Notice repeated"
msgstr "更新個人圖åƒ"
@@ -6079,7 +6091,7 @@ msgstr "無此通知"
msgid "Revoke the \"%s\" role from this user"
msgstr "無此使用者"
-#: lib/router.php:671
+#: lib/router.php:677
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6210,92 +6222,96 @@ msgstr ""
msgid "Unsubscribe"
msgstr ""
-#: lib/userprofile.php:116
+#: lib/userprofile.php:117
#, fuzzy
msgid "Edit Avatar"
msgstr "個人圖åƒ"
-#: lib/userprofile.php:236
+#: lib/userprofile.php:234 lib/userprofile.php:248
msgid "User actions"
msgstr ""
-#: lib/userprofile.php:251
+#: lib/userprofile.php:237
+msgid "User deletion in progress..."
+msgstr ""
+
+#: lib/userprofile.php:263
#, fuzzy
msgid "Edit profile settings"
msgstr "線上å³æ™‚通設定"
-#: lib/userprofile.php:252
+#: lib/userprofile.php:264
msgid "Edit"
msgstr ""
-#: lib/userprofile.php:275
+#: lib/userprofile.php:287
msgid "Send a direct message to this user"
msgstr ""
-#: lib/userprofile.php:276
+#: lib/userprofile.php:288
msgid "Message"
msgstr ""
-#: lib/userprofile.php:314
+#: lib/userprofile.php:326
msgid "Moderate"
msgstr ""
-#: lib/userprofile.php:352
+#: lib/userprofile.php:364
#, fuzzy
msgid "User role"
msgstr "無此通知"
-#: lib/userprofile.php:354
+#: lib/userprofile.php:366
msgctxt "role"
msgid "Administrator"
msgstr ""
-#: lib/userprofile.php:355
+#: lib/userprofile.php:367
msgctxt "role"
msgid "Moderator"
msgstr ""
-#: lib/util.php:1015
+#: lib/util.php:1046
msgid "a few seconds ago"
msgstr ""
-#: lib/util.php:1017
+#: lib/util.php:1048
msgid "about a minute ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1050
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1052
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1054
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1056
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1058
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1060
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1062
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1033
+#: lib/util.php:1064
msgid "about a year ago"
msgstr ""
@@ -6309,7 +6325,7 @@ msgstr "個人首é ä½å€éŒ¯èª¤"
msgid "%s is not a valid color! Use 3 or 6 hex chars."
msgstr ""
-#: lib/xmppmanager.php:402
+#: lib/xmppmanager.php:403
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
msgstr ""
diff --git a/plugins/AutoSandbox/AutoSandboxPlugin.php b/plugins/AutoSandbox/AutoSandboxPlugin.php
new file mode 100644
index 000000000..ffd8bf455
--- /dev/null
+++ b/plugins/AutoSandbox/AutoSandboxPlugin.php
@@ -0,0 +1,96 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to automatically sandbox newly registered users in an effort to beat
+ * spammers. If the user proves to be legitimate, moderators can un-sandbox them.
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Sean Carmody<seancarmody@gmail.com>
+ * @copyright 2010
+ * @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);
+}
+
+define('AUTOSANDBOX', '0.1');
+
+//require_once(INSTALLDIR.'/plugins/AutoSandbox/autosandbox.php');
+
+class AutoSandboxPlugin extends Plugin
+{
+ var $contact;
+ var $debug;
+
+ function onInitializePlugin()
+ {
+ if(!isset($this->debug))
+ {
+ $this->debug = 0;
+ }
+
+ if(!isset($this->contact)) {
+ $default = common_config('newuser', 'default');
+ if (!empty($default)) {
+ $this->contact = $default;
+ }
+ }
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'AutoSandbox',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Sean Carmody',
+ 'homepage' => 'http://status.net/wiki/Plugin:AutoSandbox',
+ 'rawdescription' =>
+ _m('Automatically sandboxes newly registered members.'));
+ return true;
+ }
+
+ function onStartRegistrationFormData($action)
+ {
+
+ $instr = 'Note you will initially be "sandboxed" so your posts will not appear in the public timeline.';
+
+ if (isset($this->contact)) {
+ $contactuser = User::staticGet('nickname', $this->contact);
+ if (!empty($contactuser)) {
+ $contactlink = "@<a href=\"$contactuser->uri\">$contactuser->nickname</a>";
+ $instr = $instr . " Send a message to $contactlink to speed up the unsandboxing process.";
+ }
+ }
+
+ $output = common_markup_to_html($instr);
+ $action->elementStart('div', 'instructions');
+ $action->raw($output);
+ $action->elementEnd('div');
+ }
+
+ function onEndUserRegister(&$profile,&$user)
+ {
+ $profile->sandbox();
+ if ($this->debug) {
+ common_log(LOG_WARNING, "AutoSandbox: sandboxed of $user->nickname");
+ }
+ }
+}
diff --git a/plugins/AutoSandbox/LICENSE b/plugins/AutoSandbox/LICENSE
new file mode 100644
index 000000000..011faa4e7
--- /dev/null
+++ b/plugins/AutoSandbox/LICENSE
@@ -0,0 +1,21 @@
+Copyright (c) 2010 Stubborn Mule - http://www.stubbornmule.net
+AUTHORS:
+ Sean Carmody
+
+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 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.
diff --git a/plugins/AutoSandbox/README b/plugins/AutoSandbox/README
new file mode 100644
index 000000000..2f5d625f7
--- /dev/null
+++ b/plugins/AutoSandbox/README
@@ -0,0 +1,39 @@
+StatusNet AutoSandbox plugin 0.1 03/16/10
+=========================================
+Automatically sandboxes newly registered users as a spam-management technique.
+Only really suits small sites where all users can be hand-moderated. A moderator
+will then have to unbox legimate users, using the following built-in script:
+
+./scripts/userrole.php -n username -r moderator
+
+(replace 'username' with the nickname of the user you wish to make a moderator).
+
+The following note will be added to the top of the Registration form:
+
+"Note you will initially be "sandboxed" so your posts will not appear in the
+public timeline."
+
+This can be followed by the following extra information if a contact user (denoted
+here by XXX) is specified:
+
+"Send a message to @XXX to speed up the unsandboxing process."
+
+If no contact user is specified, it will default to the "Default subscription" user
+who automatically subscribes to new users (set in Admin -> User).
+
+Use:
+1. Add plugin:
+
+Default usage:
+addPlugin('AutoSandbox');
+
+Specify a contact user (replace 'someuser' with appropriate username):
+addPlugin('AutoSandbox', array('contact' => 'someuser'));
+
+Stop contact user from defaulting to the Defaul subscription:
+addPlugin('AutoSandbox', array('contact' => ''));
+
+Changelog
+=========
+0.1 initial release
+
diff --git a/plugins/FirePHP/FirePHPPlugin.php b/plugins/FirePHP/FirePHPPlugin.php
index 452f79024..9143ff69c 100644
--- a/plugins/FirePHP/FirePHPPlugin.php
+++ b/plugins/FirePHP/FirePHPPlugin.php
@@ -52,8 +52,8 @@ class FirePHPPlugin extends Plugin
{
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);
+ $fp_priority = $firephp_priorities[$priority];
+ $this->firephp->fb($msg, $fp_priority);
}
function onPluginVersion(&$versions)
diff --git a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
index 483209676..a55c45ff5 100644
--- a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
+++ b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
@@ -31,48 +31,25 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once 'Net/LDAP2.php';
-
class LdapAuthenticationPlugin extends AuthenticationPlugin
{
- public $host=null;
- public $port=null;
- public $version=null;
- public $starttls=null;
- public $binddn=null;
- public $bindpw=null;
- public $basedn=null;
- public $options=null;
- public $filter=null;
- public $scope=null;
- public $password_encoding=null;
- public $attributes=array();
-
function onInitializePlugin(){
parent::onInitializePlugin();
- if(!isset($this->host)){
- throw new Exception("must specify a host");
- }
- if(!isset($this->basedn)){
- throw new Exception("must specify a basedn");
- }
if(!isset($this->attributes['nickname'])){
throw new Exception("must specify a nickname attribute");
}
- if(!isset($this->attributes['username'])){
- throw new Exception("must specify a username attribute");
- }
if($this->password_changeable && (! isset($this->attributes['password']) || !isset($this->password_encoding))){
throw new Exception("if password_changeable is set, the password attribute and password_encoding must also be specified");
}
+ $this->ldapCommon = new LdapCommon(get_object_vars($this));
}
function onAutoload($cls)
{
switch ($cls)
{
- case 'MemcacheSchemaCache':
- require_once(INSTALLDIR.'/plugins/LdapAuthentication/MemcacheSchemaCache.php');
+ case 'LdapCommon':
+ require_once(INSTALLDIR.'/plugins/LdapCommon/LdapCommon.php');
return false;
}
}
@@ -107,19 +84,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
function checkPassword($username, $password)
{
- $entry = $this->ldap_get_user($username);
- if(!$entry){
- return false;
- }else{
- $config = $this->ldap_get_config();
- $config['binddn']=$entry->dn();
- $config['bindpw']=$password;
- if($this->ldap_get_connection($config)){
- return true;
- }else{
- return false;
- }
- }
+ return $this->ldapCommon->checkPassword($username,$password);
}
function autoRegister($username, $nickname)
@@ -127,7 +92,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
if(is_null($nickname)){
$nickname = $username;
}
- $entry = $this->ldap_get_user($username,$this->attributes);
+ $entry = $this->ldapCommon->get_user($username,$this->attributes);
if($entry){
$registration_data = array();
foreach($this->attributes as $sn_attribute=>$ldap_attribute){
@@ -148,40 +113,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
function changePassword($username,$oldpassword,$newpassword)
{
- if(! isset($this->attributes['password']) || !isset($this->password_encoding)){
- //throw new Exception(_('Sorry, changing LDAP passwords is not supported at this time'));
- return false;
- }
- $entry = $this->ldap_get_user($username);
- if(!$entry){
- return false;
- }else{
- $config = $this->ldap_get_config();
- $config['binddn']=$entry->dn();
- $config['bindpw']=$oldpassword;
- if($ldap = $this->ldap_get_connection($config)){
- $entry = $this->ldap_get_user($username,array(),$ldap);
-
- $newCryptedPassword = $this->hashPassword($newpassword, $this->password_encoding);
- if ($newCryptedPassword===false) {
- return false;
- }
- if($this->password_encoding=='ad') {
- //TODO I believe this code will work once this bug is fixed: http://pear.php.net/bugs/bug.php?id=16796
- $oldCryptedPassword = $this->hashPassword($oldpassword, $this->password_encoding);
- $entry->delete( array($this->attributes['password'] => $oldCryptedPassword ));
- }
- $entry->replace( array($this->attributes['password'] => $newCryptedPassword ), true);
- if( Net_LDAP2::isError($entry->upate()) ) {
- return false;
- }
- return true;
- }else{
- return false;
- }
- }
-
- return false;
+ return $this->ldapCommon->changePassword($username,$oldpassword,$newpassword);
}
function suggestNicknameForUsername($username)
@@ -198,203 +130,6 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
}
return common_nicknamize($nickname);
}
-
- //---utility functions---//
- function ldap_get_config(){
- $config = array();
- $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope');
- foreach($keys as $key){
- $value = $this->$key;
- if($value!==null){
- $config[$key]=$value;
- }
- }
- return $config;
- }
-
- function ldap_get_connection($config = null){
- if($config == null && isset($this->default_ldap)){
- return $this->default_ldap;
- }
-
- //cannot use Net_LDAP2::connect() as StatusNet uses
- //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
- //PEAR handling can be overridden on instance objects, so we do that.
- $ldap = new Net_LDAP2(isset($config)?$config:$this->ldap_get_config());
- $ldap->setErrorHandling(PEAR_ERROR_RETURN);
- $err=$ldap->bind();
- if (Net_LDAP2::isError($err)) {
- // if we were called with a config, assume caller will handle
- // incorrect username/password (LDAP_INVALID_CREDENTIALS)
- if (isset($config) && $err->getCode() == 0x31) {
- return null;
- }
- throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
- }
- if($config == null) $this->default_ldap=$ldap;
-
- $c = common_memcache();
- if (!empty($c)) {
- $cacheObj = new MemcacheSchemaCache(
- array('c'=>$c,
- 'cacheKey' => common_cache_key('ldap_schema:' . crc32(serialize($config)))));
- $ldap->registerSchemaCache($cacheObj);
- }
- return $ldap;
- }
-
- /**
- * get an LDAP entry for a user with a given username
- *
- * @param string $username
- * $param array $attributes LDAP attributes to retrieve
- * @return string DN
- */
- function ldap_get_user($username,$attributes=array(),$ldap=null){
- if($ldap==null) {
- $ldap = $this->ldap_get_connection();
- }
- $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
- $options = array(
- 'attributes' => $attributes
- );
- $search = $ldap->search($this->basedn, $filter, $options);
-
- if (PEAR::isError($search)) {
- common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage());
- return false;
- }
-
- $searchcount = $search->count();
- if($searchcount == 0) {
- return false;
- }else if($searchcount == 1) {
- $entry = $search->shiftEntry();
- return $entry;
- }else{
- common_log(LOG_WARNING, 'Found ' . $searchcount . ' ldap user with the username: ' . $username);
- return false;
- }
- }
-
- /**
- * Code originaly from the phpLDAPadmin development team
- * http://phpldapadmin.sourceforge.net/
- *
- * Hashes a password and returns the hash based on the specified enc_type.
- *
- * @param string $passwordClear The password to hash in clear text.
- * @param string $encodageType Standard LDAP encryption type which must be one of
- * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear.
- * @return string The hashed password.
- *
- */
-
- function hashPassword( $passwordClear, $encodageType )
- {
- $encodageType = strtolower( $encodageType );
- switch( $encodageType ) {
- case 'crypt':
- $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2));
- break;
-
- case 'ext_des':
- // extended des crypt. see OpenBSD crypt man page.
- if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {return FALSE;} //Your system crypt library does not support extended DES encryption.
- $cryptedPassword = '{CRYPT}' . crypt( $passwordClear, '_' . $this->randomSalt(8) );
- break;
-
- case 'md5crypt':
- if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) {return FALSE;} //Your system crypt library does not support md5crypt encryption.
- $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$1$' . $this->randomSalt(9) );
- break;
-
- case 'blowfish':
- if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) {return FALSE;} //Your system crypt library does not support blowfish encryption.
- $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$2a$12$' . $this->randomSalt(13) ); // hardcoded to second blowfish version and set number of rounds
- break;
-
- case 'md5':
- $cryptedPassword = '{MD5}' . base64_encode( pack( 'H*' , md5( $passwordClear) ) );
- break;
-
- case 'sha':
- if( function_exists('sha1') ) {
- // use php 4.3.0+ sha1 function, if it is available.
- $cryptedPassword = '{SHA}' . base64_encode( pack( 'H*' , sha1( $passwordClear) ) );
- } elseif( function_exists( 'mhash' ) ) {
- $cryptedPassword = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $passwordClear) );
- } else {
- return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
- }
- break;
-
- case 'ssha':
- if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) {
- mt_srand( (double) microtime() * 1000000 );
- $salt = mhash_keygen_s2k( MHASH_SHA1, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 );
- $cryptedPassword = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $passwordClear.$salt ).$salt );
- } else {
- return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
- }
- break;
-
- case 'smd5':
- if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) {
- mt_srand( (double) microtime() * 1000000 );
- $salt = mhash_keygen_s2k( MHASH_MD5, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 );
- $cryptedPassword = "{SMD5}".base64_encode( mhash( MHASH_MD5, $passwordClear.$salt ).$salt );
- } else {
- return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
- }
- break;
-
- case 'ad':
- $cryptedPassword = '';
- $passwordClear = "\"" . $passwordClear . "\"";
- $len = strlen($passwordClear);
- for ($i = 0; $i < $len; $i++) {
- $cryptedPassword .= "{$passwordClear{$i}}\000";
- }
-
- case 'clear':
- default:
- $cryptedPassword = $passwordClear;
- }
-
- return $cryptedPassword;
- }
-
- /**
- * Code originaly from the phpLDAPadmin development team
- * http://phpldapadmin.sourceforge.net/
- *
- * Used to generate a random salt for crypt-style passwords. Salt strings are used
- * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses
- * not only the user's password but also a randomly generated string. The string is
- * stored as the first N characters of the hash for reference of hashing algorithms later.
- *
- * --- added 20021125 by bayu irawan <bayuir@divnet.telkom.co.id> ---
- * --- ammended 20030625 by S C Rigler <srigler@houston.rr.com> ---
- *
- * @param int $length The length of the salt string to generate.
- * @return string The generated salt string.
- */
-
- function randomSalt( $length )
- {
- $possible = '0123456789'.
- 'abcdefghijklmnopqrstuvwxyz'.
- 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
- './';
- $str = "";
- mt_srand((double)microtime() * 1000000);
-
- while( strlen( $str ) < $length )
- $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 );
-
- return $str;
- }
function onPluginVersion(&$versions)
{
diff --git a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
index 2608025dd..97103d158 100644
--- a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
+++ b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
@@ -31,41 +31,28 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-require_once 'Net/LDAP2.php';
-
class LdapAuthorizationPlugin extends AuthorizationPlugin
{
- public $host=null;
- public $port=null;
- public $version=null;
- public $starttls=null;
- public $binddn=null;
- public $bindpw=null;
- public $basedn=null;
- public $options=null;
- public $filter=null;
- public $scope=null;
- public $provider_name = null;
- public $uniqueMember_attribute = null;
public $roles_to_groups = array();
public $login_group = null;
- public $attributes = array();
function onInitializePlugin(){
- if(!isset($this->host)){
- throw new Exception("must specify a host");
- }
- if(!isset($this->basedn)){
- throw new Exception("must specify a basedn");
- }
if(!isset($this->provider_name)){
throw new Exception("provider_name must be set. Use the provider_name from the LDAP Authentication plugin.");
}
if(!isset($this->uniqueMember_attribute)){
throw new Exception("uniqueMember_attribute must be set.");
}
- if(!isset($this->attributes['username'])){
- throw new Exception("username attribute must be set.");
+ $this->ldapCommon = new LdapCommon(get_object_vars($this));
+ }
+
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'LdapCommon':
+ require_once(INSTALLDIR.'/plugins/LdapCommon/LdapCommon.php');
+ return false;
}
}
@@ -75,17 +62,17 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
$user_username->user_id=$user->id;
$user_username->provider_name=$this->provider_name;
if($user_username->find() && $user_username->fetch()){
- $entry = $this->ldap_get_user($user_username->username);
+ $entry = $this->ldapCommon->get_user($user_username->username);
if($entry){
if(isset($this->login_group)){
if(is_array($this->login_group)){
foreach($this->login_group as $group){
- if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){
+ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){
return true;
}
}
}else{
- if($this->ldap_is_dn_member_of_group($entry->dn(),$this->login_group)){
+ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->login_group)){
return true;
}
}
@@ -107,17 +94,17 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
$user_username->user_id=$profile->id;
$user_username->provider_name=$this->provider_name;
if($user_username->find() && $user_username->fetch()){
- $entry = $this->ldap_get_user($user_username->username);
+ $entry = $this->ldapCommon->get_user($user_username->username);
if($entry){
if(isset($this->roles_to_groups[$name])){
if(is_array($this->roles_to_groups[$name])){
foreach($this->roles_to_groups[$name] as $group){
- if($this->ldap_is_dn_member_of_group($entry->dn(),$group)){
+ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$group)){
return true;
}
}
}else{
- if($this->ldap_is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){
+ if($this->ldapCommon->is_dn_member_of_group($entry->dn(),$this->roles_to_groups[$name])){
return true;
}
}
@@ -127,94 +114,6 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
return false;
}
- function ldap_is_dn_member_of_group($userDn, $groupDn)
- {
- $ldap = $this->ldap_get_connection();
- $link = $ldap->getLink();
- $r = ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn);
- if ($r === true){
- return true;
- }else if($r === false){
- return false;
- }else{
- common_log(LOG_ERR, ldap_error($r));
- return false;
- }
- }
-
- function ldap_get_config(){
- $config = array();
- $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope');
- foreach($keys as $key){
- $value = $this->$key;
- if($value!==null){
- $config[$key]=$value;
- }
- }
- return $config;
- }
-
- //-----the below function were copied from LDAPAuthenticationPlugin. They will be moved to a utility class soon.----\\
- function ldap_get_connection($config = null){
- if($config == null && isset($this->default_ldap)){
- return $this->default_ldap;
- }
-
- //cannot use Net_LDAP2::connect() as StatusNet uses
- //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
- //PEAR handling can be overridden on instance objects, so we do that.
- $ldap = new Net_LDAP2(isset($config)?$config:$this->ldap_get_config());
- $ldap->setErrorHandling(PEAR_ERROR_RETURN);
- $err=$ldap->bind();
- if (Net_LDAP2::isError($err)) {
- // if we were called with a config, assume caller will handle
- // incorrect username/password (LDAP_INVALID_CREDENTIALS)
- if (isset($config) && $err->getCode() == 0x31) {
- return null;
- }
- throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
- return false;
- }
- if($config == null) $this->default_ldap=$ldap;
- return $ldap;
- }
-
- /**
- * get an LDAP entry for a user with a given username
- *
- * @param string $username
- * $param array $attributes LDAP attributes to retrieve
- * @return string DN
- */
- function ldap_get_user($username,$attributes=array(),$ldap=null){
- if($ldap==null) {
- $ldap = $this->ldap_get_connection();
- }
- if(! $ldap) {
- throw new Exception("Could not connect to LDAP");
- }
- $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
- $options = array(
- 'attributes' => $attributes
- );
- $search = $ldap->search(null,$filter,$options);
-
- if (PEAR::isError($search)) {
- common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage());
- return false;
- }
-
- if($search->count()==0){
- return false;
- }else if($search->count()==1){
- $entry = $search->shiftEntry();
- return $entry;
- }else{
- common_log(LOG_WARNING, 'Found ' . $search->count() . ' ldap user with the username: ' . $username);
- return false;
- }
- }
-
function onPluginVersion(&$versions)
{
$versions[] = array('name' => 'LDAP Authorization',
diff --git a/plugins/LdapCommon/LdapCommon.php b/plugins/LdapCommon/LdapCommon.php
new file mode 100644
index 000000000..39d872df5
--- /dev/null
+++ b/plugins/LdapCommon/LdapCommon.php
@@ -0,0 +1,356 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Utility class of LDAP functions
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 Craig Andrews http://candrews.integralblue.com
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+class LdapCommon
+{
+ protected static $ldap_connections = array();
+ public $host=null;
+ public $port=null;
+ public $version=null;
+ public $starttls=null;
+ public $binddn=null;
+ public $bindpw=null;
+ public $basedn=null;
+ public $options=null;
+ public $filter=null;
+ public $scope=null;
+ public $uniqueMember_attribute = null;
+ public $attributes=array();
+ public $password_encoding=null;
+
+ public function __construct($config)
+ {
+ Event::addHandler('Autoload',array($this,'onAutoload'));
+ foreach($config as $key=>$value) {
+ $this->$key = $value;
+ }
+ $this->ldap_config = $this->get_ldap_config();
+
+ if(!isset($this->host)){
+ throw new Exception("must specify a host");
+ }
+ if(!isset($this->basedn)){
+ throw new Exception("must specify a basedn");
+ }
+ if(!isset($this->attributes['username'])){
+ throw new Exception("username attribute must be set.");
+ }
+ }
+
+ function onAutoload($cls)
+ {
+ switch ($cls)
+ {
+ case 'MemcacheSchemaCache':
+ require_once(INSTALLDIR.'/plugins/LdapCommon/MemcacheSchemaCache.php');
+ return false;
+ case 'Net_LDAP2':
+ require_once 'Net/LDAP2.php';
+ return false;
+ }
+ }
+
+ function get_ldap_config(){
+ $config = array();
+ $keys = array('host','port','version','starttls','binddn','bindpw','basedn','options','filter','scope');
+ foreach($keys as $key){
+ $value = $this->$key;
+ if($value!==null){
+ $config[$key]=$value;
+ }
+ }
+ return $config;
+ }
+
+ function get_ldap_connection($config = null){
+ if($config == null) {
+ $config = $this->ldap_config;
+ }
+ $config_id = crc32(serialize($config));
+ $ldap = self::$ldap_connections[$config_id];
+ if(! isset($ldap)) {
+ //cannot use Net_LDAP2::connect() as StatusNet uses
+ //PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, 'handleError');
+ //PEAR handling can be overridden on instance objects, so we do that.
+ $ldap = new Net_LDAP2($config);
+ $ldap->setErrorHandling(PEAR_ERROR_RETURN);
+ $err=$ldap->bind();
+ if (Net_LDAP2::isError($err)) {
+ // if we were called with a config, assume caller will handle
+ // incorrect username/password (LDAP_INVALID_CREDENTIALS)
+ if (isset($config) && $err->getCode() == 0x31) {
+ throw new LdapInvalidCredentialsException('Could not connect to LDAP server: '.$err->getMessage());
+ }
+ throw new Exception('Could not connect to LDAP server: '.$err->getMessage());
+ }
+ $c = common_memcache();
+ if (!empty($c)) {
+ $cacheObj = new MemcacheSchemaCache(
+ array('c'=>$c,
+ 'cacheKey' => common_cache_key('ldap_schema:' . $config_id)));
+ $ldap->registerSchemaCache($cacheObj);
+ }
+ self::$ldap_connections[$config_id] = $ldap;
+ }
+ return $ldap;
+ }
+
+ function checkPassword($username, $password)
+ {
+ $entry = $this->get_user($username);
+ if(!$entry){
+ return false;
+ }else{
+ $config = $this->get_ldap_config();
+ $config['binddn']=$entry->dn();
+ $config['bindpw']=$password;
+ try {
+ $this->get_ldap_connection($config);
+ } catch (LdapInvalidCredentialsException $e) {
+ return false;
+ }
+ return true;
+ }
+ }
+
+ function changePassword($username,$oldpassword,$newpassword)
+ {
+ if(! isset($this->attributes['password']) || !isset($this->password_encoding)){
+ //throw new Exception(_('Sorry, changing LDAP passwords is not supported at this time'));
+ return false;
+ }
+ $entry = $this->get_user($username);
+ if(!$entry){
+ return false;
+ }else{
+ $config = $this->get_ldap_config();
+ $config['binddn']=$entry->dn();
+ $config['bindpw']=$oldpassword;
+ try {
+ $ldap = $this->get_ldap_connection($config);
+
+ $entry = $this->get_user($username,array(),$ldap);
+
+ $newCryptedPassword = $this->hashPassword($newpassword, $this->password_encoding);
+ if ($newCryptedPassword===false) {
+ return false;
+ }
+ if($this->password_encoding=='ad') {
+ //TODO I believe this code will work once this bug is fixed: http://pear.php.net/bugs/bug.php?id=16796
+ $oldCryptedPassword = $this->hashPassword($oldpassword, $this->password_encoding);
+ $entry->delete( array($this->attributes['password'] => $oldCryptedPassword ));
+ }
+ $entry->replace( array($this->attributes['password'] => $newCryptedPassword ), true);
+ if( Net_LDAP2::isError($entry->upate()) ) {
+ return false;
+ }
+ return true;
+ } catch (LdapInvalidCredentialsException $e) {
+ return false;
+ }
+ }
+
+ return false;
+ }
+
+ function is_dn_member_of_group($userDn, $groupDn)
+ {
+ $ldap = $this->get_ldap_connection();
+ $link = $ldap->getLink();
+ $r = @ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn);
+ if ($r === true){
+ return true;
+ }else if($r === false){
+ return false;
+ }else{
+ common_log(LOG_ERR, "LDAP error determining if userDn=$userDn is a member of groupDn=$groupDn using uniqueMember_attribute=$this->uniqueMember_attribute error: ".ldap_error($link));
+ return false;
+ }
+ }
+
+ /**
+ * get an LDAP entry for a user with a given username
+ *
+ * @param string $username
+ * $param array $attributes LDAP attributes to retrieve
+ * @return string DN
+ */
+ function get_user($username,$attributes=array()){
+ $ldap = $this->get_ldap_connection();
+ $filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
+ $options = array(
+ 'attributes' => $attributes
+ );
+ $search = $ldap->search(null,$filter,$options);
+
+ if (PEAR::isError($search)) {
+ common_log(LOG_WARNING, 'Error while getting DN for user: '.$search->getMessage());
+ return false;
+ }
+
+ if($search->count()==0){
+ return false;
+ }else if($search->count()==1){
+ $entry = $search->shiftEntry();
+ return $entry;
+ }else{
+ common_log(LOG_WARNING, 'Found ' . $search->count() . ' ldap user with the username: ' . $username);
+ return false;
+ }
+ }
+
+ /**
+ * Code originaly from the phpLDAPadmin development team
+ * http://phpldapadmin.sourceforge.net/
+ *
+ * Hashes a password and returns the hash based on the specified enc_type.
+ *
+ * @param string $passwordClear The password to hash in clear text.
+ * @param string $encodageType Standard LDAP encryption type which must be one of
+ * crypt, ext_des, md5crypt, blowfish, md5, sha, smd5, ssha, or clear.
+ * @return string The hashed password.
+ *
+ */
+
+ function hashPassword( $passwordClear, $encodageType )
+ {
+ $encodageType = strtolower( $encodageType );
+ switch( $encodageType ) {
+ case 'crypt':
+ $cryptedPassword = '{CRYPT}' . crypt($passwordClear,$this->randomSalt(2));
+ break;
+
+ case 'ext_des':
+ // extended des crypt. see OpenBSD crypt man page.
+ if ( ! defined( 'CRYPT_EXT_DES' ) || CRYPT_EXT_DES == 0 ) {return FALSE;} //Your system crypt library does not support extended DES encryption.
+ $cryptedPassword = '{CRYPT}' . crypt( $passwordClear, '_' . $this->randomSalt(8) );
+ break;
+
+ case 'md5crypt':
+ if( ! defined( 'CRYPT_MD5' ) || CRYPT_MD5 == 0 ) {return FALSE;} //Your system crypt library does not support md5crypt encryption.
+ $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$1$' . $this->randomSalt(9) );
+ break;
+
+ case 'blowfish':
+ if( ! defined( 'CRYPT_BLOWFISH' ) || CRYPT_BLOWFISH == 0 ) {return FALSE;} //Your system crypt library does not support blowfish encryption.
+ $cryptedPassword = '{CRYPT}' . crypt( $passwordClear , '$2a$12$' . $this->randomSalt(13) ); // hardcoded to second blowfish version and set number of rounds
+ break;
+
+ case 'md5':
+ $cryptedPassword = '{MD5}' . base64_encode( pack( 'H*' , md5( $passwordClear) ) );
+ break;
+
+ case 'sha':
+ if( function_exists('sha1') ) {
+ // use php 4.3.0+ sha1 function, if it is available.
+ $cryptedPassword = '{SHA}' . base64_encode( pack( 'H*' , sha1( $passwordClear) ) );
+ } elseif( function_exists( 'mhash' ) ) {
+ $cryptedPassword = '{SHA}' . base64_encode( mhash( MHASH_SHA1, $passwordClear) );
+ } else {
+ return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
+ }
+ break;
+
+ case 'ssha':
+ if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) {
+ mt_srand( (double) microtime() * 1000000 );
+ $salt = mhash_keygen_s2k( MHASH_SHA1, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 );
+ $cryptedPassword = "{SSHA}".base64_encode( mhash( MHASH_SHA1, $passwordClear.$salt ).$salt );
+ } else {
+ return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
+ }
+ break;
+
+ case 'smd5':
+ if( function_exists( 'mhash' ) && function_exists( 'mhash_keygen_s2k' ) ) {
+ mt_srand( (double) microtime() * 1000000 );
+ $salt = mhash_keygen_s2k( MHASH_MD5, $passwordClear, substr( pack( "h*", md5( mt_rand() ) ), 0, 8 ), 4 );
+ $cryptedPassword = "{SMD5}".base64_encode( mhash( MHASH_MD5, $passwordClear.$salt ).$salt );
+ } else {
+ return FALSE; //Your PHP install does not have the mhash() function. Cannot do SHA hashes.
+ }
+ break;
+
+ case 'ad':
+ $cryptedPassword = '';
+ $passwordClear = "\"" . $passwordClear . "\"";
+ $len = strlen($passwordClear);
+ for ($i = 0; $i < $len; $i++) {
+ $cryptedPassword .= "{$passwordClear{$i}}\000";
+ }
+
+ case 'clear':
+ default:
+ $cryptedPassword = $passwordClear;
+ }
+
+ return $cryptedPassword;
+ }
+
+ /**
+ * Code originaly from the phpLDAPadmin development team
+ * http://phpldapadmin.sourceforge.net/
+ *
+ * Used to generate a random salt for crypt-style passwords. Salt strings are used
+ * to make pre-built hash cracking dictionaries difficult to use as the hash algorithm uses
+ * not only the user's password but also a randomly generated string. The string is
+ * stored as the first N characters of the hash for reference of hashing algorithms later.
+ *
+ * --- added 20021125 by bayu irawan <bayuir@divnet.telkom.co.id> ---
+ * --- ammended 20030625 by S C Rigler <srigler@houston.rr.com> ---
+ *
+ * @param int $length The length of the salt string to generate.
+ * @return string The generated salt string.
+ */
+
+ function randomSalt( $length )
+ {
+ $possible = '0123456789'.
+ 'abcdefghijklmnopqrstuvwxyz'.
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
+ './';
+ $str = "";
+ mt_srand((double)microtime() * 1000000);
+
+ while( strlen( $str ) < $length )
+ $str .= substr( $possible, ( rand() % strlen( $possible ) ), 1 );
+
+ return $str;
+ }
+
+}
+
+class LdapInvalidCredentialsException extends Exception
+{
+
+}
diff --git a/plugins/LdapAuthentication/MemcacheSchemaCache.php b/plugins/LdapCommon/MemcacheSchemaCache.php
index 6b91d17d6..6b91d17d6 100644
--- a/plugins/LdapAuthentication/MemcacheSchemaCache.php
+++ b/plugins/LdapCommon/MemcacheSchemaCache.php
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index efb630297..c985fb4bc 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -290,7 +290,7 @@ class OStatusPlugin extends Plugin
$url = "$scheme://$target";
$this->log(LOG_INFO, "Checking profile address '$url'");
try {
- $oprofile = Ostatus_profile::ensureProfile($url);
+ $oprofile = Ostatus_profile::ensureProfileURL($url);
if ($oprofile && !$oprofile->isGroup()) {
$profile = $oprofile->localProfile();
$matches[$pos] = array('mentioned' => array($profile),
@@ -322,6 +322,86 @@ class OStatusPlugin extends Plugin
}
/**
+ * Allow remote profile references to be used in commands:
+ * sub update@status.net
+ * whois evan@identi.ca
+ * reply http://identi.ca/evan hey what's up
+ *
+ * @param Command $command
+ * @param string $arg
+ * @param Profile &$profile
+ * @return hook return code
+ */
+ function onStartCommandGetProfile($command, $arg, &$profile)
+ {
+ $oprofile = $this->pullRemoteProfile($arg);
+ if ($oprofile && !$oprofile->isGroup()) {
+ $profile = $oprofile->localProfile();
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ /**
+ * Allow remote group references to be used in commands:
+ * join group+statusnet@identi.ca
+ * join http://identi.ca/group/statusnet
+ * drop identi.ca/group/statusnet
+ *
+ * @param Command $command
+ * @param string $arg
+ * @param User_group &$group
+ * @return hook return code
+ */
+ function onStartCommandGetGroup($command, $arg, &$group)
+ {
+ $oprofile = $this->pullRemoteProfile($arg);
+ if ($oprofile && $oprofile->isGroup()) {
+ $group = $oprofile->localGroup();
+ return false;
+ } else {
+ return true;
+ }
+ }
+
+ protected function pullRemoteProfile($arg)
+ {
+ $oprofile = null;
+ if (preg_match('!^((?:\w+\.)*\w+@(?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+)$!', $arg)) {
+ // webfinger lookup
+ try {
+ return Ostatus_profile::ensureWebfinger($arg);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, 'Webfinger lookup failed for ' .
+ $arg . ': ' . $e->getMessage());
+ }
+ }
+
+ // Look for profile URLs, with or without scheme:
+ $urls = array();
+ if (preg_match('!^https?://((?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+(?:/\w+)+)$!', $arg)) {
+ $urls[] = $arg;
+ }
+ if (preg_match('!^((?:\w+\.)*\w+(?:\w+\-\w+)*\.\w+(?:/\w+)+)$!', $arg)) {
+ $schemes = array('http', 'https');
+ foreach ($schemes as $scheme) {
+ $urls[] = "$scheme://$arg";
+ }
+ }
+
+ foreach ($urls as $url) {
+ try {
+ return Ostatus_profile::ensureProfileURL($url);
+ } catch (Exception $e) {
+ common_log(LOG_ERR, 'Profile lookup failed for ' .
+ $arg . ': ' . $e->getMessage());
+ }
+ }
+ return null;
+ }
+
+ /**
* Make sure necessary tables are filled out.
*/
function onCheckSchema() {
@@ -849,4 +929,22 @@ class OStatusPlugin extends Plugin
return true;
}
+
+ /**
+ * Utility function to check if the given URL is a canonical group profile
+ * page, and if so return the ID number.
+ *
+ * @param string $url
+ * @return mixed int or false
+ */
+ public static function localGroupFromUrl($url)
+ {
+ $template = common_local_url('groupbyid', array('id' => '31337'));
+ $template = preg_quote($template, '/');
+ $template = str_replace('31337', '(\d+)', $template);
+ if (preg_match("/$template/", $url, $matches)) {
+ return intval($matches[1]);
+ }
+ return false;
+ }
}
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index 65dee2392..994af6e95 100644
--- a/plugins/OStatus/actions/ostatussub.php
+++ b/plugins/OStatus/actions/ostatussub.php
@@ -149,7 +149,7 @@ class OStatusSubAction extends Action
$fullname = $entity->fullname;
$homepage = $entity->homepage;
$location = $entity->location;
-
+
if (!$avatar) {
$avatar = Avatar::defaultImage(AVATAR_PROFILE_SIZE);
}
@@ -242,7 +242,7 @@ class OStatusSubAction extends Action
if (Validate::email($this->profile_uri)) {
$this->oprofile = Ostatus_profile::ensureWebfinger($this->profile_uri);
} else if (Validate::uri($this->profile_uri)) {
- $this->oprofile = Ostatus_profile::ensureProfile($this->profile_uri);
+ $this->oprofile = Ostatus_profile::ensureProfileURL($this->profile_uri);
} else {
$this->error = _m("Sorry, we could not reach that address. Please make sure that the OStatus address is like nickname@example.com or http://example.net/nickname");
common_debug('Invalid address format.', __FILE__);
@@ -299,7 +299,7 @@ class OStatusSubAction extends Action
if ($user->isSubscribed($local)) {
// TRANS: OStatus remote subscription dialog error.
$this->showForm(_m('Already subscribed!'));
- } elseif ($this->oprofile->subscribeLocalToRemote($user)) {
+ } elseif (Subscription::start($user, $local)) {
$this->success();
} else {
// TRANS: OStatus remote subscription dialog error.
@@ -339,7 +339,6 @@ class OStatusSubAction extends Action
}
}
-
/**
* Handle posts to this form
*
diff --git a/plugins/OStatus/actions/usersalmon.php b/plugins/OStatus/actions/usersalmon.php
index c8a16e06f..15e8c1869 100644
--- a/plugins/OStatus/actions/usersalmon.php
+++ b/plugins/OStatus/actions/usersalmon.php
@@ -82,7 +82,8 @@ class UsersalmonAction extends SalmonAction
throw new ClientException("In reply to a notice not by this user");
}
} else if (!empty($context->attention)) {
- if (!in_array($this->user->uri, $context->attention)) {
+ if (!in_array($this->user->uri, $context->attention) &&
+ !in_array(common_profile_url($this->user->nickname), $context->attention)) {
common_log(LOG_ERR, "{$this->user->uri} not in attention list (".implode(',', $context->attention).")");
throw new ClientException("To the attention of user(s) not including this one!");
}
diff --git a/plugins/OStatus/actions/userxrd.php b/plugins/OStatus/actions/userxrd.php
index 414de9364..6a6886eb8 100644
--- a/plugins/OStatus/actions/userxrd.php
+++ b/plugins/OStatus/actions/userxrd.php
@@ -32,12 +32,19 @@ class UserxrdAction extends XrdAction
parent::prepare($args);
$this->uri = $this->trimmed('uri');
- $acct = Discovery::normalize($this->uri);
-
- list($nick, $domain) = explode('@', substr(urldecode($acct), 5));
- $nick = common_canonical_nickname($nick);
-
- $this->user = User::staticGet('nickname', $nick);
+ $this->uri = Discovery::normalize($this->uri);
+
+ if (Discovery::isWebfinger($this->uri)) {
+ $parts = explode('@', substr(urldecode($this->uri), 5));
+ if (count($parts) == 2) {
+ list($nick, $domain) = $parts;
+ // @fixme confirm the domain too
+ $nick = common_canonical_nickname($nick);
+ $this->user = User::staticGet('nickname', $nick);
+ }
+ } else {
+ $this->user = User::staticGet('uri', $this->uri);
+ }
if (!$this->user) {
$this->clientError(_('No such user.'), 404);
return false;
diff --git a/plugins/OStatus/classes/FeedSub.php b/plugins/OStatus/classes/FeedSub.php
index b848b6b1d..b10509dae 100644
--- a/plugins/OStatus/classes/FeedSub.php
+++ b/plugins/OStatus/classes/FeedSub.php
@@ -61,7 +61,7 @@ class FeedSub extends Memcached_DataObject
public $__table = 'feedsub';
public $id;
- public $feeduri;
+ public $uri;
// PuSH subscription data
public $huburi;
@@ -110,7 +110,7 @@ class FeedSub extends Memcached_DataObject
/*size*/ null,
/*nullable*/ false,
/*key*/ 'PRI',
- /*default*/ '0',
+ /*default*/ null,
/*extra*/ null,
/*auto_increment*/ true),
new ColumnDef('uri', 'varchar',
@@ -238,7 +238,7 @@ class FeedSub extends Memcached_DataObject
public function subscribe($mode='subscribe')
{
if ($this->sub_state && $this->sub_state != 'inactive') {
- throw new ServerException("Attempting to start PuSH subscription to feed in state $this->sub_state");
+ common_log(LOG_WARNING, "Attempting to (re)start PuSH subscription to $this->uri in unexpected state $this->sub_state");
}
if (empty($this->huburi)) {
if (common_config('feedsub', 'nohub')) {
@@ -261,7 +261,7 @@ class FeedSub extends Memcached_DataObject
*/
public function unsubscribe() {
if ($this->sub_state != 'active') {
- throw new ServerException("Attempting to end PuSH subscription to feed in state $this->sub_state");
+ common_log(LOG_WARNING, "Attempting to (re)end PuSH subscription to $this->uri in unexpected state $this->sub_state");
}
if (empty($this->huburi)) {
if (common_config('feedsub', 'nohub')) {
@@ -450,3 +450,4 @@ class FeedSub extends Memcached_DataObject
}
}
+
diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php
index 3120a70f9..cdace3c1f 100644
--- a/plugins/OStatus/classes/HubSub.php
+++ b/plugins/OStatus/classes/HubSub.php
@@ -77,7 +77,7 @@ class HubSub extends Memcached_DataObject
new ColumnDef('topic', 'varchar',
/*size*/255,
/*nullable*/false,
- /*key*/'KEY'),
+ /*key*/'MUL'),
new ColumnDef('callback', 'varchar',
255, false),
new ColumnDef('secret', 'text',
@@ -192,7 +192,7 @@ class HubSub extends Memcached_DataObject
// Any existing query string parameters must be preserved
$url = $this->callback;
- if (strpos('?', $url) !== false) {
+ if (strpos($url, '?') !== false) {
$url .= '&';
} else {
$url .= '?';
diff --git a/plugins/OStatus/classes/Magicsig.php b/plugins/OStatus/classes/Magicsig.php
index 5a46aeeb6..87c684c93 100644
--- a/plugins/OStatus/classes/Magicsig.php
+++ b/plugins/OStatus/classes/Magicsig.php
@@ -27,8 +27,6 @@
* @link http://status.net/
*/
-require_once 'Crypt/RSA.php';
-
class Magicsig extends Memcached_DataObject
{
@@ -40,8 +38,9 @@ class Magicsig extends Memcached_DataObject
public $keypair;
public $alg;
- private $_rsa;
-
+ public $publicKey;
+ public $privateKey;
+
public function __construct($alg = 'RSA-SHA256')
{
$this->alg = $alg;
@@ -70,9 +69,9 @@ class Magicsig extends Memcached_DataObject
static function schemaDef()
{
return array(new ColumnDef('user_id', 'integer',
- null, true, 'PRI'),
- new ColumnDef('keypair', 'varchar',
- 255, false),
+ null, false, 'PRI'),
+ new ColumnDef('keypair', 'text',
+ false, false),
new ColumnDef('alg', 'varchar',
64, false));
}
@@ -99,17 +98,20 @@ class Magicsig extends Memcached_DataObject
return parent::insert();
}
- public function generate($user_id, $key_length = 512)
+ public function generate($user_id)
{
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
+ $rsa = new SafeCrypt_RSA();
+
+ $keypair = $rsa->createKey();
- $keypair = new Crypt_RSA_KeyPair($key_length);
- $params['public_key'] = $keypair->getPublicKey();
- $params['private_key'] = $keypair->getPrivateKey();
+ $rsa->loadKey($keypair['privatekey']);
- $this->_rsa = new Crypt_RSA($params);
- PEAR::popErrorHandling();
+ $this->privateKey = new SafeCrypt_RSA();
+ $this->privateKey->loadKey($keypair['privatekey']);
+ $this->publicKey = new SafeCrypt_RSA();
+ $this->publicKey->loadKey($keypair['publickey']);
+
$this->user_id = $user_id;
$this->insert();
}
@@ -117,14 +119,11 @@ class Magicsig extends Memcached_DataObject
public function toString($full_pair = true)
{
- $public_key = $this->_rsa->_public_key;
- $private_key = $this->_rsa->_private_key;
-
- $mod = base64_url_encode($public_key->getModulus());
- $exp = base64_url_encode($public_key->getExponent());
+ $mod = base64_url_encode($this->publicKey->modulus->toBytes());
+ $exp = base64_url_encode($this->publicKey->exponent->toBytes());
$private_exp = '';
- if ($full_pair && $private_key->getExponent()) {
- $private_exp = '.' . base64_url_encode($private_key->getExponent());
+ if ($full_pair && $this->privateKey->exponent->toBytes()) {
+ $private_exp = '.' . base64_url_encode($this->privateKey->exponent->toBytes());
}
return 'RSA.' . $mod . '.' . $exp . $private_exp;
@@ -132,8 +131,6 @@ class Magicsig extends Memcached_DataObject
public static function fromString($text)
{
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-
$magic_sig = new Magicsig();
// remove whitespace
@@ -144,35 +141,40 @@ class Magicsig extends Memcached_DataObject
return false;
}
- $mod = base64_url_decode($matches[1]);
- $exp = base64_url_decode($matches[2]);
+ $mod = $matches[1];
+ $exp = $matches[2];
if (!empty($matches[4])) {
- $private_exp = base64_url_decode($matches[4]);
+ $private_exp = $matches[4];
} else {
$private_exp = false;
}
- $params['public_key'] = new Crypt_RSA_KEY($mod, $exp, 'public');
- if ($params['public_key']->isError()) {
- $error = $params['public_key']->getLastError();
- common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
- return false;
- }
+ $magic_sig->loadKey($mod, $exp, 'public');
if ($private_exp) {
- $params['private_key'] = new Crypt_RSA_KEY($mod, $private_exp, 'private');
- if ($params['private_key']->isError()) {
- $error = $params['private_key']->getLastError();
- common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
- return false;
- }
+ $magic_sig->loadKey($mod, $private_exp, 'private');
}
- $magic_sig->_rsa = new Crypt_RSA($params);
- PEAR::popErrorHandling();
-
return $magic_sig;
}
+ public function loadKey($mod, $exp, $type = 'public')
+ {
+ common_log(LOG_DEBUG, "Adding ".$type." key: (".$mod .', '. $exp .")");
+
+ $rsa = new SafeCrypt_RSA();
+ $rsa->signatureMode = CRYPT_RSA_SIGNATURE_PKCS1;
+ $rsa->setHash('sha256');
+ $rsa->modulus = new Math_BigInteger(base64_url_decode($mod), 256);
+ $rsa->k = strlen($rsa->modulus->toBytes());
+ $rsa->exponent = new Math_BigInteger(base64_url_decode($exp), 256);
+
+ if ($type == 'private') {
+ $this->privateKey = $rsa;
+ } else {
+ $this->publicKey = $rsa;
+ }
+ }
+
public function getName()
{
return $this->alg;
@@ -183,45 +185,25 @@ class Magicsig extends Memcached_DataObject
switch ($this->alg) {
case 'RSA-SHA256':
- return 'magicsig_sha256';
+ return 'sha256';
}
}
public function sign($bytes)
{
- $hash = $this->getHash();
- $sig = $this->_rsa->createSign($bytes, null, $hash);
- if ($this->_rsa->isError()) {
- $error = $this->_rsa->getLastError();
- common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
- return false;
- }
-
- return $sig;
+ $sig = $this->privateKey->sign($bytes);
+ return base64_url_encode($sig);
}
public function verify($signed_bytes, $signature)
{
- $hash = $this->getHash();
- $result = $this->_rsa->validateSign($signed_bytes, $signature, null, $hash);
- if ($this->_rsa->isError()) {
- $error = $this->keypair->getLastError();
- common_log(LOG_DEBUG, 'RSA Error: '. $error->getMessage());
- return false;
- }
- return $result;
+ $signature = base64_url_decode($signature);
+ return $this->publicKey->verify($signed_bytes, $signature);
}
}
-// Define a sha256 function for hashing
-// (Crypt_RSA should really be updated to use hash() )
-function magicsig_sha256($bytes)
-{
- return hash('sha256', $bytes);
-}
-
function base64_url_encode($input)
{
return strtr(base64_encode($input), '+/', '-_');
@@ -230,4 +212,4 @@ function base64_url_encode($input)
function base64_url_decode($input)
{
return base64_decode(strtr($input, '-_', '+/'));
-} \ No newline at end of file
+}
diff --git a/plugins/OStatus/classes/Ostatus_profile.php b/plugins/OStatus/classes/Ostatus_profile.php
index abc8100ce..15e149125 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -195,52 +195,6 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
- * Subscribe a local user to this remote user.
- * PuSH subscription will be started if necessary, and we'll
- * send a Salmon notification to the remote server if available
- * notifying them of the sub.
- *
- * @param User $user
- * @return boolean success
- * @throws FeedException
- */
- public function subscribeLocalToRemote(User $user)
- {
- if ($this->isGroup()) {
- throw new ServerException("Can't subscribe to a remote group");
- }
-
- if ($this->subscribe()) {
- if ($user->subscribeTo($this->localProfile())) {
- $this->notify($user->getProfile(), ActivityVerb::FOLLOW, $this);
- return true;
- }
- }
- return false;
- }
-
- /**
- * Mark this remote profile as subscribing to the given local user,
- * and send appropriate notifications to the user.
- *
- * This will generally be in response to a subscription notification
- * from a foreign site to our local Salmon response channel.
- *
- * @param User $user
- * @return boolean success
- */
- public function subscribeRemoteToLocal(User $user)
- {
- if ($this->isGroup()) {
- throw new ServerException("Remote groups can't subscribe to local users");
- }
-
- Subscription::start($this->localProfile(), $user->getProfile());
-
- return true;
- }
-
- /**
* Send a subscription request to the hub for this feed.
* The hub will later send us a confirmation POST to /main/push/callback.
*
@@ -250,12 +204,13 @@ class Ostatus_profile extends Memcached_DataObject
public function subscribe()
{
$feedsub = FeedSub::ensureFeed($this->feeduri);
- if ($feedsub->sub_state == 'active' || $feedsub->sub_state == 'subscribe') {
+ if ($feedsub->sub_state == 'active') {
+ // Active subscription, we don't need to do anything.
return true;
- } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') {
+ } else {
+ // Inactive or we got left in an inconsistent state.
+ // Run a subscription request to make sure we're current!
return $feedsub->subscribe();
- } else if ('unsubscribe') {
- throw new FeedSubException("Unsub is pending, can't subscribe...");
}
}
@@ -268,15 +223,13 @@ class Ostatus_profile extends Memcached_DataObject
*/
public function unsubscribe() {
$feedsub = FeedSub::staticGet('uri', $this->feeduri);
- if (!$feedsub) {
+ if (!$feedsub || $feedsub->sub_state == '' || $feedsub->sub_state == 'inactive') {
+ // No active PuSH subscription, we can just leave it be.
return true;
- }
- if ($feedsub->sub_state == 'active') {
+ } else {
+ // PuSH subscription is either active or in an indeterminate state.
+ // Send an unsubscribe.
return $feedsub->unsubscribe();
- } else if ($feedsub->sub_state == '' || $feedsub->sub_state == 'inactive' || $feedsub->sub_state == 'unsubscribe') {
- return true;
- } else if ($feedsub->sub_state == 'subscribe') {
- throw new FeedSubException("Feed is awaiting subscription, can't unsub...");
}
}
@@ -435,11 +388,17 @@ class Ostatus_profile extends Memcached_DataObject
{
$feed = $doc->documentElement;
- if ($feed->localName != 'feed' || $feed->namespaceURI != Activity::ATOM) {
- common_log(LOG_ERR, __METHOD__ . ": not an Atom feed, ignoring");
- return;
+ if ($feed->localName == 'feed' && $feed->namespaceURI == Activity::ATOM) {
+ $this->processAtomFeed($feed, $source);
+ } else if ($feed->localName == 'rss') { // @fixme check namespace
+ $this->processRssFeed($feed, $source);
+ } else {
+ throw new Exception("Unknown feed format.");
}
+ }
+ public function processAtomFeed(DOMElement $feed, $source)
+ {
$entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
if ($entries->length == 0) {
common_log(LOG_ERR, __METHOD__ . ": no entries in feed update, ignoring");
@@ -452,6 +411,26 @@ class Ostatus_profile extends Memcached_DataObject
}
}
+ public function processRssFeed(DOMElement $rss, $source)
+ {
+ $channels = $rss->getElementsByTagName('channel');
+
+ if ($channels->length == 0) {
+ throw new Exception("RSS feed without a channel.");
+ } else if ($channels->length > 1) {
+ common_log(LOG_WARNING, __METHOD__ . ": more than one channel in an RSS feed");
+ }
+
+ $channel = $channels->item(0);
+
+ $items = $channel->getElementsByTagName('item');
+
+ for ($i = 0; $i < $items->length; $i++) {
+ $item = $items->item($i);
+ $this->processEntry($item, $channel, $source);
+ }
+ }
+
/**
* Process a posted entry from this feed source.
*
@@ -463,6 +442,17 @@ class Ostatus_profile extends Memcached_DataObject
{
$activity = new Activity($entry, $feed);
+ switch ($activity->object->type) {
+ case ActivityObject::ARTICLE:
+ case ActivityObject::BLOGENTRY:
+ case ActivityObject::NOTE:
+ case ActivityObject::STATUS:
+ case ActivityObject::COMMENT:
+ break;
+ default:
+ throw new ClientException("Can't handle that kind of post.");
+ }
+
if ($activity->verb == ActivityVerb::POST) {
$this->processPost($activity, $source);
} else {
@@ -489,24 +479,27 @@ class Ostatus_profile extends Memcached_DataObject
return false;
}
} else {
- // Individual user feeds may contain only posts from themselves.
- // Authorship is validated against the profile URI on upper layers,
- // through PuSH setup or Salmon signature checks.
- $actorUri = self::getActorProfileURI($activity);
- if ($actorUri == $this->uri) {
- // Check if profile info has changed and update it
- $this->updateFromActivityObject($activity->actor);
+ $actor = $activity->actor;
+
+ if (empty($actor)) {
+ // OK here! assume the default
+ } else if ($actor->id == $this->uri || $actor->link == $this->uri) {
+ $this->updateFromActivityObject($actor);
} else {
- common_log(LOG_WARNING, "OStatus: skipping post with bad author: got $actorUri expected $this->uri");
- return false;
+ throw new Exception("Got an actor '{$actor->title}' ({$actor->id}) on single-user feed for {$this->uri}");
}
+
$oprofile = $this;
}
+ // It's not always an ActivityObject::NOTE, but... let's just say it is.
+
+ $note = $activity->object;
+
// The id URI will be used as a unique identifier for for the notice,
// protecting against duplicate saves. It isn't required to be a URL;
// tag: URIs for instance are found in Google Buzz feeds.
- $sourceUri = $activity->object->id;
+ $sourceUri = $note->id;
$dupe = Notice::staticGet('uri', $sourceUri);
if ($dupe) {
common_log(LOG_INFO, "OStatus: ignoring duplicate post: $sourceUri");
@@ -515,16 +508,30 @@ class Ostatus_profile extends Memcached_DataObject
// We'll also want to save a web link to the original notice, if provided.
$sourceUrl = null;
- if ($activity->object->link) {
- $sourceUrl = $activity->object->link;
+ if ($note->link) {
+ $sourceUrl = $note->link;
} else if ($activity->link) {
$sourceUrl = $activity->link;
- } else if (preg_match('!^https?://!', $activity->object->id)) {
- $sourceUrl = $activity->object->id;
+ } else if (preg_match('!^https?://!', $note->id)) {
+ $sourceUrl = $note->id;
+ }
+
+ // Use summary as fallback for content
+
+ if (!empty($note->content)) {
+ $sourceContent = $note->content;
+ } else if (!empty($note->summary)) {
+ $sourceContent = $note->summary;
+ } else if (!empty($note->title)) {
+ $sourceContent = $note->title;
+ } else {
+ // @fixme fetch from $sourceUrl?
+ throw new ClientException("No content for notice {$sourceUri}");
}
// Get (safe!) HTML and text versions of the content
- $rendered = $this->purify($activity->object->content);
+
+ $rendered = $this->purify($sourceContent);
$content = html_entity_decode(strip_tags($rendered));
$shortened = common_shorten_links($content);
@@ -535,21 +542,29 @@ class Ostatus_profile extends Memcached_DataObject
$attachment = null;
if (Notice::contentTooLong($shortened)) {
- $attachment = $this->saveHTMLFile($activity->object->title, $rendered);
- $summary = $activity->object->summary;
+ $attachment = $this->saveHTMLFile($note->title, $rendered);
+ $summary = html_entity_decode(strip_tags($note->summary));
if (empty($summary)) {
$summary = $content;
}
$shortSummary = common_shorten_links($summary);
if (Notice::contentTooLong($shortSummary)) {
- $url = common_shorten_url(common_local_url('attachment',
- array('attachment' => $attachment->id)));
+ $url = common_shorten_url($sourceUrl);
$shortSummary = substr($shortSummary,
0,
Notice::maxContent() - (mb_strlen($url) + 2));
- $shortSummary .= '… ' . $url;
- $content = $shortSummary;
- $rendered = common_render_text($content);
+ $content = $shortSummary . ' ' . $url;
+
+ // We mark up the attachment link specially for the HTML output
+ // so we can fold-out the full version inline.
+ $attachUrl = common_local_url('attachment',
+ array('attachment' => $attachment->id));
+ $rendered = common_render_text($shortSummary) .
+ '<a href="' . htmlspecialchars($attachUrl) .'"'.
+ ' class="attachment more"' .
+ ' title="'. htmlspecialchars(_m('Show more')) . '">' .
+ '&#8230;' .
+ '</a>';
}
}
@@ -675,13 +690,10 @@ class Ostatus_profile extends Memcached_DataObject
}
// Is the recipient a local group?
- // @fixme we need a uri on user_group
+ // @fixme uri on user_group isn't reliable yet
// $group = User_group::staticGet('uri', $recipient);
- $template = common_local_url('groupbyid', array('id' => '31337'));
- $template = preg_quote($template, '/');
- $template = str_replace('31337', '(\d+)', $template);
- if (preg_match("/$template/", $recipient, $matches)) {
- $id = $matches[1];
+ $id = OStatusPlugin::localGroupFromUrl($recipient);
+ if ($id) {
$group = User_group::staticGet('id', $id);
if ($group) {
// Deliver to all members of this local group if allowed.
@@ -707,22 +719,147 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
+ * Look up and if necessary create an Ostatus_profile for the remote entity
+ * with the given profile page URL. This should never return null -- you
+ * will either get an object or an exception will be thrown.
+ *
* @param string $profile_url
* @return Ostatus_profile
- * @throws FeedSubException
+ * @throws Exception
*/
- public static function ensureProfile($profile_uri, $hints=array())
+
+ public static function ensureProfileURL($profile_url, $hints=array())
{
- // Get the canonical feed URI and check it
+ $oprofile = self::getFromProfileURL($profile_url);
+
+ if (!empty($oprofile)) {
+ return $oprofile;
+ }
+
+ $hints['profileurl'] = $profile_url;
+
+ // Fetch the URL
+ // XXX: HTTP caching
+
+ $client = new HTTPClient();
+ $client->setHeader('Accept', 'text/html,application/xhtml+xml');
+ $response = $client->get($profile_url);
+
+ if (!$response->isOk()) {
+ throw new Exception("Could not reach profile page: " . $profile_url);
+ }
+
+ // Check if we have a non-canonical URL
+
+ $finalUrl = $response->getUrl();
+
+ if ($finalUrl != $profile_url) {
+
+ $hints['profileurl'] = $finalUrl;
+
+ $oprofile = self::getFromProfileURL($finalUrl);
+
+ if (!empty($oprofile)) {
+ return $oprofile;
+ }
+ }
+
+ // Try to get some hCard data
+
+ $body = $response->getBody();
+
+ $hcardHints = DiscoveryHints::hcardHints($body, $finalUrl);
+
+ if (!empty($hcardHints)) {
+ $hints = array_merge($hints, $hcardHints);
+ }
+
+ // Check if they've got an LRDD header
+
+ $lrdd = LinkHeader::getLink($response, 'lrdd', 'application/xrd+xml');
+
+ if (!empty($lrdd)) {
+
+ $xrd = Discovery::fetchXrd($lrdd);
+ $xrdHints = DiscoveryHints::fromXRD($xrd);
+
+ $hints = array_merge($hints, $xrdHints);
+ }
+
+ // If discovery found a feedurl (probably from LRDD), use it.
+
+ if (array_key_exists('feedurl', $hints)) {
+ return self::ensureFeedURL($hints['feedurl'], $hints);
+ }
+
+ // Get the feed URL from HTML
+
$discover = new FeedDiscovery();
- if (isset($hints['feedurl'])) {
- $feeduri = $hints['feedurl'];
- $feeduri = $discover->discoverFromFeedURL($feeduri);
- } else {
- $feeduri = $discover->discoverFromURL($profile_uri);
- $hints['feedurl'] = $feeduri;
+
+ $feedurl = $discover->discoverFromHTML($finalUrl, $body);
+
+ if (!empty($feedurl)) {
+ $hints['feedurl'] = $feedurl;
+ return self::ensureFeedURL($feedurl, $hints);
+ }
+
+ throw new Exception("Could not find a feed URL for profile page " . $finalUrl);
+ }
+
+ /**
+ * Look up the Ostatus_profile, if present, for a remote entity with the
+ * given profile page URL. Will return null for both unknown and invalid
+ * remote profiles.
+ *
+ * @return mixed Ostatus_profile or null
+ * @throws Exception for local profiles
+ */
+ static function getFromProfileURL($profile_url)
+ {
+ $profile = Profile::staticGet('profileurl', $profile_url);
+
+ if (empty($profile)) {
+ return null;
}
+ // Is it a known Ostatus profile?
+
+ $oprofile = Ostatus_profile::staticGet('profile_id', $profile->id);
+
+ if (!empty($oprofile)) {
+ return $oprofile;
+ }
+
+ // Is it a local user?
+
+ $user = User::staticGet('id', $profile->id);
+
+ if (!empty($user)) {
+ throw new Exception("'$profile_url' is the profile for local user '{$user->nickname}'.");
+ }
+
+ // Continue discovery; it's a remote profile
+ // for OMB or some other protocol, may also
+ // support OStatus
+
+ return null;
+ }
+
+ /**
+ * Look up and if necessary create an Ostatus_profile for remote entity
+ * with the given update feed. This should never return null -- you will
+ * either get an object or an exception will be thrown.
+ *
+ * @return Ostatus_profile
+ * @throws Exception
+ */
+ public static function ensureFeedURL($feed_url, $hints=array())
+ {
+ $discover = new FeedDiscovery();
+
+ $feeduri = $discover->discoverFromFeedURL($feed_url);
+ $hints['feedurl'] = $feeduri;
+
$huburi = $discover->getAtomLink('hub');
$hints['hub'] = $huburi;
$salmonuri = $discover->getAtomLink(Salmon::NS_REPLIES);
@@ -733,9 +870,32 @@ class Ostatus_profile extends Memcached_DataObject
throw new FeedSubNoHubException();
}
- // Try to get a profile from the feed activity:subject
+ $feedEl = $discover->root;
- $feedEl = $discover->feed->documentElement;
+ if ($feedEl->tagName == 'feed') {
+ return self::ensureAtomFeed($feedEl, $hints);
+ } else if ($feedEl->tagName == 'channel') {
+ return self::ensureRssChannel($feedEl, $hints);
+ } else {
+ throw new FeedSubBadXmlException($feeduri);
+ }
+ }
+
+ /**
+ * Look up and, if necessary, create an Ostatus_profile for the remote
+ * profile with the given Atom feed - actually loaded from the feed.
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
+ *
+ * @param DOMElement $feedEl root element of a loaded Atom feed
+ * @param array $hints additional discovery information passed from higher levels
+ * @fixme should this be marked public?
+ * @return Ostatus_profile
+ * @throws Exception
+ */
+ public static function ensureAtomFeed($feedEl, $hints)
+ {
+ // Try to get a profile from the feed activity:subject
$subject = ActivityUtils::child($feedEl, Activity::SUBJECT, Activity::SPEC);
@@ -756,7 +916,7 @@ class Ostatus_profile extends Memcached_DataObject
// Sheesh. Not a very nice feed! Let's try fingerpoken in the
// entries.
- $entries = $discover->feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
+ $entries = $feedEl->getElementsByTagNameNS(Activity::ATOM, 'entry');
if (!empty($entries) && $entries->length > 0) {
@@ -784,8 +944,51 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
+ * Look up and, if necessary, create an Ostatus_profile for the remote
+ * profile with the given RSS feed - actually loaded from the feed.
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
*
+ * @param DOMElement $feedEl root element of a loaded RSS feed
+ * @param array $hints additional discovery information passed from higher levels
+ * @fixme should this be marked public?
+ * @return Ostatus_profile
+ * @throws Exception
+ */
+ public static function ensureRssChannel($feedEl, $hints)
+ {
+ // Special-case for Posterous. They have some nice metadata in their
+ // posterous:author elements. We should use them instead of the channel.
+
+ $items = $feedEl->getElementsByTagName('item');
+
+ if ($items->length > 0) {
+ $item = $items->item(0);
+ $authorEl = ActivityUtils::child($item, ActivityObject::AUTHOR, ActivityObject::POSTEROUS);
+ if (!empty($authorEl)) {
+ $obj = ActivityObject::fromPosterousAuthor($authorEl);
+ // Posterous has multiple authors per feed, and multiple feeds
+ // per author. We check if this is the "main" feed for this author.
+ if (array_key_exists('profileurl', $hints) &&
+ !empty($obj->poco) &&
+ common_url_to_nickname($hints['profileurl']) == $obj->poco->preferredUsername) {
+ return self::ensureActivityObjectProfile($obj, $hints);
+ }
+ }
+ }
+
+ // @fixme we should check whether this feed has elements
+ // with different <author> or <dc:creator> elements, and... I dunno.
+ // Do something about that.
+
+ $obj = ActivityObject::fromRssChannel($feedEl);
+
+ return self::ensureActivityObjectProfile($obj, $hints);
+ }
+
+ /**
* Download and update given avatar image
+ *
* @param string $url
* @throws Exception in various failure cases
*/
@@ -795,6 +998,9 @@ class Ostatus_profile extends Memcached_DataObject
// We've already got this one.
return;
}
+ if (!common_valid_http_url($url)) {
+ throw new ServerException(_m("Invalid avatar URL %s"), $url);
+ }
if ($this->isGroup()) {
$self = $this->localGroup();
@@ -912,11 +1118,14 @@ class Ostatus_profile extends Memcached_DataObject
/**
* Fetch, or build if necessary, an Ostatus_profile for the actor
* in a given Activity Streams activity.
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
*
* @param Activity $activity
* @param string $feeduri if we already know the canonical feed URI!
* @param string $salmonuri if we already know the salmon return channel URI
* @return Ostatus_profile
+ * @throws Exception
*/
public static function ensureActorProfile($activity, $hints=array())
@@ -924,6 +1133,18 @@ class Ostatus_profile extends Memcached_DataObject
return self::ensureActivityObjectProfile($activity->actor, $hints);
}
+ /**
+ * Fetch, or build if necessary, an Ostatus_profile for the profile
+ * in a given Activity Streams object (can be subject, actor, or object).
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
+ *
+ * @param ActivityObject $object
+ * @param array $hints additional discovery information passed from higher levels
+ * @return Ostatus_profile
+ * @throws Exception
+ */
+
public static function ensureActivityObjectProfile($object, $hints=array())
{
$profile = self::getActivityObjectProfile($object);
@@ -938,35 +1159,45 @@ class Ostatus_profile extends Memcached_DataObject
/**
* @param Activity $activity
* @return mixed matching Ostatus_profile or false if none known
+ * @throws ServerException if feed info invalid
*/
public static function getActorProfile($activity)
{
return self::getActivityObjectProfile($activity->actor);
}
+ /**
+ * @param ActivityObject $activity
+ * @return mixed matching Ostatus_profile or false if none known
+ * @throws ServerException if feed info invalid
+ */
protected static function getActivityObjectProfile($object)
{
$uri = self::getActivityObjectProfileURI($object);
return Ostatus_profile::staticGet('uri', $uri);
}
- protected static function getActorProfileURI($activity)
- {
- return self::getActivityObjectProfileURI($activity->actor);
- }
-
/**
- * @param Activity $activity
+ * Get the identifier URI for the remote entity described
+ * by this ActivityObject. This URI is *not* guaranteed to be
+ * a resolvable HTTP/HTTPS URL.
+ *
+ * @param ActivityObject $object
* @return string
- * @throws ServerException
+ * @throws ServerException if feed info invalid
*/
protected static function getActivityObjectProfileURI($object)
{
- $opts = array('allowed_schemes' => array('http', 'https'));
- if ($object->id && Validate::uri($object->id, $opts)) {
- return $object->id;
+ if ($object->id) {
+ if (ActivityUtils::validateUri($object->id)) {
+ return $object->id;
+ }
}
- if ($object->link && Validate::uri($object->link, $opts)) {
+
+ // If the id is missing or invalid (we've seen feeds mistakenly listing
+ // things like local usernames in that field) then we'll use the profile
+ // page link, if valid.
+ if ($object->link && common_valid_http_url($object->link)) {
return $object->link;
}
throw new ServerException("No author ID URI found");
@@ -979,6 +1210,8 @@ class Ostatus_profile extends Memcached_DataObject
/**
* Create local ostatus_profile and profile/user_group entries for
* the provided remote user or group.
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
*
* @param ActivityObject $object
* @param array $hints
@@ -992,7 +1225,16 @@ class Ostatus_profile extends Memcached_DataObject
if (!$homeuri) {
common_log(LOG_DEBUG, __METHOD__ . " empty actor profile URI: " . var_export($activity, true));
- throw new ServerException("No profile URI");
+ throw new Exception("No profile URI");
+ }
+
+ $user = User::staticGet('uri', $homeuri);
+ if ($user) {
+ throw new Exception("Local user can't be referenced as remote.");
+ }
+
+ if (OStatusPlugin::localGroupFromUrl($homeuri)) {
+ throw new Exception("Local group can't be referenced as remote.");
}
if (array_key_exists('feedurl', $hints)) {
@@ -1234,9 +1476,19 @@ class Ostatus_profile extends Memcached_DataObject
return $hints['nickname'];
}
- // Try the definitive ID
+ // Try the profile url (like foo.example.com or example.com/user/foo)
+
+ $profileUrl = ($object->link) ? $object->link : $hints['profileurl'];
+
+ if (!empty($profileUrl)) {
+ $nickname = self::nicknameFromURI($profileUrl);
+ }
+
+ // Try the URI (may be a tag:, http:, acct:, ...
- $nickname = self::nicknameFromURI($object->id);
+ if (empty($nickname)) {
+ $nickname = self::nicknameFromURI($object->id);
+ }
// Try a Webfinger if one was passed (way) down
@@ -1277,6 +1529,11 @@ class Ostatus_profile extends Memcached_DataObject
}
/**
+ * Look up, and if necessary create, an Ostatus_profile for the remote
+ * entity with the given webfinger address.
+ * This should never return null -- you will either get an object or
+ * an exception will be thrown.
+ *
* @param string $addr webfinger address
* @return Ostatus_profile
* @throws Exception on error conditions
@@ -1298,7 +1555,7 @@ class Ostatus_profile extends Memcached_DataObject
}
}
- // First, look it up
+ // Try looking it up
$oprofile = Ostatus_profile::staticGet('uri', 'acct:'.$addr);
@@ -1312,7 +1569,7 @@ class Ostatus_profile extends Memcached_DataObject
$disco = new Discovery();
try {
- $result = $disco->lookup($addr);
+ $xrd = $disco->lookup($addr);
} catch (Exception $e) {
// Save negative cache entry so we don't waste time looking it up again.
// @fixme distinguish temporary failures?
@@ -1322,38 +1579,26 @@ class Ostatus_profile extends Memcached_DataObject
$hints = array('webfinger' => $addr);
- foreach ($result->links as $link) {
- switch ($link['rel']) {
- case Discovery::PROFILEPAGE:
- $hints['profileurl'] = $profileUrl = $link['href'];
- break;
- case Salmon::NS_REPLIES:
- $hints['salmon'] = $salmonEndpoint = $link['href'];
- break;
- case Discovery::UPDATESFROM:
- $hints['feedurl'] = $feedUrl = $link['href'];
- break;
- case Discovery::HCARD:
- $hcardUrl = $link['href'];
- break;
- default:
- common_log(LOG_NOTICE, "Don't know what to do with rel = '{$link['rel']}'");
- break;
- }
- }
+ $dhints = DiscoveryHints::fromXRD($xrd);
+
+ $hints = array_merge($hints, $dhints);
+
+ // If there's an Hcard, let's grab its info
- if (isset($hcardUrl)) {
- $hcardHints = self::slurpHcard($hcardUrl);
- // Note: Webfinger > hcard
- $hints = array_merge($hcardHints, $hints);
+ if (array_key_exists('hcard', $hints)) {
+ if (!array_key_exists('profileurl', $hints) ||
+ $hints['hcard'] != $hints['profileurl']) {
+ $hcardHints = DiscoveryHints::fromHcardUrl($hints['hcard']);
+ $hints = array_merge($hcardHints, $hints);
+ }
}
// If we got a feed URL, try that
- if (isset($feedUrl)) {
+ if (array_key_exists('feedurl', $hints)) {
try {
- common_log(LOG_INFO, "Discovery on acct:$addr with feed URL $feedUrl");
- $oprofile = self::ensureProfile($feedUrl, $hints);
+ common_log(LOG_INFO, "Discovery on acct:$addr with feed URL " . $hints['feedurl']);
+ $oprofile = self::ensureFeedURL($hints['feedurl'], $hints);
self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
return $oprofile;
} catch (Exception $e) {
@@ -1364,10 +1609,10 @@ class Ostatus_profile extends Memcached_DataObject
// If we got a profile page, try that!
- if (isset($profileUrl)) {
+ if (array_key_exists('profileurl', $hints)) {
try {
common_log(LOG_INFO, "Discovery on acct:$addr with profile URL $profileUrl");
- $oprofile = self::ensureProfile($profileUrl, $hints);
+ $oprofile = self::ensureProfileURL($hints['profileurl'], $hints);
self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
return $oprofile;
} catch (Exception $e) {
@@ -1379,7 +1624,9 @@ class Ostatus_profile extends Memcached_DataObject
// XXX: try hcard
// XXX: try FOAF
- if (isset($salmonEndpoint)) {
+ if (array_key_exists('salmon', $hints)) {
+
+ $salmonEndpoint = $hints['salmon'];
// An account URL, a salmon endpoint, and a dream? Not much to go
// on, but let's give it a try
@@ -1427,10 +1674,18 @@ class Ostatus_profile extends Memcached_DataObject
throw new Exception("Couldn't find a valid profile for '$addr'");
}
+ /**
+ * Store the full-length scrubbed HTML of a remote notice to an attachment
+ * file on our server. We'll link to this at the end of the cropped version.
+ *
+ * @param string $title plaintext for HTML page's title
+ * @param string $rendered HTML fragment for HTML page's body
+ * @return File
+ */
function saveHTMLFile($title, $rendered)
{
$final = sprintf("<!DOCTYPE html>\n<html><head><title>%s</title></head>".
- '<body><div>%s</div></body></html>',
+ '<body>%s</body></html>',
htmlspecialchars($title),
$rendered);
@@ -1459,67 +1714,4 @@ class Ostatus_profile extends Memcached_DataObject
return $file;
}
-
- protected static function slurpHcard($url)
- {
- set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/plugins/OStatus/extlib/hkit/');
- require_once('hkit.class.php');
-
- $h = new hKit;
-
- // Google Buzz hcards need to be tidied. Probably others too.
-
- $h->tidy_mode = 'proxy'; // 'proxy', 'exec', 'php' or 'none'
-
- // Get by URL
- $hcards = $h->getByURL('hcard', $url);
-
- if (empty($hcards)) {
- return array();
- }
-
- // @fixme more intelligent guess on multi-hcard pages
- $hcard = $hcards[0];
-
- $hints = array();
-
- $hints['profileurl'] = $url;
-
- if (array_key_exists('nickname', $hcard)) {
- $hints['nickname'] = $hcard['nickname'];
- }
-
- if (array_key_exists('fn', $hcard)) {
- $hints['fullname'] = $hcard['fn'];
- } else if (array_key_exists('n', $hcard)) {
- $hints['fullname'] = implode(' ', $hcard['n']);
- }
-
- if (array_key_exists('photo', $hcard)) {
- $hints['avatar'] = $hcard['photo'];
- }
-
- if (array_key_exists('note', $hcard)) {
- $hints['bio'] = $hcard['note'];
- }
-
- if (array_key_exists('adr', $hcard)) {
- if (is_string($hcard['adr'])) {
- $hints['location'] = $hcard['adr'];
- } else if (is_array($hcard['adr'])) {
- $hints['location'] = implode(' ', $hcard['adr']);
- }
- }
-
- if (array_key_exists('url', $hcard)) {
- if (is_string($hcard['url'])) {
- $hints['homepage'] = $hcard['url'];
- } else if (is_array($hcard['url'])) {
- // HACK get the last one; that's how our hcards look
- $hints['homepage'] = $hcard['url'][count($hcard['url'])-1];
- }
- }
-
- return $hints;
- }
}
diff --git a/plugins/OStatus/extlib/Crypt/AES.php b/plugins/OStatus/extlib/Crypt/AES.php
new file mode 100644
index 000000000..68ab4db09
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/AES.php
@@ -0,0 +1,479 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_AES::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link Crypt_AES::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's 136-bits
+ * it'll be null-padded to 160-bits and 160 bits will be the key length until {@link Crypt_Rijndael::setKey() setKey()}
+ * is called, again, at which point, it'll be recalculated.
+ *
+ * Since Crypt_AES extends Crypt_Rijndael, some functions are available to be called that, in the context of AES, don't
+ * make a whole lot of sense. {@link Crypt_AES::setBlockLength() setBlockLength()}, for instance. Calling that function,
+ * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/AES.php');
+ *
+ * $aes = new Crypt_AES();
+ *
+ * $aes->setKey('abcdefghijklmnop');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $aes->decrypt($aes->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_AES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVIII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_Rijndael
+ */
+require_once 'Rijndael.php';
+
+/**#@+
+ * @access public
+ * @see Crypt_AES::encrypt()
+ * @see Crypt_AES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_AES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_AES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_AES_MODE_CBC', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_AES::Crypt_AES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_AES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_AES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of AES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_AES
+ */
+class Crypt_AES extends Crypt_Rijndael {
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC. If not explictly set, CRYPT_AES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_AES
+ * @access public
+ */
+ function Crypt_AES($mode = CRYPT_AES_MODE_CBC)
+ {
+ if ( !defined('CRYPT_AES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt'):
+ // i'd check to see if aes was supported, by doing in_array('des', mcrypt_list_algorithms('')),
+ // but since that can be changed after the object has been created, there doesn't seem to be
+ // a lot of point...
+ define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_AES_MODE ) {
+ case CRYPT_AES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_AES_MODE_ECB:
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_AES_MODE_CTR:
+ // ctr doesn't have a constant associated with it even though it appears to be fairly widely
+ // supported. in lieu of knowing just how widely supported it is, i've, for now, opted not to
+ // include a compatibility layer. the layer has been implemented but, for now, is commented out.
+ $this->mode = 'ctr';
+ //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR;
+ break;
+ case CRYPT_AES_MODE_CBC:
+ default:
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+
+ break;
+ default:
+ switch ($mode) {
+ case CRYPT_AES_MODE_ECB:
+ $this->mode = CRYPT_RIJNDAEL_MODE_ECB;
+ break;
+ case CRYPT_AES_MODE_CTR:
+ $this->mode = CRYPT_RIJNDAEL_MODE_CTR;
+ break;
+ case CRYPT_AES_MODE_CBC:
+ default:
+ $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+ }
+ }
+
+ if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) {
+ parent::Crypt_Rijndael($this->mode);
+ }
+ }
+
+ /**
+ * Dummy function
+ *
+ * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setBlockLength($length)
+ {
+ return;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with up to 16 additional bytes. Other AES implementations may or may not pad in the
+ * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_AES::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+ $this->_mcryptSetup();
+ /*
+ if ($this->mode == CRYPT_AES_MODE_CTR) {
+ $iv = $this->encryptIV;
+ $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($plaintext), $iv));
+ $ciphertext = $plaintext ^ $xor;
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $iv;
+ }
+ return $ciphertext;
+ }
+ */
+
+ if ($this->mode != 'ctr') {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+ }
+
+ return $ciphertext;
+ }
+
+ return parent::encrypt($plaintext);
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is.
+ *
+ * @see Crypt_AES::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
+ $this->_mcryptSetup();
+ /*
+ if ($this->mode == CRYPT_AES_MODE_CTR) {
+ $iv = $this->decryptIV;
+ $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($ciphertext), $iv));
+ $plaintext = $ciphertext ^ $xor;
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $iv;
+ }
+ return $plaintext;
+ }
+ */
+
+ if ($this->mode != 'ctr') {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0));
+ }
+
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+ }
+
+ return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ return parent::decrypt($ciphertext);
+ }
+
+ /**
+ * Setup mcrypt
+ *
+ * Validates all the variables.
+ *
+ * @access private
+ */
+ function _mcryptSetup()
+ {
+ if (!$this->changed) {
+ return;
+ }
+
+ if (!$this->explicit_key_length) {
+ // this just copied from Crypt_Rijndael::_setup()
+ $length = strlen($this->key) >> 2;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+ }
+
+ switch ($this->Nk) {
+ case 4: // 128
+ $this->key_size = 16;
+ break;
+ case 5: // 160
+ case 6: // 192
+ $this->key_size = 24;
+ break;
+ case 7: // 224
+ case 8: // 256
+ $this->key_size = 32;
+ }
+
+ $this->key = substr($this->key, 0, $this->key_size);
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0));
+
+ if (!isset($this->enmcrypt)) {
+ $mode = $this->mode;
+ //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode;
+
+ $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
+ } // else should mcrypt_generic_deinit be called?
+
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
+
+ $this->changed = false;
+ }
+
+ /**
+ * Encrypts a block
+ *
+ * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+ *
+ * @see Crypt_Rijndael::_encryptBlock()
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _encryptBlock($in)
+ {
+ $state = unpack('N*word', $in);
+
+ $Nr = $this->Nr;
+ $w = $this->w;
+ $t0 = $this->t0;
+ $t1 = $this->t1;
+ $t2 = $this->t2;
+ $t3 = $this->t3;
+
+ // addRoundKey and reindex $state
+ $state = array(
+ $state['word1'] ^ $w[0][0],
+ $state['word2'] ^ $w[0][1],
+ $state['word3'] ^ $w[0][2],
+ $state['word4'] ^ $w[0][3]
+ );
+
+ // shiftRows + subWord + mixColumns + addRoundKey
+ // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields
+ // only a marginal improvement. since that also, imho, hinders the readability of the code, i've opted not to do it.
+ for ($round = 1; $round < $this->Nr; $round++) {
+ $state = array(
+ $t0[$state[0] & 0xFF000000] ^ $t1[$state[1] & 0x00FF0000] ^ $t2[$state[2] & 0x0000FF00] ^ $t3[$state[3] & 0x000000FF] ^ $w[$round][0],
+ $t0[$state[1] & 0xFF000000] ^ $t1[$state[2] & 0x00FF0000] ^ $t2[$state[3] & 0x0000FF00] ^ $t3[$state[0] & 0x000000FF] ^ $w[$round][1],
+ $t0[$state[2] & 0xFF000000] ^ $t1[$state[3] & 0x00FF0000] ^ $t2[$state[0] & 0x0000FF00] ^ $t3[$state[1] & 0x000000FF] ^ $w[$round][2],
+ $t0[$state[3] & 0xFF000000] ^ $t1[$state[0] & 0x00FF0000] ^ $t2[$state[1] & 0x0000FF00] ^ $t3[$state[2] & 0x000000FF] ^ $w[$round][3]
+ );
+
+ }
+
+ // subWord
+ $state = array(
+ $this->_subWord($state[0]),
+ $this->_subWord($state[1]),
+ $this->_subWord($state[2]),
+ $this->_subWord($state[3])
+ );
+
+ // shiftRows + addRoundKey
+ $state = array(
+ ($state[0] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[3] & 0x000000FF) ^ $this->w[$this->Nr][0],
+ ($state[1] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[0] & 0x000000FF) ^ $this->w[$this->Nr][1],
+ ($state[2] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[1] & 0x000000FF) ^ $this->w[$this->Nr][2],
+ ($state[3] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[2] & 0x000000FF) ^ $this->w[$this->Nr][3]
+ );
+
+ return pack('N*', $state[0], $state[1], $state[2], $state[3]);
+ }
+
+ /**
+ * Decrypts a block
+ *
+ * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
+ *
+ * @see Crypt_Rijndael::_decryptBlock()
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _decryptBlock($in)
+ {
+ $state = unpack('N*word', $in);
+
+ $Nr = $this->Nr;
+ $dw = $this->dw;
+ $dt0 = $this->dt0;
+ $dt1 = $this->dt1;
+ $dt2 = $this->dt2;
+ $dt3 = $this->dt3;
+
+ // addRoundKey and reindex $state
+ $state = array(
+ $state['word1'] ^ $dw[$this->Nr][0],
+ $state['word2'] ^ $dw[$this->Nr][1],
+ $state['word3'] ^ $dw[$this->Nr][2],
+ $state['word4'] ^ $dw[$this->Nr][3]
+ );
+
+
+ // invShiftRows + invSubBytes + invMixColumns + addRoundKey
+ for ($round = $this->Nr - 1; $round > 0; $round--) {
+ $state = array(
+ $dt0[$state[0] & 0xFF000000] ^ $dt1[$state[3] & 0x00FF0000] ^ $dt2[$state[2] & 0x0000FF00] ^ $dt3[$state[1] & 0x000000FF] ^ $dw[$round][0],
+ $dt0[$state[1] & 0xFF000000] ^ $dt1[$state[0] & 0x00FF0000] ^ $dt2[$state[3] & 0x0000FF00] ^ $dt3[$state[2] & 0x000000FF] ^ $dw[$round][1],
+ $dt0[$state[2] & 0xFF000000] ^ $dt1[$state[1] & 0x00FF0000] ^ $dt2[$state[0] & 0x0000FF00] ^ $dt3[$state[3] & 0x000000FF] ^ $dw[$round][2],
+ $dt0[$state[3] & 0xFF000000] ^ $dt1[$state[2] & 0x00FF0000] ^ $dt2[$state[1] & 0x0000FF00] ^ $dt3[$state[0] & 0x000000FF] ^ $dw[$round][3]
+ );
+ }
+
+ // invShiftRows + invSubWord + addRoundKey
+ $state = array(
+ $this->_invSubWord(($state[0] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[1] & 0x000000FF)) ^ $dw[0][0],
+ $this->_invSubWord(($state[1] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[2] & 0x000000FF)) ^ $dw[0][1],
+ $this->_invSubWord(($state[2] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[3] & 0x000000FF)) ^ $dw[0][2],
+ $this->_invSubWord(($state[3] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[0] & 0x000000FF)) ^ $dw[0][3]
+ );
+
+ return pack('N*', $state[0], $state[1], $state[2], $state[3]);
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/DES.php b/plugins/OStatus/extlib/Crypt/DES.php
new file mode 100644
index 000000000..985ed25b5
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/DES.php
@@ -0,0 +1,945 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://en.wikipedia.org/wiki/DES_supplementary_material Wikipedia: DES supplementary material}
+ * - {@link http://www.itl.nist.gov/fipspubs/fip46-2.htm FIPS 46-2 - (DES), Data Encryption Standard}
+ * - {@link http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html JavaScript DES Example}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/DES.php');
+ *
+ * $des = new Crypt_DES();
+ *
+ * $des->setKey('abcdefgh');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_DES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::_prepareKey()
+ * @see Crypt_DES::_processBlock()
+ */
+/**
+ * Contains array_reverse($keys[CRYPT_DES_DECRYPT])
+ */
+define('CRYPT_DES_ENCRYPT', 0);
+/**
+ * Contains array_reverse($keys[CRYPT_DES_ENCRYPT])
+ */
+define('CRYPT_DES_DECRYPT', 1);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_DES::encrypt()
+ * @see Crypt_DES::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_DES_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_DES_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_DES_MODE_CBC', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_DES::Crypt_DES()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_DES_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_DES_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of DES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_DES
+ */
+class Crypt_DES {
+ /**
+ * The Key Schedule
+ *
+ * @see Crypt_DES::setKey()
+ * @var Array
+ * @access private
+ */
+ var $keys = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_DES::Crypt_DES()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_DES::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_DES::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * Does the (en|de)mcrypt resource need to be (re)initialized?
+ *
+ * @see setKey()
+ * @see setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $changed = true;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_DES
+ * @access public
+ */
+ function Crypt_DES($mode = CRYPT_MODE_DES_CBC)
+ {
+ if ( !defined('CRYPT_DES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt'):
+ // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')),
+ // but since that can be changed after the object has been created, there doesn't seem to be
+ // a lot of point...
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_DES_MODE ) {
+ case CRYPT_DES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $this->mode = 'ctr';
+ //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR;
+ break;
+ case CRYPT_DES_MODE_CBC:
+ default:
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+
+ break;
+ default:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ case CRYPT_DES_MODE_CTR:
+ case CRYPT_DES_MODE_CBC:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->mode = CRYPT_DES_MODE_CBC;
+ }
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
+ * only use the first eight, if $key has more then eight characters in it, and pad $key with the
+ * null byte if it is less then eight characters long.
+ *
+ * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all zero's.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? substr($key, 0, 8) : $this->_prepareKey($key);
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+ $this->changed = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_DES::decrypt()
+ * @see Crypt_DES::encrypt()
+ * @access public
+ * @param Integer $length
+ * @param String $iv
+ */
+ function _generate_xor($length, &$iv)
+ {
+ $xor = '';
+ $num_blocks = ($length + 7) >> 3;
+ for ($i = 0; $i < $num_blocks; $i++) {
+ $xor.= $iv;
+ for ($j = 4; $j <= 8; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with up to 8 additional bytes. Other DES implementations may or may not pad in the
+ * same manner. Other common approaches to padding and the reasons why it's necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_DES::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->changed) {
+ if (!isset($this->enmcrypt)) {
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+ }
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+ $this->changed = false;
+ }
+
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
+ }
+
+ return $ciphertext;
+ }
+
+ if (!is_array($this->keys)) {
+ $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+ }
+
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT);
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT);
+ $ciphertext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is.
+ *
+ * @see Crypt_DES::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->changed) {
+ if (!isset($this->demcrypt)) {
+ $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
+ }
+ mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+ $this->changed = false;
+ }
+
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
+ }
+
+ return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ if (!is_array($this->keys)) {
+ $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
+ }
+
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT);
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor;
+ $xor = $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT);
+ $plaintext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ }
+
+ return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $des->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_DES::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_DES::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not
+ * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_DES::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_DES::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+ * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_DES::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if (($length & 7) == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
+ $this->padding = true;
+ }
+ }
+
+ $pad = 8 - ($length & 7);
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_DES::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > 8) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+
+ /**
+ * Encrypts or decrypts a 64-bit block
+ *
+ * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT. See
+ * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
+ * idea of what this function does.
+ *
+ * @access private
+ * @param String $block
+ * @param Integer $mode
+ * @return String
+ */
+ function _processBlock($block, $mode)
+ {
+ // s-boxes. in the official DES docs, they're described as being matrices that
+ // one accesses by using the first and last bits to determine the row and the
+ // middle four bits to determine the column. in this implementation, they've
+ // been converted to vectors
+ static $sbox = array(
+ array(
+ 14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1,
+ 3, 10 ,10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8,
+ 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7,
+ 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13
+ ),
+ array(
+ 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14,
+ 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5,
+ 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2,
+ 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9
+ ),
+ array(
+ 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10,
+ 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1,
+ 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7,
+ 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12
+ ),
+ array(
+ 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3,
+ 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9,
+ 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8,
+ 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14
+ ),
+ array(
+ 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1,
+ 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6,
+ 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13,
+ 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3
+ ),
+ array(
+ 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5,
+ 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8,
+ 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10,
+ 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13
+ ),
+ array(
+ 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10,
+ 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6,
+ 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7,
+ 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12
+ ),
+ array(
+ 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4,
+ 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2,
+ 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13,
+ 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11
+ )
+ );
+
+ $keys = $this->keys;
+
+ $temp = unpack('Na/Nb', $block);
+ $block = array($temp['a'], $temp['b']);
+
+ // because php does arithmetic right shifts, if the most significant bits are set, right
+ // shifting those into the correct position will add 1's - not 0's. this will intefere
+ // with the | operation unless a second & is done. so we isolate these bits and left shift
+ // them into place. we then & each block with 0x7FFFFFFF to prevennt 1's from being added
+ // for any other shifts.
+ $msb = array(
+ ($block[0] >> 31) & 1,
+ ($block[1] >> 31) & 1
+ );
+ $block[0] &= 0x7FFFFFFF;
+ $block[1] &= 0x7FFFFFFF;
+
+ // we isolate the appropriate bit in the appropriate integer and shift as appropriate. in
+ // some cases, there are going to be multiple bits in the same integer that need to be shifted
+ // in the same way. we combine those into one shift operation.
+ $block = array(
+ (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) |
+ (($block[1] & 0x00400001) << 7) | (($block[1] & 0x40000100) >> 2) |
+ (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) |
+ (($block[0] & 0x00400001) << 3) | (($block[0] & 0x40000100) >> 6) |
+ (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) |
+ (($block[1] & 0x00100000) << 1) | (($block[1] & 0x10000000) >> 8) |
+ (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) << 6) |
+ (($block[0] & 0x00100000) >> 3) | (($block[0] & 0x10000000) >> 12) |
+ (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) << 4) |
+ (($block[1] & 0x00040000) >> 5) | (($block[1] & 0x04000000) >> 14) |
+ (($block[0] & 0x00000004) << 9) | ( $block[0] & 0x00000400 ) |
+ (($block[0] & 0x00040000) >> 9) | (($block[0] & 0x04000000) >> 18) |
+ (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) |
+ (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24)
+ ,
+ (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) |
+ (($block[1] & 0x00800002) << 6) | (($block[0] & 0x00000080) << 20) |
+ (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) << 2) |
+ (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) << 9) |
+ ( $block[1] & 0x00200000 ) | (($block[1] & 0x20000000) >> 9) |
+ (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) << 5) |
+ (($block[0] & 0x00200000) >> 4) | (($block[0] & 0x20000000) >> 13) |
+ (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) << 3) |
+ (($block[1] & 0x00080000) >> 6) | (($block[1] & 0x08000000) >> 15) |
+ (($block[0] & 0x00000008) << 8) | (($block[0] & 0x00000800) >> 1) |
+ (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) |
+ (($block[1] & 0x00000200) >> 3) | (($block[0] & 0x00000200) >> 7) |
+ (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) |
+ (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) |
+ ($msb[1] << 28) | ($msb[0] << 24)
+ );
+
+ for ($i = 0; $i < 16; $i++) {
+ // start of "the Feistel (F) function" - see the following URL:
+ // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
+ $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28)
+ | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24)
+ | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20)
+ | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16)
+ | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12)
+ | (($sbox[5][(($block[1] & 0x00001F80) >> 7) ^ $keys[$mode][$i][5]]) << 8)
+ | (($sbox[6][(($block[1] & 0x000001F8) >> 3) ^ $keys[$mode][$i][6]]) << 4)
+ | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]);
+
+ $msb = ($temp >> 31) & 1;
+ $temp &= 0x7FFFFFFF;
+ $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) << 5)
+ | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10)
+ | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) << 6)
+ | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) << 9)
+ | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27)
+ | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >> 8)
+ | (($temp & 0x00004000) << 4) | (($temp & 0x00000002) << 16)
+ | (($temp & 0x00442000) >> 6) | (($temp & 0x40800000) >> 15)
+ | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20)
+ | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) << 3)
+ | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >> 7)
+ | (($temp & 0x00200000) >> 19) | ($msb << 23);
+ // end of "the Feistel (F) function" - $newBlock is F's output
+
+ $temp = $block[1];
+ $block[1] = $block[0] ^ $newBlock;
+ $block[0] = $temp;
+ }
+
+ $msb = array(
+ ($block[0] >> 31) & 1,
+ ($block[1] >> 31) & 1
+ );
+ $block[0] &= 0x7FFFFFFF;
+ $block[1] &= 0x7FFFFFFF;
+
+ $block = array(
+ (($block[0] & 0x01000004) << 7) | (($block[1] & 0x01000004) << 6) |
+ (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) |
+ (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) |
+ (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) |
+ (($block[0] & 0x02000008) >> 2) | (($block[1] & 0x02000008) >> 3) |
+ (($block[0] & 0x00020000) << 4) | (($block[1] & 0x00020000) << 3) |
+ (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) << 9) |
+ (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) |
+ (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) |
+ (($block[0] & 0x00040000) >> 5) | (($block[1] & 0x00040000) >> 6) |
+ (($block[0] & 0x00000400) << 1) | ( $block[1] & 0x00000400 ) |
+ (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) |
+ (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) |
+ (($block[0] & 0x00000800) >> 8) | (($block[1] & 0x00000800) >> 9)
+ ,
+ (($block[0] & 0x10000040) << 3) | (($block[1] & 0x10000040) << 2) |
+ (($block[0] & 0x00100000) << 9) | (($block[1] & 0x00100000) << 8) |
+ (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) |
+ (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) |
+ (($block[0] & 0x20000080) >> 6) | (($block[1] & 0x20000080) >> 7) |
+ ( $block[0] & 0x00200000 ) | (($block[1] & 0x00200000) >> 1) |
+ (($block[0] & 0x00002000) << 6) | (($block[1] & 0x00002000) << 5) |
+ (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) |
+ (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) |
+ (($block[0] & 0x00400000) >> 9) | (($block[1] & 0x00400000) >> 10) |
+ (($block[0] & 0x00004000) >> 3) | (($block[1] & 0x00004000) >> 4) |
+ (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) |
+ (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) |
+ ($msb[0] << 7) | ($msb[1] << 6)
+ );
+
+ return pack('NN', $block[0], $block[1]);
+ }
+
+ /**
+ * Creates the key schedule.
+ *
+ * @access private
+ * @param String $key
+ * @return Array
+ */
+ function _prepareKey($key)
+ {
+ static $shifts = array( // number of key bits shifted per round
+ 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+ );
+
+ // pad the key and remove extra characters as appropriate.
+ $key = str_pad(substr($key, 0, 8), 8, chr(0));
+
+ $temp = unpack('Na/Nb', $key);
+ $key = array($temp['a'], $temp['b']);
+ $msb = array(
+ ($key[0] >> 31) & 1,
+ ($key[1] >> 31) & 1
+ );
+ $key[0] &= 0x7FFFFFFF;
+ $key[1] &= 0x7FFFFFFF;
+
+ $key = array(
+ (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) |
+ (($key[1] & 0x00020408) << 8) | (($key[1] & 0x02040800) >> 1) |
+ (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) |
+ (($key[0] & 0x00020408) << 4) | (($key[0] & 0x02040800) >> 5) |
+ (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) |
+ (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) |
+ (($key[0] & 0x00000010) >> 1) | (($key[0] & 0x00001000) >> 10) |
+ (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28)
+ ,
+ (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) |
+ (($key[1] & 0x00800000) << 2) | (($key[0] & 0x00000080) << 16) |
+ (($key[0] & 0x00008000) << 7) | (($key[0] & 0x00800000) >> 2) |
+ (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) << 4) |
+ (($key[1] & 0x00400000) >> 5) | (($key[1] & 0x40000000) >> 14) |
+ (($key[0] & 0x00000040) << 9) | ( $key[0] & 0x00004000 ) |
+ (($key[0] & 0x00400000) >> 9) | (($key[0] & 0x40000000) >> 18) |
+ (($key[1] & 0x00000020) << 6) | (($key[1] & 0x00002000) >> 3) |
+ (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) |
+ (($key[0] & 0x00000020) << 2) | (($key[0] & 0x00002000) >> 7) |
+ (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) |
+ (($key[1] & 0x00000010) >> 1) | (($key[1] & 0x00001000) >> 10) |
+ (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) |
+ ($msb[1] << 24) | ($msb[0] << 20)
+ );
+
+ $keys = array();
+ for ($i = 0; $i < 16; $i++) {
+ $key[0] <<= $shifts[$i];
+ $temp = ($key[0] & 0xF0000000) >> 28;
+ $key[0] = ($key[0] | $temp) & 0x0FFFFFFF;
+
+ $key[1] <<= $shifts[$i];
+ $temp = ($key[1] & 0xF0000000) >> 28;
+ $key[1] = ($key[1] | $temp) & 0x0FFFFFFF;
+
+ $temp = array(
+ (($key[1] & 0x00004000) >> 9) | (($key[1] & 0x00000800) >> 7) |
+ (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >> 2) |
+ (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23)
+ ,
+ (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) << 4) |
+ (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) |
+ (($key[1] & 0x00000080) >> 6)
+ ,
+ ( $key[1] & 0x00000020 ) | (($key[1] & 0x00000200) >> 5) |
+ (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) |
+ (($key[1] & 0x00000004) >> 1) | (($key[1] & 0x00100000) >> 20)
+ ,
+ (($key[1] & 0x00001000) >> 7) | (($key[1] & 0x00200000) >> 17) |
+ (($key[1] & 0x00000002) << 2) | (($key[1] & 0x00000100) >> 6) |
+ (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26)
+ ,
+ (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010 ) |
+ (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) |
+ (($key[0] & 0x00000200) >> 8) | (($key[0] & 0x00000002) >> 1)
+ ,
+ (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) |
+ (($key[0] & 0x00000020) >> 2) | (($key[0] & 0x00000800) >> 9) |
+ (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >> 8)
+ ,
+ (($key[0] & 0x00001000) >> 7) | (($key[0] & 0x00000088) >> 3) |
+ (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) << 2) |
+ (($key[0] & 0x00400000) >> 21)
+ ,
+ (($key[0] & 0x00000400) >> 5) | (($key[0] & 0x00004000) >> 10) |
+ (($key[0] & 0x00000040) >> 3) | (($key[0] & 0x00100000) >> 18) |
+ (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24)
+ );
+
+ $keys[] = $temp;
+ }
+
+ $temp = array(
+ CRYPT_DES_ENCRYPT => $keys,
+ CRYPT_DES_DECRYPT => array_reverse($keys)
+ );
+
+ return $temp;
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/Hash.php b/plugins/OStatus/extlib/Crypt/Hash.php
new file mode 100644
index 000000000..e4dfde331
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/Hash.php
@@ -0,0 +1,816 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * Uses hash() or mhash() if available and an internal implementation, otherwise. Currently supports the following:
+ *
+ * md2, md5, md5-96, sha1, sha1-96, sha256, sha384, and sha512
+ *
+ * If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
+ * the hash. If no valid algorithm is provided, sha1 will be used.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal The variable names are the same as those in
+ * {@link http://tools.ietf.org/html/rfc2104#section-2 RFC2104}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Hash.php');
+ *
+ * $hash = new Crypt_Hash('sha1');
+ *
+ * $hash->setKey('abcdefg');
+ *
+ * echo base64_encode($hash->hash('abcdefg'));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_Hash
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_Hash::Crypt_Hash()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_HASH_MODE_INTERNAL', 1);
+/**
+ * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
+ */
+define('CRYPT_HASH_MODE_MHASH', 2);
+/**
+ * Toggles the hash() implementation, which works on PHP 5.1.2+.
+ */
+define('CRYPT_HASH_MODE_HASH', 3);
+/**#@-*/
+
+/**
+ * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_Hash
+ */
+class Crypt_Hash {
+ /**
+ * Byte-length of compression blocks / key (Internal HMAC)
+ *
+ * @see Crypt_Hash::setAlgorithm()
+ * @var Integer
+ * @access private
+ */
+ var $b;
+
+ /**
+ * Byte-length of hash output (Internal HMAC)
+ *
+ * @see Crypt_Hash::setHash()
+ * @var Integer
+ * @access private
+ */
+ var $l = false;
+
+ /**
+ * Hash Algorithm
+ *
+ * @see Crypt_Hash::setHash()
+ * @var String
+ * @access private
+ */
+ var $hash;
+
+ /**
+ * Key
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = '';
+
+ /**
+ * Outer XOR (Internal HMAC)
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $opad;
+
+ /**
+ * Inner XOR (Internal HMAC)
+ *
+ * @see Crypt_Hash::setKey()
+ * @var String
+ * @access private
+ */
+ var $ipad;
+
+ /**
+ * Default Constructor.
+ *
+ * @param optional String $hash
+ * @return Crypt_Hash
+ * @access public
+ */
+ function Crypt_Hash($hash = 'sha1')
+ {
+ if ( !defined('CRYPT_HASH_MODE') ) {
+ switch (true) {
+ case extension_loaded('hash'):
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH);
+ break;
+ case extension_loaded('mhash'):
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH);
+ break;
+ default:
+ define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL);
+ }
+ }
+
+ $this->setHash($hash);
+ }
+
+ /**
+ * Sets the key for HMACs
+ *
+ * Keys can be of any length.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->key = $key;
+ }
+
+ /**
+ * Sets the hash function.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setHash($hash)
+ {
+ switch ($hash) {
+ case 'md5-96':
+ case 'sha1-96':
+ $this->l = 12; // 96 / 8 = 12
+ break;
+ case 'md2':
+ case 'md5':
+ $this->l = 16;
+ break;
+ case 'sha1':
+ $this->l = 20;
+ break;
+ case 'sha256':
+ $this->l = 32;
+ break;
+ case 'sha384':
+ $this->l = 48;
+ break;
+ case 'sha512':
+ $this->l = 64;
+ }
+
+ switch ($hash) {
+ case 'md2':
+ $mode = CRYPT_HASH_MODE_INTERNAL;
+ break;
+ case 'sha384':
+ case 'sha512':
+ $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+ break;
+ default:
+ $mode = CRYPT_HASH_MODE;
+ }
+
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ switch ($hash) {
+ case 'md5':
+ case 'md5-96':
+ $this->hash = MHASH_MD5;
+ break;
+ case 'sha256':
+ $this->hash = MHASH_SHA256;
+ break;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->hash = MHASH_SHA1;
+ }
+ return;
+ case CRYPT_HASH_MODE_HASH:
+ switch ($hash) {
+ case 'md5':
+ case 'md5-96':
+ $this->hash = 'md5';
+ return;
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->hash = $hash;
+ return;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->hash = 'sha1';
+ }
+ return;
+ }
+
+ switch ($hash) {
+ case 'md2':
+ $this->b = 16;
+ $this->hash = array($this, '_md2');
+ break;
+ case 'md5':
+ case 'md5-96':
+ $this->b = 64;
+ $this->hash = array($this, '_md5');
+ break;
+ case 'sha256':
+ $this->b = 64;
+ $this->hash = array($this, '_sha256');
+ break;
+ case 'sha384':
+ case 'sha512':
+ $this->b = 128;
+ $this->hash = array($this, '_sha512');
+ break;
+ case 'sha1':
+ case 'sha1-96':
+ default:
+ $this->b = 64;
+ $this->hash = array($this, '_sha1');
+ }
+
+ $this->ipad = str_repeat(chr(0x36), $this->b);
+ $this->opad = str_repeat(chr(0x5C), $this->b);
+ }
+
+ /**
+ * Compute the HMAC.
+ *
+ * @access public
+ * @param String $text
+ * @return String
+ */
+ function hash($text)
+ {
+ $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+
+ if (!empty($this->key)) {
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ $output = mhash($this->hash, $text, $this->key);
+ break;
+ case CRYPT_HASH_MODE_HASH:
+ $output = hash_hmac($this->hash, $text, $this->key, true);
+ break;
+ case CRYPT_HASH_MODE_INTERNAL:
+ /* "Applications that use keys longer than B bytes will first hash the key using H and then use the
+ resultant L byte string as the actual key to HMAC."
+
+ -- http://tools.ietf.org/html/rfc2104#section-2 */
+ $key = strlen($this->key) > $this->b ? call_user_func($this->$hash, $this->key) : $this->key;
+
+ $key = str_pad($key, $this->b, chr(0)); // step 1
+ $temp = $this->ipad ^ $key; // step 2
+ $temp .= $text; // step 3
+ $temp = call_user_func($this->hash, $temp); // step 4
+ $output = $this->opad ^ $key; // step 5
+ $output.= $temp; // step 6
+ $output = call_user_func($this->hash, $output); // step 7
+ }
+ } else {
+ switch ( $mode ) {
+ case CRYPT_HASH_MODE_MHASH:
+ $output = mhash($this->hash, $text);
+ break;
+ case CRYPT_HASH_MODE_HASH:
+ $output = hash($this->hash, $text, true);
+ break;
+ case CRYPT_HASH_MODE_INTERNAL:
+ $output = call_user_func($this->hash, $text);
+ }
+ }
+
+ return substr($output, 0, $this->l);
+ }
+
+ /**
+ * Returns the hash length (in bytes)
+ *
+ * @access private
+ * @return Integer
+ */
+ function getLength()
+ {
+ return $this->l;
+ }
+
+ /**
+ * Wrapper for MD5
+ *
+ * @access private
+ * @param String $text
+ */
+ function _md5($m)
+ {
+ return pack('H*', md5($m));
+ }
+
+ /**
+ * Wrapper for SHA1
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha1($m)
+ {
+ return pack('H*', sha1($m));
+ }
+
+ /**
+ * Pure-PHP implementation of MD2
+ *
+ * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}.
+ *
+ * @access private
+ * @param String $text
+ */
+ function _md2($m)
+ {
+ static $s = array(
+ 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6,
+ 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188,
+ 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24,
+ 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251,
+ 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63,
+ 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50,
+ 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165,
+ 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210,
+ 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157,
+ 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27,
+ 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15,
+ 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197,
+ 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65,
+ 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123,
+ 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233,
+ 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228,
+ 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237,
+ 31, 26, 219, 153, 141, 51, 159, 17, 131, 20
+ );
+
+ // Step 1. Append Padding Bytes
+ $pad = 16 - (strlen($m) & 0xF);
+ $m.= str_repeat(chr($pad), $pad);
+
+ $length = strlen($m);
+
+ // Step 2. Append Checksum
+ $c = str_repeat(chr(0), 16);
+ $l = chr(0);
+ for ($i = 0; $i < $length; $i+= 16) {
+ for ($j = 0; $j < 16; $j++) {
+ $c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
+ $l = $c[$j];
+ }
+ }
+ $m.= $c;
+
+ $length+= 16;
+
+ // Step 3. Initialize MD Buffer
+ $x = str_repeat(chr(0), 48);
+
+ // Step 4. Process Message in 16-Byte Blocks
+ for ($i = 0; $i < $length; $i+= 16) {
+ for ($j = 0; $j < 16; $j++) {
+ $x[$j + 16] = $m[$i + $j];
+ $x[$j + 32] = $x[$j + 16] ^ $x[$j];
+ }
+ $t = chr(0);
+ for ($j = 0; $j < 18; $j++) {
+ for ($k = 0; $k < 48; $k++) {
+ $x[$k] = $t = $x[$k] ^ chr($s[ord($t)]);
+ //$t = $x[$k] = $x[$k] ^ chr($s[ord($t)]);
+ }
+ $t = chr(ord($t) + $j);
+ }
+ }
+
+ // Step 5. Output
+ return substr($x, 0, 16);
+ }
+
+ /**
+ * Pure-PHP implementation of SHA256
+ *
+ * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}.
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha256($m)
+ {
+ if (extension_loaded('suhosin')) {
+ return pack('H*', sha256($m));
+ }
+
+ // Initialize variables
+ $hash = array(
+ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
+ );
+ // Initialize table of round constants
+ // (first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)
+ static $k = array(
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
+ );
+
+ // Pre-processing
+ $length = strlen($m);
+ // to round to nearest 56 mod 64, we'll add 64 - (length + (64 - 56)) % 64
+ $m.= str_repeat(chr(0), 64 - (($length + 8) & 0x3F));
+ $m[$length] = chr(0x80);
+ // we don't support hashing strings 512MB long
+ $m.= pack('N2', 0, $length << 3);
+
+ // Process the message in successive 512-bit chunks
+ $chunks = str_split($m, 64);
+ foreach ($chunks as $chunk) {
+ $w = array();
+ for ($i = 0; $i < 16; $i++) {
+ extract(unpack('Ntemp', $this->_string_shift($chunk, 4)));
+ $w[] = $temp;
+ }
+
+ // Extend the sixteen 32-bit words into sixty-four 32-bit words
+ for ($i = 16; $i < 64; $i++) {
+ $s0 = $this->_rightRotate($w[$i - 15], 7) ^
+ $this->_rightRotate($w[$i - 15], 18) ^
+ $this->_rightShift( $w[$i - 15], 3);
+ $s1 = $this->_rightRotate($w[$i - 2], 17) ^
+ $this->_rightRotate($w[$i - 2], 19) ^
+ $this->_rightShift( $w[$i - 2], 10);
+ $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1);
+
+ }
+
+ // Initialize hash value for this chunk
+ list($a, $b, $c, $d, $e, $f, $g, $h) = $hash;
+
+ // Main loop
+ for ($i = 0; $i < 64; $i++) {
+ $s0 = $this->_rightRotate($a, 2) ^
+ $this->_rightRotate($a, 13) ^
+ $this->_rightRotate($a, 22);
+ $maj = ($a & $b) ^
+ ($a & $c) ^
+ ($b & $c);
+ $t2 = $this->_add($s0, $maj);
+
+ $s1 = $this->_rightRotate($e, 6) ^
+ $this->_rightRotate($e, 11) ^
+ $this->_rightRotate($e, 25);
+ $ch = ($e & $f) ^
+ ($this->_not($e) & $g);
+ $t1 = $this->_add($h, $s1, $ch, $k[$i], $w[$i]);
+
+ $h = $g;
+ $g = $f;
+ $f = $e;
+ $e = $this->_add($d, $t1);
+ $d = $c;
+ $c = $b;
+ $b = $a;
+ $a = $this->_add($t1, $t2);
+ }
+
+ // Add this chunk's hash to result so far
+ $hash = array(
+ $this->_add($hash[0], $a),
+ $this->_add($hash[1], $b),
+ $this->_add($hash[2], $c),
+ $this->_add($hash[3], $d),
+ $this->_add($hash[4], $e),
+ $this->_add($hash[5], $f),
+ $this->_add($hash[6], $g),
+ $this->_add($hash[7], $h)
+ );
+ }
+
+ // Produce the final hash value (big-endian)
+ return pack('N8', $hash[0], $hash[1], $hash[2], $hash[3], $hash[4], $hash[5], $hash[6], $hash[7]);
+ }
+
+ /**
+ * Pure-PHP implementation of SHA384 and SHA512
+ *
+ * @access private
+ * @param String $text
+ */
+ function _sha512($m)
+ {
+ if (!class_exists('Math_BigInteger')) {
+ require_once('Math/BigInteger.php');
+ }
+
+ static $init384, $init512, $k;
+
+ if (!isset($k)) {
+ // Initialize variables
+ $init384 = array( // initial values for SHA384
+ 'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939',
+ '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4'
+ );
+ $init512 = array( // initial values for SHA512
+ '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1',
+ '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179'
+ );
+
+ for ($i = 0; $i < 8; $i++) {
+ $init384[$i] = new Math_BigInteger($init384[$i], 16);
+ $init384[$i]->setPrecision(64);
+ $init512[$i] = new Math_BigInteger($init512[$i], 16);
+ $init512[$i]->setPrecision(64);
+ }
+
+ // Initialize table of round constants
+ // (first 64 bits of the fractional parts of the cube roots of the first 80 primes 2..409)
+ $k = array(
+ '428a2f98d728ae22', '7137449123ef65cd', 'b5c0fbcfec4d3b2f', 'e9b5dba58189dbbc',
+ '3956c25bf348b538', '59f111f1b605d019', '923f82a4af194f9b', 'ab1c5ed5da6d8118',
+ 'd807aa98a3030242', '12835b0145706fbe', '243185be4ee4b28c', '550c7dc3d5ffb4e2',
+ '72be5d74f27b896f', '80deb1fe3b1696b1', '9bdc06a725c71235', 'c19bf174cf692694',
+ 'e49b69c19ef14ad2', 'efbe4786384f25e3', '0fc19dc68b8cd5b5', '240ca1cc77ac9c65',
+ '2de92c6f592b0275', '4a7484aa6ea6e483', '5cb0a9dcbd41fbd4', '76f988da831153b5',
+ '983e5152ee66dfab', 'a831c66d2db43210', 'b00327c898fb213f', 'bf597fc7beef0ee4',
+ 'c6e00bf33da88fc2', 'd5a79147930aa725', '06ca6351e003826f', '142929670a0e6e70',
+ '27b70a8546d22ffc', '2e1b21385c26c926', '4d2c6dfc5ac42aed', '53380d139d95b3df',
+ '650a73548baf63de', '766a0abb3c77b2a8', '81c2c92e47edaee6', '92722c851482353b',
+ 'a2bfe8a14cf10364', 'a81a664bbc423001', 'c24b8b70d0f89791', 'c76c51a30654be30',
+ 'd192e819d6ef5218', 'd69906245565a910', 'f40e35855771202a', '106aa07032bbd1b8',
+ '19a4c116b8d2d0c8', '1e376c085141ab53', '2748774cdf8eeb99', '34b0bcb5e19b48a8',
+ '391c0cb3c5c95a63', '4ed8aa4ae3418acb', '5b9cca4f7763e373', '682e6ff3d6b2b8a3',
+ '748f82ee5defb2fc', '78a5636f43172f60', '84c87814a1f0ab72', '8cc702081a6439ec',
+ '90befffa23631e28', 'a4506cebde82bde9', 'bef9a3f7b2c67915', 'c67178f2e372532b',
+ 'ca273eceea26619c', 'd186b8c721c0c207', 'eada7dd6cde0eb1e', 'f57d4f7fee6ed178',
+ '06f067aa72176fba', '0a637dc5a2c898a6', '113f9804bef90dae', '1b710b35131c471b',
+ '28db77f523047d84', '32caab7b40c72493', '3c9ebe0a15c9bebc', '431d67c49c100d4c',
+ '4cc5d4becb3e42b6', '597f299cfc657e2a', '5fcb6fab3ad6faec', '6c44198c4a475817'
+ );
+
+ for ($i = 0; $i < 80; $i++) {
+ $k[$i] = new Math_BigInteger($k[$i], 16);
+ }
+ }
+
+ $hash = $this->l == 48 ? $init384 : $init512;
+
+ // Pre-processing
+ $length = strlen($m);
+ // to round to nearest 112 mod 128, we'll add 128 - (length + (128 - 112)) % 128
+ $m.= str_repeat(chr(0), 128 - (($length + 16) & 0x7F));
+ $m[$length] = chr(0x80);
+ // we don't support hashing strings 512MB long
+ $m.= pack('N4', 0, 0, 0, $length << 3);
+
+ // Process the message in successive 1024-bit chunks
+ $chunks = str_split($m, 128);
+ foreach ($chunks as $chunk) {
+ $w = array();
+ for ($i = 0; $i < 16; $i++) {
+ $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256);
+ $temp->setPrecision(64);
+ $w[] = $temp;
+ }
+
+ // Extend the sixteen 32-bit words into eighty 32-bit words
+ for ($i = 16; $i < 80; $i++) {
+ $temp = array(
+ $w[$i - 15]->bitwise_rightRotate(1),
+ $w[$i - 15]->bitwise_rightRotate(8),
+ $w[$i - 15]->bitwise_rightShift(7)
+ );
+ $s0 = $temp[0]->bitwise_xor($temp[1]);
+ $s0 = $s0->bitwise_xor($temp[2]);
+ $temp = array(
+ $w[$i - 2]->bitwise_rightRotate(19),
+ $w[$i - 2]->bitwise_rightRotate(61),
+ $w[$i - 2]->bitwise_rightShift(6)
+ );
+ $s1 = $temp[0]->bitwise_xor($temp[1]);
+ $s1 = $s1->bitwise_xor($temp[2]);
+ $w[$i] = $w[$i - 16]->copy();
+ $w[$i] = $w[$i]->add($s0);
+ $w[$i] = $w[$i]->add($w[$i - 7]);
+ $w[$i] = $w[$i]->add($s1);
+ }
+
+ // Initialize hash value for this chunk
+ $a = $hash[0]->copy();
+ $b = $hash[1]->copy();
+ $c = $hash[2]->copy();
+ $d = $hash[3]->copy();
+ $e = $hash[4]->copy();
+ $f = $hash[5]->copy();
+ $g = $hash[6]->copy();
+ $h = $hash[7]->copy();
+
+ // Main loop
+ for ($i = 0; $i < 80; $i++) {
+ $temp = array(
+ $a->bitwise_rightRotate(28),
+ $a->bitwise_rightRotate(34),
+ $a->bitwise_rightRotate(39)
+ );
+ $s0 = $temp[0]->bitwise_xor($temp[1]);
+ $s0 = $s0->bitwise_xor($temp[2]);
+ $temp = array(
+ $a->bitwise_and($b),
+ $a->bitwise_and($c),
+ $b->bitwise_and($c)
+ );
+ $maj = $temp[0]->bitwise_xor($temp[1]);
+ $maj = $maj->bitwise_xor($temp[2]);
+ $t2 = $s0->add($maj);
+
+ $temp = array(
+ $e->bitwise_rightRotate(14),
+ $e->bitwise_rightRotate(18),
+ $e->bitwise_rightRotate(41)
+ );
+ $s1 = $temp[0]->bitwise_xor($temp[1]);
+ $s1 = $s1->bitwise_xor($temp[2]);
+ $temp = array(
+ $e->bitwise_and($f),
+ $g->bitwise_and($e->bitwise_not())
+ );
+ $ch = $temp[0]->bitwise_xor($temp[1]);
+ $t1 = $h->add($s1);
+ $t1 = $t1->add($ch);
+ $t1 = $t1->add($k[$i]);
+ $t1 = $t1->add($w[$i]);
+
+ $h = $g->copy();
+ $g = $f->copy();
+ $f = $e->copy();
+ $e = $d->add($t1);
+ $d = $c->copy();
+ $c = $b->copy();
+ $b = $a->copy();
+ $a = $t1->add($t2);
+ }
+
+ // Add this chunk's hash to result so far
+ $hash = array(
+ $hash[0]->add($a),
+ $hash[1]->add($b),
+ $hash[2]->add($c),
+ $hash[3]->add($d),
+ $hash[4]->add($e),
+ $hash[5]->add($f),
+ $hash[6]->add($g),
+ $hash[7]->add($h)
+ );
+ }
+
+ // Produce the final hash value (big-endian)
+ // (Crypt_Hash::hash() trims the output for hashes but not for HMACs. as such, we trim the output here)
+ $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
+ $hash[4]->toBytes() . $hash[5]->toBytes();
+ if ($this->l != 48) {
+ $temp.= $hash[6]->toBytes() . $hash[7]->toBytes();
+ }
+
+ return $temp;
+ }
+
+ /**
+ * Right Rotate
+ *
+ * @access private
+ * @param Integer $int
+ * @param Integer $amt
+ * @see _sha256()
+ * @return Integer
+ */
+ function _rightRotate($int, $amt)
+ {
+ $invamt = 32 - $amt;
+ $mask = (1 << $invamt) - 1;
+ return (($int << $invamt) & 0xFFFFFFFF) | (($int >> $amt) & $mask);
+ }
+
+ /**
+ * Right Shift
+ *
+ * @access private
+ * @param Integer $int
+ * @param Integer $amt
+ * @see _sha256()
+ * @return Integer
+ */
+ function _rightShift($int, $amt)
+ {
+ $mask = (1 << (32 - $amt)) - 1;
+ return ($int >> $amt) & $mask;
+ }
+
+ /**
+ * Not
+ *
+ * @access private
+ * @param Integer $int
+ * @see _sha256()
+ * @return Integer
+ */
+ function _not($int)
+ {
+ return ~$int & 0xFFFFFFFF;
+ }
+
+ /**
+ * Add
+ *
+ * _sha256() adds multiple unsigned 32-bit integers. Since PHP doesn't support unsigned integers and since the
+ * possibility of overflow exists, care has to be taken. Math_BigInteger() could be used but this should be faster.
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @see _sha256()
+ * @access private
+ */
+ function _add()
+ {
+ static $mod;
+ if (!isset($mod)) {
+ $mod = pow(2, 32);
+ }
+
+ $result = 0;
+ $arguments = func_get_args();
+ foreach ($arguments as $argument) {
+ $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument;
+ }
+
+ return fmod($result, $mod);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+} \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RC4.php b/plugins/OStatus/extlib/Crypt/RC4.php
new file mode 100644
index 000000000..1e4d8b489
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/RC4.php
@@ -0,0 +1,493 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt ARCFOUR Algorithm}
+ * - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}
+ *
+ * RC4 is also known as ARCFOUR or ARC4. The reason is elaborated upon at Wikipedia. This class is named RC4 and not
+ * ARCFOUR or ARC4 because RC4 is how it is refered to in the SSH1 specification.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/RC4.php');
+ *
+ * $rc4 = new Crypt_RC4();
+ *
+ * $rc4->setKey('abcdefgh');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $rc4->decrypt($rc4->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_RC4
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::Crypt_RC4()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RC4_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RC4_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RC4::_crypt()
+ */
+define('CRYPT_RC4_ENCRYPT', 0);
+define('CRYPT_RC4_DECRYPT', 1);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of RC4.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_RC4
+ */
+class Crypt_RC4 {
+ /**
+ * The Key
+ *
+ * @see Crypt_RC4::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0";
+
+ /**
+ * The Key Stream for encryption
+ *
+ * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+ *
+ * @see Crypt_RC4::setKey()
+ * @var Array
+ * @access private
+ */
+ var $encryptStream = false;
+
+ /**
+ * The Key Stream for decryption
+ *
+ * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+ *
+ * @see Crypt_RC4::setKey()
+ * @var Array
+ * @access private
+ */
+ var $decryptStream = false;
+
+ /**
+ * The $i and $j indexes for encryption
+ *
+ * @see Crypt_RC4::_crypt()
+ * @var Integer
+ * @access private
+ */
+ var $encryptIndex = 0;
+
+ /**
+ * The $i and $j indexes for decryption
+ *
+ * @see Crypt_RC4::_crypt()
+ * @var Integer
+ * @access private
+ */
+ var $decryptIndex = 0;
+
+ /**
+ * MCrypt parameters
+ *
+ * @see Crypt_RC4::setMCrypt()
+ * @var Array
+ * @access private
+ */
+ var $mcrypt = array('', '');
+
+ /**
+ * The Encryption Algorithm
+ *
+ * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT. Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR.
+ *
+ * @see Crypt_RC4::Crypt_RC4()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_RC4
+ * @access public
+ */
+ function Crypt_RC4()
+ {
+ if ( !defined('CRYPT_RC4_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')):
+ // i'd check to see if rc4 was supported, by doing in_array('arcfour', mcrypt_list_algorithms('')),
+ // but since that can be changed after the object has been created, there doesn't seem to be
+ // a lot of point...
+ define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL);
+ }
+ }
+
+ switch ( CRYPT_RC4_MODE ) {
+ case CRYPT_RC4_MODE_MCRYPT:
+ switch (true) {
+ case defined('MCRYPT_ARCFOUR'):
+ $this->mode = MCRYPT_ARCFOUR;
+ break;
+ case defined('MCRYPT_RC4');
+ $this->mode = MCRYPT_RC4;
+ }
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be between 1 and 256 bytes long. If they are longer then 256 bytes, the first 256 bytes will
+ * be used. If no key is explicitly set, it'll be assumed to be a single null byte.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->key = $key;
+
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ return;
+ }
+
+ $keyLength = strlen($key);
+ $keyStream = array();
+ for ($i = 0; $i < 256; $i++) {
+ $keyStream[$i] = $i;
+ }
+ $j = 0;
+ for ($i = 0; $i < 256; $i++) {
+ $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
+ $temp = $keyStream[$i];
+ $keyStream[$i] = $keyStream[$j];
+ $keyStream[$j] = $temp;
+ }
+
+ $this->encryptIndex = $this->decryptIndex = array(0, 0);
+ $this->encryptStream = $this->decryptStream = $keyStream;
+ }
+
+ /**
+ * Dummy function.
+ *
+ * Some protocols, such as WEP, prepend an "initialization vector" to the key, effectively creating a new key [1].
+ * If you need to use an initialization vector in this manner, feel free to prepend it to the key, yourself, before
+ * calling setKey().
+ *
+ * [1] WEP's initialization vectors (IV's) are used in a somewhat insecure way. Since, in that protocol,
+ * the IV's are relatively easy to predict, an attack described by
+ * {@link http://www.drizzle.com/~aboba/IEEE/rc4_ksaproc.pdf Scott Fluhrer, Itsik Mantin, and Adi Shamir}
+ * can be used to quickly guess at the rest of the key. The following links elaborate:
+ *
+ * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009}
+ * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack}
+ *
+ * @param String $iv
+ * @see Crypt_RC4::setKey()
+ * @access public
+ */
+ function setIV($iv)
+ {
+ }
+
+ /**
+ * Sets MCrypt parameters. (optional)
+ *
+ * If MCrypt is being used, empty strings will be used, unless otherwise specified.
+ *
+ * @link http://php.net/function.mcrypt-module-open#function.mcrypt-module-open
+ * @access public
+ * @param optional Integer $algorithm_directory
+ * @param optional Integer $mode_directory
+ */
+ function setMCrypt($algorithm_directory = '', $mode_directory = '')
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ $this->mcrypt = array($algorithm_directory, $mode_directory);
+ $this->_closeMCrypt();
+ }
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * @see Crypt_RC4::_crypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT);
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
+ * Atleast if the continuous buffer is disabled.
+ *
+ * @see Crypt_RC4::_crypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT);
+ }
+
+ /**
+ * Encrypts or decrypts a message.
+ *
+ * @see Crypt_RC4::encrypt()
+ * @see Crypt_RC4::decrypt()
+ * @access private
+ * @param String $text
+ * @param Integer $mode
+ */
+ function _crypt($text, $mode)
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream';
+
+ if ($this->$keyStream === false) {
+ $this->$keyStream = mcrypt_module_open($this->mode, $this->mcrypt[0], MCRYPT_MODE_STREAM, $this->mcrypt[1]);
+ mcrypt_generic_init($this->$keyStream, $this->key, '');
+ } else if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->$keyStream, $this->key, '');
+ }
+ $newText = mcrypt_generic($this->$keyStream, $text);
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_deinit($this->$keyStream);
+ }
+
+ return $newText;
+ }
+
+ if ($this->encryptStream === false) {
+ $this->setKey($this->key);
+ }
+
+ switch ($mode) {
+ case CRYPT_RC4_ENCRYPT:
+ $keyStream = $this->encryptStream;
+ list($i, $j) = $this->encryptIndex;
+ break;
+ case CRYPT_RC4_DECRYPT:
+ $keyStream = $this->decryptStream;
+ list($i, $j) = $this->decryptIndex;
+ }
+
+ $newText = '';
+ for ($k = 0; $k < strlen($text); $k++) {
+ $i = ($i + 1) & 255;
+ $j = ($j + $keyStream[$i]) & 255;
+ $temp = $keyStream[$i];
+ $keyStream[$i] = $keyStream[$j];
+ $keyStream[$j] = $temp;
+ $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255];
+ $newText.= chr(ord($text[$k]) ^ $temp);
+ }
+
+ if ($this->continuousBuffer) {
+ switch ($mode) {
+ case CRYPT_RC4_ENCRYPT:
+ $this->encryptStream = $keyStream;
+ $this->encryptIndex = array($i, $j);
+ break;
+ case CRYPT_RC4_DECRYPT:
+ $this->decryptStream = $keyStream;
+ $this->decryptIndex = array($i, $j);
+ }
+ }
+
+ return $newText;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $rc4->encrypt(substr($plaintext, 0, 8));
+ * echo $rc4->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $rc4->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $rc4->encrypt(substr($plaintext, 0, 8));
+ * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_RC4::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_RC4::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) {
+ $this->encryptIndex = $this->decryptIndex = array(0, 0);
+ $this->setKey($this->key);
+ }
+
+ $this->continuousBuffer = false;
+ }
+
+ /**
+ * Dummy function.
+ *
+ * Since RC4 is a stream cipher and not a block cipher, no padding is necessary. The only reason this function is
+ * included is so that you can switch between a block cipher and a stream cipher transparently.
+ *
+ * @see Crypt_RC4::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ }
+
+ /**
+ * Dummy function.
+ *
+ * @see Crypt_RC4::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ }
+
+ /**
+ * Class destructor.
+ *
+ * Will be called, automatically, if you're using PHP5. If you're using PHP4, call it yourself. Only really
+ * needs to be called if mcrypt is being used.
+ *
+ * @access public
+ */
+ function __destruct()
+ {
+ if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
+ $this->_closeMCrypt();
+ }
+ }
+
+ /**
+ * Properly close the MCrypt objects.
+ *
+ * @access prviate
+ */
+ function _closeMCrypt()
+ {
+ if ( $this->encryptStream !== false ) {
+ if ( $this->continuousBuffer ) {
+ mcrypt_generic_deinit($this->encryptStream);
+ }
+
+ mcrypt_module_close($this->encryptStream);
+
+ $this->encryptStream = false;
+ }
+
+ if ( $this->decryptStream !== false ) {
+ if ( $this->continuousBuffer ) {
+ mcrypt_generic_deinit($this->decryptStream);
+ }
+
+ mcrypt_module_close($this->decryptStream);
+
+ $this->decryptStream = false;
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA.php b/plugins/OStatus/extlib/Crypt/RSA.php
index 16dfa54d4..f0a75962c 100644
--- a/plugins/OStatus/extlib/Crypt/RSA.php
+++ b/plugins/OStatus/extlib/Crypt/RSA.php
@@ -1,524 +1,2108 @@
<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
+ * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.
*
* PHP versions 4 and 5
*
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
+ * Here's an example of how to encrypt and decrypt text with this library:
+ * <code>
+ * <?php
+ * include('Crypt/RSA.php');
+ *
+ * $rsa = new Crypt_RSA();
+ * extract($rsa->createKey());
+ *
+ * $plaintext = 'terrafrost';
+ *
+ * $rsa->loadKey($privatekey);
+ * $ciphertext = $rsa->encrypt($plaintext);
+ *
+ * $rsa->loadKey($publickey);
+ * echo $rsa->decrypt($ciphertext);
+ * ?>
+ * </code>
+ *
+ * Here's an example of how to create signatures and verify signatures with this library:
+ * <code>
+ * <?php
+ * include('Crypt/RSA.php');
+ *
+ * $rsa = new Crypt_RSA();
+ * extract($rsa->createKey());
+ *
+ * $plaintext = 'terrafrost';
+ *
+ * $rsa->loadKey($privatekey);
+ * $signature = $rsa->sign($plaintext);
+ *
+ * $rsa->loadKey($publickey);
+ * echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
- * @category Encryption
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
* @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version 1.2.0b
- * @link http://pear.php.net/package/Crypt_RSA
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMIX Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: RSA.php,v 1.14 2010/03/01 17:28:19 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
*/
/**
- * RSA error handling facilities
+ * Include Math_BigInteger
*/
-require_once 'Crypt/RSA/ErrorHandler.php';
+require_once('Math/BigInteger.php');
/**
- * loader for math wrappers
+ * Include Crypt_Random
*/
-require_once 'Crypt/RSA/MathLoader.php';
+require_once('Crypt/Random.php');
/**
- * helper class for mange single key
+ * Include Crypt_Hash
*/
-require_once 'Crypt/RSA/Key.php';
+require_once('Crypt/Hash.php');
-/**
- * helper class for manage key pair
+/**#@+
+ * @access public
+ * @see Crypt_RSA::encrypt()
+ * @see Crypt_RSA::decrypt()
*/
-require_once 'Crypt/RSA/KeyPair.php';
-
/**
- * Crypt_RSA class, derived from Crypt_RSA_ErrorHandler
+ * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
+ * (OAEP) for encryption / decryption.
*
- * Provides the following functions:
- * - setParams($params) - sets parameters of current object
- * - encrypt($plain_data, $key = null) - encrypts data
- * - decrypt($enc_data, $key = null) - decrypts data
- * - createSign($doc, $private_key = null) - signs document by private key
- * - validateSign($doc, $signature, $public_key = null) - validates signature of document
+ * Uses sha1 by default.
*
- * Example usage:
- * // creating an error handler
- * $error_handler = create_function('$obj', 'echo "error: ", $obj->getMessage(), "\n"');
+ * @see Crypt_RSA::setHash()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_ENCRYPTION_OAEP', 1);
+/**
+ * Use PKCS#1 padding.
*
- * // 1024-bit key pair generation
- * $key_pair = new Crypt_RSA_KeyPair(1024);
+ * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards
+ * compatability with protocols (like SSH-1) written before OAEP's introduction.
+ */
+define('CRYPT_RSA_ENCRYPTION_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::sign()
+ * @see Crypt_RSA::verify()
+ * @see Crypt_RSA::setHash()
+ */
+/**
+ * Use the Probabilistic Signature Scheme for signing
*
- * // check consistence of Crypt_RSA_KeyPair object
- * $error_handler($key_pair);
+ * Uses sha1 by default.
*
- * // creating Crypt_RSA object
- * $rsa_obj = new Crypt_RSA;
+ * @see Crypt_RSA::setSaltLength()
+ * @see Crypt_RSA::setMGFHash()
+ */
+define('CRYPT_RSA_SIGNATURE_PSS', 1);
+/**
+ * Use the PKCS#1 scheme by default.
*
- * // check consistence of Crypt_RSA object
- * $error_handler($rsa_obj);
+ * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards
+ * compatability with protocols (like SSH-2) written before PSS's introduction.
+ */
+define('CRYPT_RSA_SIGNATURE_PKCS1', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::createKey()
+ */
+/**
+ * ASN1 Integer
+ */
+define('CRYPT_RSA_ASN1_INTEGER', 2);
+/**
+ * ASN1 Sequence (with the constucted bit set)
+ */
+define('CRYPT_RSA_ASN1_SEQUENCE', 48);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_RSA::Crypt_RSA()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('CRYPT_RSA_MODE_INTERNAL', 1);
+/**
+ * To use the OpenSSL library
*
- * // set error handler on Crypt_RSA object ( see Crypt/RSA/ErrorHandler.php for details )
- * $rsa_obj->setErrorHandler($error_handler);
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('CRYPT_RSA_MODE_OPENSSL', 2);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPrivateKeyFormat()
+ */
+/**
+ * PKCS#1 formatted private key
*
- * // encryption (usually using public key)
- * $enc_data = $rsa_obj->encrypt($plain_data, $key_pair->getPublicKey());
+ * Used by OpenSSH
+ */
+define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0);
+/**#@-*/
+
+/**#@+
+ * @access public
+ * @see Crypt_RSA::createKey()
+ * @see Crypt_RSA::setPublicKeyFormat()
+ */
+/**
+ * Raw public key
*
- * // decryption (usually using private key)
- * $plain_data = $rsa_obj->decrypt($enc_data, $key_pair->getPrivateKey());
+ * An array containing two Math_BigInteger objects.
*
- * // signing
- * $signature = $rsa_obj->createSign($document, $key_pair->getPrivateKey());
+ * The exponent can be indexed with any of the following:
*
- * // signature checking
- * $is_valid = $rsa_obj->validateSign($document, $signature, $key_pair->getPublicKey());
+ * 0, e, exponent, publicExponent
*
- * // signing many documents by one private key
- * $rsa_obj = new Crypt_RSA(array('private_key' => $key_pair->getPrivateKey()));
- * // check consistence of Crypt_RSA object
- * $error_handler($rsa_obj);
- * // set error handler ( see Crypt/RSA/ErrorHandler.php for details )
- * $rsa_obj->setErrorHandler($error_handler);
- * // sign many documents
- * $sign_1 = $rsa_obj->sign($doc_1);
- * $sign_2 = $rsa_obj->sign($doc_2);
- * //...
- * $sign_n = $rsa_obj->sign($doc_n);
+ * The modulus can be indexed with any of the following:
*
- * // changing default hash function, which is used for sign
- * // creating/validation
- * $rsa_obj->setParams(array('hash_func' => 'md5'));
+ * 1, n, modulo, modulus
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 1);
+/**
+ * PKCS#1 formatted public key
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 2);
+/**
+ * OpenSSH formatted public key
*
- * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
- * $rsa_obj = &Crypt_RSA::factory();
- * if (PEAR::isError($rsa_obj)) {
- * echo "error: ", $rsa_obj->getMessage(), "\n";
- * }
+ * Place in $HOME/.ssh/authorized_keys
+ */
+define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 3);
+/**#@-*/
+
+/**
+ * Pure-PHP PKCS#1 compliant implementation of RSA.
*
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @link http://pear.php.net/package/Crypt_RSA
- * @version @package_version@
- * @access public
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_RSA
*/
-class Crypt_RSA extends Crypt_RSA_ErrorHandler
-{
+class Crypt_RSA {
+ /**
+ * Precomputed Zero
+ *
+ * @var Array
+ * @access private
+ */
+ var $zero;
+
+ /**
+ * Precomputed One
+ *
+ * @var Array
+ * @access private
+ */
+ var $one;
+
+ /**
+ * Private Key Format
+ *
+ * @var Integer
+ * @access private
+ */
+ var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1;
+
+ /**
+ * Public Key Format
+ *
+ * @var Integer
+ * @access public
+ */
+ var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1;
+
+ /**
+ * Modulus (ie. n)
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $modulus;
+
+ /**
+ * Modulus length
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $k;
+
+ /**
+ * Exponent (ie. e or d)
+ *
+ * @var Math_BigInteger
+ * @access private
+ */
+ var $exponent;
+
+ /**
+ * Primes for Chinese Remainder Theorem (ie. p and q)
+ *
+ * @var Array
+ * @access private
+ */
+ var $primes;
+
+ /**
+ * Exponents for Chinese Remainder Theorem (ie. dP and dQ)
+ *
+ * @var Array
+ * @access private
+ */
+ var $exponents;
+
+ /**
+ * Coefficients for Chinese Remainder Theorem (ie. qInv)
+ *
+ * @var Array
+ * @access private
+ */
+ var $coefficients;
+
+ /**
+ * Hash name
+ *
+ * @var String
+ * @access private
+ */
+ var $hashName;
+
+ /**
+ * Hash function
+ *
+ * @var Crypt_Hash
+ * @access private
+ */
+ var $hash;
+
+ /**
+ * Length of hash function output
+ *
+ * @var Integer
+ * @access private
+ */
+ var $hLen;
+
/**
- * Reference to math wrapper, which is used to
- * manipulate large integers in RSA algorithm.
+ * Length of salt
*
- * @var object of Crypt_RSA_Math_* class
+ * @var Integer
* @access private
*/
- var $_math_obj;
+ var $sLen;
/**
- * key for encryption, which is used by encrypt() method
+ * Hash function for the Mask Generation Function
*
- * @var object of Crypt_RSA_KEY class
+ * @var Crypt_Hash
* @access private
*/
- var $_enc_key;
+ var $mgfHash;
/**
- * key for decryption, which is used by decrypt() method
+ * Length of MGF hash function output
*
- * @var object of Crypt_RSA_KEY class
+ * @var Integer
* @access private
*/
- var $_dec_key;
+ var $mgfHLen;
/**
- * public key, which is used by validateSign() method
+ * Encryption mode
*
- * @var object of Crypt_RSA_KEY class
+ * @var Integer
* @access private
*/
- var $_public_key;
+ var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP;
/**
- * private key, which is used by createSign() method
+ * Signature mode
*
- * @var object of Crypt_RSA_KEY class
+ * @var Integer
* @access private
*/
- var $_private_key;
+ var $signatureMode = CRYPT_RSA_SIGNATURE_PSS;
/**
- * name of hash function, which is used by validateSign()
- * and createSign() methods. Default hash function is SHA-1
+ * Public Exponent
*
- * @var string
+ * @var Mixed
* @access private
*/
- var $_hash_func = 'sha1';
+ var $publicExponent = false;
+
+ /**
+ * Password
+ *
+ * @var String
+ * @access private
+ */
+ var $password = '';
+
+ /**
+ * The constructor
+ *
+ * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself. The reason
+ * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully. openssl_pkey_new(), in particular, requires
+ * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late.
+ *
+ * @return Crypt_RSA
+ * @access public
+ */
+ function Crypt_RSA()
+ {
+ if ( !defined('CRYPT_RSA_MODE') ) {
+ switch (true) {
+ //case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='):
+ // define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL);
+ // break;
+ default:
+ define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL);
+ }
+ }
+
+ $this->zero = new Math_BigInteger();
+ $this->one = new Math_BigInteger(1);
+
+ $this->hash = new Crypt_Hash('sha1');
+ $this->hLen = $this->hash->getLength();
+ $this->hashName = 'sha1';
+ $this->mgfHash = new Crypt_Hash('sha1');
+ $this->mgfHLen = $this->mgfHash->getLength();
+ }
/**
- * Crypt_RSA constructor.
+ * Create public / private key pair
*
- * @param array $params
- * Optional associative array of parameters, such as:
- * enc_key, dec_key, private_key, public_key, hash_func.
- * See setParams() method for more detailed description of
- * these parameters.
- * @param string $wrapper_name
- * Name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- * @param string $error_handler name of error handler function
+ * Returns an array with the following three elements:
+ * - 'privatekey': The private key.
+ * - 'publickey': The public key.
+ * - 'partialkey': A partially computed key (if the execution time exceeded $timeout).
+ * Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing.
*
* @access public
+ * @param optional Integer $bits
+ * @param optional Integer $timeout
+ * @param optional Math_BigInteger $p
*/
- function Crypt_RSA($params = null, $wrapper_name = 'default', $error_handler = '')
+ function createKey($bits = 1024, $timeout = false, $partial = array())
{
- // set error handler
- $this->setErrorHandler($error_handler);
- // try to load math wrapper
- $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
- if ($this->isError($obj)) {
- // error during loading of math wrapper
- // Crypt_RSA object is partially constructed.
- $this->pushError($obj);
- return;
+ if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL ) {
+ $rsa = openssl_pkey_new(array('private_key_bits' => $bits));
+ openssl_pkey_export($rsa, $privatekey);
+ $publickey = openssl_pkey_get_details($rsa);
+ $publickey = $publickey['key'];
+
+ if ($this->privateKeyFormat != CRYPT_RSA_PRIVATE_FORMAT_PKCS1) {
+ $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1)));
+ $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1)));
+ }
+
+ return array(
+ 'privatekey' => $privatekey,
+ 'publickey' => $publickey,
+ 'partialkey' => false
+ );
+ }
+
+ static $e;
+ if (!isset($e)) {
+ if (!defined('CRYPT_RSA_EXPONENT')) {
+ // http://en.wikipedia.org/wiki/65537_%28number%29
+ define('CRYPT_RSA_EXPONENT', '65537');
+ }
+ if (!defined('CRYPT_RSA_COMMENT')) {
+ define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key');
+ }
+ // per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
+ // than 256 bits.
+ if (!defined('CRYPT_RSA_SMALLEST_PRIME')) {
+ define('CRYPT_RSA_SMALLEST_PRIME', 4096);
+ }
+
+ $e = new Math_BigInteger(CRYPT_RSA_EXPONENT);
+ }
+
+ extract($this->_generateMinMax($bits));
+ $absoluteMin = $min;
+ $temp = $bits >> 1;
+ if ($temp > CRYPT_RSA_SMALLEST_PRIME) {
+ $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME);
+ $temp = CRYPT_RSA_SMALLEST_PRIME;
+ } else {
+ $num_primes = 2;
+ }
+ extract($this->_generateMinMax($temp + $bits % $temp));
+ $finalMax = $max;
+ extract($this->_generateMinMax($temp));
+
+ $generator = new Math_BigInteger();
+ $generator->setRandomGenerator('crypt_random');
+
+ $n = $this->one->copy();
+ if (!empty($partial)) {
+ extract(unserialize($partial));
+ } else {
+ $exponents = $coefficients = $primes = array();
+ $lcm = array(
+ 'top' => $this->one->copy(),
+ 'bottom' => false
+ );
}
- $this->_math_obj = &$obj;
- if (!is_null($params)) {
- if (!$this->setParams($params)) {
- // error in Crypt_RSA::setParams() function
- return;
+ $start = time();
+ $i0 = count($primes) + 1;
+
+ do {
+ for ($i = $i0; $i <= $num_primes; $i++) {
+ if ($timeout !== false) {
+ $timeout-= time() - $start;
+ $start = time();
+ if ($timeout <= 0) {
+ return serialize(array(
+ 'privatekey' => '',
+ 'publickey' => '',
+ 'partialkey' => array(
+ 'primes' => $primes,
+ 'coefficients' => $coefficients,
+ 'lcm' => $lcm,
+ 'exponents' => $exponents
+ )
+ ));
+ }
+ }
+
+ if ($i == $num_primes) {
+ list($min, $temp) = $absoluteMin->divide($n);
+ if (!$temp->equals($this->zero)) {
+ $min = $min->add($this->one); // ie. ceil()
+ }
+ $primes[$i] = $generator->randomPrime($min, $finalMax, $timeout);
+ } else {
+ $primes[$i] = $generator->randomPrime($min, $max, $timeout);
+ }
+
+ if ($primes[$i] === false) { // if we've reached the timeout
+ return array(
+ 'privatekey' => '',
+ 'publickey' => '',
+ 'partialkey' => empty($primes) ? '' : serialize(array(
+ 'primes' => array_slice($primes, 0, $i - 1),
+ 'coefficients' => $coefficients,
+ 'lcm' => $lcm,
+ 'exponents' => $exponents
+ ))
+ );
+ }
+
+ // the first coefficient is calculated differently from the rest
+ // ie. instead of being $primes[1]->modInverse($primes[2]), it's $primes[2]->modInverse($primes[1])
+ if ($i > 2) {
+ $coefficients[$i] = $n->modInverse($primes[$i]);
+ }
+
+ $n = $n->multiply($primes[$i]);
+
+ $temp = $primes[$i]->subtract($this->one);
+
+ // textbook RSA implementations use Euler's totient function instead of the least common multiple.
+ // see http://en.wikipedia.org/wiki/Euler%27s_totient_function
+ $lcm['top'] = $lcm['top']->multiply($temp);
+ $lcm['bottom'] = $lcm['bottom'] === false ? $temp : $lcm['bottom']->gcd($temp);
+
+ $exponents[$i] = $e->modInverse($temp);
}
+
+ list($lcm) = $lcm['top']->divide($lcm['bottom']);
+ $gcd = $lcm->gcd($e);
+ $i0 = 1;
+ } while (!$gcd->equals($this->one));
+
+ $d = $e->modInverse($lcm);
+
+ $coefficients[2] = $primes[2]->modInverse($primes[1]);
+
+ // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.2>:
+ // RSAPrivateKey ::= SEQUENCE {
+ // version Version,
+ // modulus INTEGER, -- n
+ // publicExponent INTEGER, -- e
+ // privateExponent INTEGER, -- d
+ // prime1 INTEGER, -- p
+ // prime2 INTEGER, -- q
+ // exponent1 INTEGER, -- d mod (p-1)
+ // exponent2 INTEGER, -- d mod (q-1)
+ // coefficient INTEGER, -- (inverse of q) mod p
+ // otherPrimeInfos OtherPrimeInfos OPTIONAL
+ // }
+
+ return array(
+ 'privatekey' => $this->_convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients),
+ 'publickey' => $this->_convertPublicKey($n, $e),
+ 'partialkey' => false
+ );
+ }
+
+ /**
+ * Convert a private key to the appropriate format.
+ *
+ * @access private
+ * @see setPrivateKeyFormat()
+ * @param String $RSAPrivateKey
+ * @return String
+ */
+ function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
+ {
+ $num_primes = count($primes);
+ $raw = array(
+ 'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
+ 'modulus' => $n->toBytes(true),
+ 'publicExponent' => $e->toBytes(true),
+ 'privateExponent' => $d->toBytes(true),
+ 'prime1' => $primes[1]->toBytes(true),
+ 'prime2' => $primes[2]->toBytes(true),
+ 'exponent1' => $exponents[1]->toBytes(true),
+ 'exponent2' => $exponents[2]->toBytes(true),
+ 'coefficient' => $coefficients[2]->toBytes(true)
+ );
+
+ // if the format in question does not support multi-prime rsa and multi-prime rsa was used,
+ // call _convertPublicKey() instead.
+ switch ($this->privateKeyFormat) {
+ default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1
+ $components = array();
+ foreach ($raw as $name => $value) {
+ $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
+ }
+
+ $RSAPrivateKey = implode('', $components);
+
+ if ($num_primes > 2) {
+ $OtherPrimeInfos = '';
+ for ($i = 3; $i <= $num_primes; $i++) {
+ // OtherPrimeInfos ::= SEQUENCE SIZE(1..MAX) OF OtherPrimeInfo
+ //
+ // OtherPrimeInfo ::= SEQUENCE {
+ // prime INTEGER, -- ri
+ // exponent INTEGER, -- di
+ // coefficient INTEGER -- ti
+ // }
+ $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
+ $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
+ $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
+ $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
+ }
+ $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
+ }
+
+ $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+
+ if (!empty($this->password)) {
+ $iv = $this->_random(8);
+ $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
+ $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+ if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+ }
+ $des = new Crypt_TripleDES();
+ $des->setKey($symkey);
+ $des->setIV($iv);
+ $iv = strtoupper(bin2hex($iv));
+ $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+ "Proc-Type: 4,ENCRYPTED\r\n" .
+ "DEK-Info: DES-EDE3-CBC,$iv\r\n" .
+ "\r\n" .
+ chunk_split(base64_encode($des->encrypt($RSAPrivateKey))) .
+ '-----END RSA PRIVATE KEY-----';
+ } else {
+ $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
+ chunk_split(base64_encode($RSAPrivateKey)) .
+ '-----END RSA PRIVATE KEY-----';
+ }
+
+ return $RSAPrivateKey;
+ }
+ }
+
+ /**
+ * Convert a public key to the appropriate format
+ *
+ * @access private
+ * @see setPublicKeyFormat()
+ * @param String $RSAPrivateKey
+ * @return String
+ */
+ function _convertPublicKey($n, $e)
+ {
+ $modulus = $n->toBytes(true);
+ $publicExponent = $e->toBytes(true);
+
+ switch ($this->publicKeyFormat) {
+ case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+ return array('e' => $e->copy(), 'n' => $n->copy());
+ case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+ // from <http://tools.ietf.org/html/rfc4253#page-15>:
+ // string "ssh-rsa"
+ // mpint e
+ // mpint n
+ $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus);
+ $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT;
+
+ return $RSAPublicKey;
+ default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1
+ // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.1>:
+ // RSAPublicKey ::= SEQUENCE {
+ // modulus INTEGER, -- n
+ // publicExponent INTEGER -- e
+ // }
+ $components = array(
+ 'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus),
+ 'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent)
+ );
+
+ $RSAPublicKey = pack('Ca*a*a*',
+ CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
+ $components['modulus'], $components['publicExponent']
+ );
+
+ $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+ chunk_split(base64_encode($RSAPublicKey)) .
+ '-----END PUBLIC KEY-----';
+
+ return $RSAPublicKey;
+ }
+ }
+
+ /**
+ * Break a public or private key down into its constituant components
+ *
+ * @access private
+ * @see _convertPublicKey()
+ * @see _convertPrivateKey()
+ * @param String $key
+ * @param Integer $type
+ * @return Array
+ */
+ function _parseKey($key, $type)
+ {
+ switch ($type) {
+ case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+ if (!is_array($key)) {
+ return false;
+ }
+ $components = array();
+ switch (true) {
+ case isset($key['e']):
+ $components['publicExponent'] = $key['e']->copy();
+ break;
+ case isset($key['exponent']):
+ $components['publicExponent'] = $key['exponent']->copy();
+ break;
+ case isset($key['publicExponent']):
+ $components['publicExponent'] = $key['publicExponent']->copy();
+ break;
+ case isset($key[0]):
+ $components['publicExponent'] = $key[0]->copy();
+ }
+ switch (true) {
+ case isset($key['n']):
+ $components['modulus'] = $key['n']->copy();
+ break;
+ case isset($key['modulo']):
+ $components['modulus'] = $key['modulo']->copy();
+ break;
+ case isset($key['modulus']):
+ $components['modulus'] = $key['modulus']->copy();
+ break;
+ case isset($key[1]):
+ $components['modulus'] = $key[1]->copy();
+ }
+ return $components;
+ case CRYPT_RSA_PRIVATE_FORMAT_PKCS1:
+ case CRYPT_RSA_PUBLIC_FORMAT_PKCS1:
+ /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
+ "outside the scope" of PKCS#1. PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
+ protect private keys, however, that's not what OpenSSL* does. OpenSSL protects private keys by adding
+ two new "fields" to the key - DEK-Info and Proc-Type. These fields are discussed here:
+
+ http://tools.ietf.org/html/rfc1421#section-4.6.1.1
+ http://tools.ietf.org/html/rfc1421#section-4.6.1.3
+
+ DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
+ DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
+ function. As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
+ own implementation. ie. the implementation *is* the standard and any bugs that may exist in that
+ implementation are part of the standard, as well.
+
+ * OpenSSL is the de facto standard. It's utilized by OpenSSH and other projects */
+ if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
+ $iv = pack('H*', trim($matches[2]));
+ $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
+ $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
+ $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-#s', '', $key);
+ $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false;
+ if ($ciphertext === false) {
+ $ciphertext = $key;
+ }
+ switch ($matches[1]) {
+ case 'DES-EDE3-CBC':
+ if (!class_exists('Crypt_TripleDES')) {
+ require_once('Crypt/TripleDES.php');
+ }
+ $crypto = new Crypt_TripleDES();
+ break;
+ case 'DES-CBC':
+ if (!class_exists('Crypt_DES')) {
+ require_once('Crypt/DES.php');
+ }
+ $crypto = new Crypt_DES();
+ break;
+ default:
+ return false;
+ }
+ $crypto->setKey($symkey);
+ $crypto->setIV($iv);
+ $decoded = $crypto->decrypt($ciphertext);
+ } else {
+ $decoded = preg_replace('#-.+-|[\r\n]#', '', $key);
+ $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false;
+ }
+
+ if ($decoded !== false) {
+ $key = $decoded;
+ }
+
+ $components = array();
+
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ if ($this->_decodeLength($key) != strlen($key)) {
+ return false;
+ }
+
+ $tag = ord($this->_string_shift($key));
+ if ($tag == CRYPT_RSA_ASN1_SEQUENCE) {
+ /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+ 0:d=0 hl=4 l= 290 cons: SEQUENCE
+ 4:d=1 hl=2 l= 13 cons: SEQUENCE
+ 6:d=2 hl=2 l= 9 prim: OBJECT :rsaEncryption
+ 17:d=2 hl=2 l= 0 prim: NULL
+ 19:d=1 hl=4 l= 271 prim: BIT STRING */
+ $this->_string_shift($key, $this->_decodeLength($key));
+ $this->_string_shift($key); // skip over the BIT STRING tag
+ $this->_decodeLength($key); // skip over the BIT STRING length
+ // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of
+ // unused bits in teh final subsequent octet. The number shall be in the range zero to seven."
+ // -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2)
+ $this->_string_shift($key);
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ if ($this->_decodeLength($key) != strlen($key)) {
+ return false;
+ }
+ $tag = ord($this->_string_shift($key));
+ }
+ if ($tag != CRYPT_RSA_ASN1_INTEGER) {
+ return false;
+ }
+
+ $length = $this->_decodeLength($key);
+ $temp = $this->_string_shift($key, $length);
+ if (strlen($temp) != 1 || ord($temp) > 2) {
+ $components['modulus'] = new Math_BigInteger($temp, -256);
+ $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER
+ $length = $this->_decodeLength($key);
+ $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+
+ return $components;
+ }
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) {
+ return false;
+ }
+ $length = $this->_decodeLength($key);
+ $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+
+ if (!empty($key)) {
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ $this->_decodeLength($key);
+ while (!empty($key)) {
+ if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+ return false;
+ }
+ $this->_decodeLength($key);
+ $key = substr($key, 1);
+ $length = $this->_decodeLength($key);
+ $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ $this->_string_shift($key);
+ $length = $this->_decodeLength($key);
+ $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ }
+ }
+
+ return $components;
+ case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+ $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key));
+ if ($key === false) {
+ return false;
+ }
+
+ $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa";
+
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256);
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+
+ if ($cleanup && strlen($key)) {
+ extract(unpack('Nlength', $this->_string_shift($key, 4)));
+ return array(
+ 'modulus' => new Math_BigInteger($this->_string_shift($key, $length), -256),
+ 'publicExponent' => $modulus
+ );
+ } else {
+ return array(
+ 'modulus' => $modulus,
+ 'publicExponent' => $publicExponent
+ );
+ }
}
}
/**
- * Crypt_RSA factory.
+ * Loads a public or private key
+ *
+ * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed)
+ *
+ * @access public
+ * @param String $key
+ * @param Integer $type optional
+ */
+ function loadKey($key, $type = CRYPT_RSA_PRIVATE_FORMAT_PKCS1)
+ {
+ $components = $this->_parseKey($key, $type);
+ if ($components === false) {
+ return false;
+ }
+
+ $this->modulus = $components['modulus'];
+ $this->k = strlen($this->modulus->toBytes());
+ $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent'];
+ if (isset($components['primes'])) {
+ $this->primes = $components['primes'];
+ $this->exponents = $components['exponents'];
+ $this->coefficients = $components['coefficients'];
+ $this->publicExponent = $components['publicExponent'];
+ } else {
+ $this->primes = array();
+ $this->exponents = array();
+ $this->coefficients = array();
+ $this->publicExponent = false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Sets the password
+ *
+ * Private keys can be encrypted with a password. To unset the password, pass in the empty string or false.
+ * Or rather, pass in $password such that empty($password) is true.
+ *
+ * @see createKey()
+ * @see loadKey()
+ * @access public
+ * @param String $password
+ */
+ function setPassword($password)
+ {
+ $this->password = $password;
+ }
+
+ /**
+ * Defines the public key
+ *
+ * Some private key formats define the public exponent and some don't. Those that don't define it are problematic when
+ * used in certain contexts. For example, in SSH-2, RSA authentication works by sending the public key along with a
+ * message signed by the private key to the server. The SSH-2 server looks the public key up in an index of public keys
+ * and if it's present then proceeds to verify the signature. Problem is, if your private key doesn't include the public
+ * exponent this won't work unless you manually add the public exponent.
+ *
+ * Do note that when a new key is loaded the index will be cleared.
*
- * @param array $params
- * Optional associative array of parameters, such as:
- * enc_key, dec_key, private_key, public_key, hash_func.
- * See setParams() method for more detailed description of
- * these parameters.
- * @param string $wrapper_name
- * Name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- * @param string $error_handler name of error handler function
+ * Returns true on success, false on failure
*
- * @return object new Crypt_RSA object on success or PEAR_Error object on failure
+ * @see getPublicKey()
* @access public
+ * @param String $key
+ * @param Integer $type optional
+ * @return Boolean
*/
- function &factory($params = null, $wrapper_name = 'default', $error_handler = '')
+ function setPublicKey($key, $type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
{
- $obj = &new Crypt_RSA($params, $wrapper_name, $error_handler);
- if ($obj->isError()) {
- // error during creating a new object. Retrurn PEAR_Error object
- return $obj->getLastError();
+ $components = $this->_parseKey($key, $type);
+ if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) {
+ return false;
}
- // object created successfully. Return it
- return $obj;
+ $this->publicExponent = $components['publicExponent'];
}
/**
- * Accepts any combination of available parameters as associative array:
- * enc_key - encryption key for encrypt() method
- * dec_key - decryption key for decrypt() method
- * public_key - key for validateSign() method
- * private_key - key for createSign() method
- * hash_func - name of hash function, which will be used to create and validate sign
+ * Returns the public key
*
- * @param array $params
- * associative array of permitted parameters (see above)
+ * The public key is only returned under two circumstances - if the private key had the public key embedded within it
+ * or if the public key was set via setPublicKey(). If the currently loaded key is supposed to be the public key this
+ * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.
*
- * @return bool true on success or false on error
+ * @see getPublicKey()
* @access public
+ * @param String $key
+ * @param Integer $type optional
*/
- function setParams($params)
+ function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
{
- if (!is_array($params)) {
- $this->pushError('parameters must be passed to function as associative array', CRYPT_RSA_ERROR_WRONG_PARAMS);
+ if (empty($this->modulus) || empty($this->publicExponent)) {
return false;
}
- if (isset($params['enc_key'])) {
- if (Crypt_RSA_Key::isValid($params['enc_key'])) {
- $this->_enc_key = $params['enc_key'];
- }
- else {
- $this->pushError('wrong encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
- return false;
- }
+ $oldFormat = $this->publicKeyFormat;
+ $this->publicKeyFormat = $type;
+ $temp = $this->_convertPublicKey($this->modulus, $this->publicExponent);
+ $this->publicKeyFormat = $oldFormat;
+ return $temp;
+ }
+
+ /**
+ * Generates the smallest and largest numbers requiring $bits bits
+ *
+ * @access private
+ * @param Integer $bits
+ * @return Array
+ */
+ function _generateMinMax($bits)
+ {
+ $bytes = $bits >> 3;
+ $min = str_repeat(chr(0), $bytes);
+ $max = str_repeat(chr(0xFF), $bytes);
+ $msb = $bits & 7;
+ if ($msb) {
+ $min = chr(1 << ($msb - 1)) . $min;
+ $max = chr((1 << $msb) - 1) . $max;
+ } else {
+ $min[0] = chr(0x80);
}
- if (isset($params['dec_key'])) {
- if (Crypt_RSA_Key::isValid($params['dec_key'])) {
- $this->_dec_key = $params['dec_key'];
- }
- else {
- $this->pushError('wrong decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
- return false;
- }
+
+ return array(
+ 'min' => new Math_BigInteger($min, 256),
+ 'max' => new Math_BigInteger($max, 256)
+ );
+ }
+
+ /**
+ * DER-decode the length
+ *
+ * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
+ * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information.
+ *
+ * @access private
+ * @param String $string
+ * @return Integer
+ */
+ function _decodeLength(&$string)
+ {
+ $length = ord($this->_string_shift($string));
+ if ( $length & 0x80 ) { // definite length, long form
+ $length&= 0x7F;
+ $temp = $this->_string_shift($string, $length);
+ list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));
}
- if (isset($params['private_key'])) {
- if (Crypt_RSA_Key::isValid($params['private_key'])) {
- if ($params['private_key']->getKeyType() != 'private') {
- $this->pushError('private key must have "private" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
- return false;
- }
- $this->_private_key = $params['private_key'];
+ return $length;
+ }
+
+ /**
+ * DER-encode the length
+ *
+ * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4. See
+ * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 § 8.1.3} for more information.
+ *
+ * @access private
+ * @param Integer $length
+ * @return String
+ */
+ function _encodeLength($length)
+ {
+ if ($length <= 0x7F) {
+ return chr($length);
+ }
+
+ $temp = ltrim(pack('N', $length), chr(0));
+ return pack('Ca*', 0x80 | strlen($temp), $temp);
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+
+ /**
+ * Determines the private key format
+ *
+ * @see createKey()
+ * @access public
+ * @param Integer $format
+ */
+ function setPrivateKeyFormat($format)
+ {
+ $this->privateKeyFormat = $format;
+ }
+
+ /**
+ * Determines the public key format
+ *
+ * @see createKey()
+ * @access public
+ * @param Integer $format
+ */
+ function setPublicKeyFormat($format)
+ {
+ $this->publicKeyFormat = $format;
+ }
+
+ /**
+ * Determines which hashing function should be used
+ *
+ * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and
+ * decryption. If $hash isn't supported, sha1 is used.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setHash($hash)
+ {
+ // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
+ switch ($hash) {
+ case 'md2':
+ case 'md5':
+ case 'sha1':
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->hash = new Crypt_Hash($hash);
+ $this->hashName = $hash;
+ break;
+ default:
+ $this->hash = new Crypt_Hash('sha1');
+ $this->hashName = 'sha1';
+ }
+ $this->hLen = $this->hash->getLength();
+ }
+
+ /**
+ * Determines which hashing function should be used for the mask generation function
+ *
+ * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's
+ * best if Hash and MGFHash are set to the same thing this is not a requirement.
+ *
+ * @access public
+ * @param String $hash
+ */
+ function setMGFHash($hash)
+ {
+ // Crypt_Hash supports algorithms that PKCS#1 doesn't support. md5-96 and sha1-96, for example.
+ switch ($hash) {
+ case 'md2':
+ case 'md5':
+ case 'sha1':
+ case 'sha256':
+ case 'sha384':
+ case 'sha512':
+ $this->mgfHash = new Crypt_Hash($hash);
+ break;
+ default:
+ $this->mgfHash = new Crypt_Hash('sha1');
+ }
+ $this->mgfHLen = $this->mgfHash->getLength();
+ }
+
+ /**
+ * Determines the salt length
+ *
+ * To quote from {@link http://tools.ietf.org/html/rfc3447#page-38 RFC3447#page-38}:
+ *
+ * Typical salt lengths in octets are hLen (the length of the output
+ * of the hash function Hash) and 0.
+ *
+ * @access public
+ * @param Integer $format
+ */
+ function setSaltLength($sLen)
+ {
+ $this->sLen = $sLen;
+ }
+
+ /**
+ * Generates a random string x bytes long
+ *
+ * @access public
+ * @param Integer $bytes
+ * @param optional Integer $nonzero
+ * @return String
+ */
+ function _random($bytes, $nonzero = false)
+ {
+ $temp = '';
+ if ($nonzero) {
+ for ($i = 0; $i < $bytes; $i++) {
+ $temp.= chr(crypt_random(1, 255));
}
- else {
- $this->pushError('wrong private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
- return false;
+ } else {
+ $ints = ($bytes + 1) >> 2;
+ for ($i = 0; $i < $ints; $i++) {
+ $temp.= pack('N', crypt_random());
}
+ $temp = substr($temp, 0, $bytes);
}
- if (isset($params['public_key'])) {
- if (Crypt_RSA_Key::isValid($params['public_key'])) {
- if ($params['public_key']->getKeyType() != 'public') {
- $this->pushError('public key must have "public" attribute', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
- return false;
+ return $temp;
+ }
+
+ /**
+ * Integer-to-Octet-String primitive
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @param Integer $xLen
+ * @return String
+ */
+ function _i2osp($x, $xLen)
+ {
+ $x = $x->toBytes();
+ if (strlen($x) > $xLen) {
+ user_error('Integer too large', E_USER_NOTICE);
+ return false;
+ }
+ return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);
+ }
+
+ /**
+ * Octet-String-to-Integer primitive
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.
+ *
+ * @access private
+ * @param String $x
+ * @return Math_BigInteger
+ */
+ function _os2ip($x)
+ {
+ return new Math_BigInteger($x, 256);
+ }
+
+ /**
+ * Exponentiate with or without Chinese Remainder Theorem
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}.
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @return Math_BigInteger
+ */
+ function _exponentiate($x)
+ {
+ if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) {
+ return $x->modPow($this->exponent, $this->modulus);
+ }
+
+ $num_primes = count($this->primes);
+
+ if (defined('CRYPT_RSA_DISABLE_BLINDING')) {
+ $m_i = array(
+ 1 => $x->modPow($this->exponents[1], $this->primes[1]),
+ 2 => $x->modPow($this->exponents[2], $this->primes[2])
+ );
+ $h = $m_i[1]->subtract($m_i[2]);
+ $h = $h->multiply($this->coefficients[2]);
+ list(, $h) = $h->divide($this->primes[1]);
+ $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+ $r = $this->primes[1];
+ for ($i = 3; $i <= $num_primes; $i++) {
+ $m_i = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+ $r = $r->multiply($this->primes[$i - 1]);
+
+ $h = $m_i->subtract($m);
+ $h = $h->multiply($this->coefficients[$i]);
+ list(, $h) = $h->divide($this->primes[$i]);
+
+ $m = $m->add($r->multiply($h));
+ }
+ } else {
+ $smallest = $this->primes[1];
+ for ($i = 2; $i <= $num_primes; $i++) {
+ if ($smallest->compare($this->primes[$i]) > 0) {
+ $smallest = $this->primes[$i];
}
- $this->_public_key = $params['public_key'];
}
- else {
- $this->pushError('wrong public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
- return false;
+
+ $one = new Math_BigInteger(1);
+ $one->setRandomGenerator('crypt_random');
+
+ $r = $one->random($one, $smallest->subtract($one));
+
+ $m_i = array(
+ 1 => $this->_blind($x, $r, 1),
+ 2 => $this->_blind($x, $r, 2)
+ );
+ $h = $m_i[1]->subtract($m_i[2]);
+ $h = $h->multiply($this->coefficients[2]);
+ list(, $h) = $h->divide($this->primes[1]);
+ $m = $m_i[2]->add($h->multiply($this->primes[2]));
+
+ $r = $this->primes[1];
+ for ($i = 3; $i <= $num_primes; $i++) {
+ $m_i = $this->_blind($x, $r, $i);
+
+ $r = $r->multiply($this->primes[$i - 1]);
+
+ $h = $m_i->subtract($m);
+ $h = $h->multiply($this->coefficients[$i]);
+ list(, $h) = $h->divide($this->primes[$i]);
+
+ $m = $m->add($r->multiply($h));
}
}
- if (isset($params['hash_func'])) {
- if (!function_exists($params['hash_func'])) {
- $this->pushError('cannot find hash function with name [' . $params['hash_func'] . ']', CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
- return false;
- }
- $this->_hash_func = $params['hash_func'];
+
+ return $m;
+ }
+
+ /**
+ * Performs RSA Blinding
+ *
+ * Protects against timing attacks by employing RSA Blinding.
+ * Returns $x->modPow($this->exponents[$i], $this->primes[$i])
+ *
+ * @access private
+ * @param Math_BigInteger $x
+ * @param Math_BigInteger $r
+ * @param Integer $i
+ * @return Math_BigInteger
+ */
+ function _blind($x, $r, $i)
+ {
+ $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
+
+ $x = $x->modPow($this->exponents[$i], $this->primes[$i]);
+
+ $r = $r->modInverse($this->primes[$i]);
+ $x = $x->multiply($r);
+ list(, $x) = $x->divide($this->primes[$i]);
+
+ return $x;
+ }
+
+ /**
+ * RSAEP
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.
+ *
+ * @access private
+ * @param Math_BigInteger $m
+ * @return Math_BigInteger
+ */
+ function _rsaep($m)
+ {
+ if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+ user_error('Message representative out of range', E_USER_NOTICE);
+ return false;
}
- return true; // all ok
+ return $this->_exponentiate($m);
}
/**
- * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ * RSADP
*
- * @param string $plain_data data, which must be encrypted
- * @param object $key encryption key (object of Crypt_RSA_Key class)
- * @return mixed
- * encrypted data as string on success or false on error
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.
*
- * @access public
+ * @access private
+ * @param Math_BigInteger $c
+ * @return Math_BigInteger
*/
- function encrypt($plain_data, $key = null)
+ function _rsadp($c)
{
- $enc_data = $this->encryptBinary($plain_data, $key);
- if ($enc_data !== false) {
- return base64_encode($enc_data);
+ if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) {
+ user_error('Ciphertext representative out of range', E_USER_NOTICE);
+ return false;
}
- // error during encripting data
- return false;
+ return $this->_exponentiate($c);
}
/**
- * Ecnrypts $plain_data by the key $this->_enc_key or $key.
+ * RSASP1
*
- * @param string $plain_data data, which must be encrypted
- * @param object $key encryption key (object of Crypt_RSA_Key class)
- * @return mixed
- * encrypted data as binary string on success or false on error
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.
*
- * @access public
+ * @access private
+ * @param Math_BigInteger $m
+ * @return Math_BigInteger
+ */
+ function _rsasp1($m)
+ {
+ if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
+ user_error('Message representative out of range', E_USER_NOTICE);
+ return false;
+ }
+ return $this->_exponentiate($m);
+ }
+
+ /**
+ * RSAVP1
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.
+ *
+ * @access private
+ * @param Math_BigInteger $s
+ * @return Math_BigInteger
+ */
+ function _rsavp1($s)
+ {
+ if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) {
+ user_error('Signature representative out of range', E_USER_NOTICE);
+ return false;
+ }
+ return $this->_exponentiate($s);
+ }
+
+ /**
+ * MGF1
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.
+ *
+ * @access private
+ * @param String $mgfSeed
+ * @param Integer $mgfLen
+ * @return String
*/
- function encryptBinary($plain_data, $key = null)
+ function _mgf1($mgfSeed, $maskLen)
{
- if (is_null($key)) {
- // use current encryption key
- $key = $this->_enc_key;
+ // if $maskLen would yield strings larger than 4GB, PKCS#1 suggests a "Mask too long" error be output.
+
+ $t = '';
+ $count = ceil($maskLen / $this->mgfHLen);
+ for ($i = 0; $i < $count; $i++) {
+ $c = pack('N', $i);
+ $t.= $this->mgfHash->hash($mgfSeed . $c);
}
- else if (!Crypt_RSA_Key::isValid($key)) {
- $this->pushError('invalid encryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+
+ return substr($t, 0, $maskLen);
+ }
+
+ /**
+ * RSAES-OAEP-ENCRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.1 RFC3447#section-7.1.1} and
+ * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $l
+ * @return String
+ */
+ function _rsaes_oaep_encrypt($m, $l = '')
+ {
+ $mLen = strlen($m);
+
+ // Length checking
+
+ // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ if ($mLen > $this->k - 2 * $this->hLen - 2) {
+ user_error('Message too long', E_USER_NOTICE);
return false;
}
- // append tail \x01 to plain data. It needs for correctly decrypting of data
- $plain_data .= "\x01";
+ // EME-OAEP encoding
- $plain_data = $this->_math_obj->bin2int($plain_data);
- $exp = $this->_math_obj->bin2int($key->getExponent());
- $modulus = $this->_math_obj->bin2int($key->getModulus());
+ $lHash = $this->hash->hash($l);
+ $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
+ $db = $lHash . $ps . chr(1) . $m;
+ $seed = $this->_random($this->hLen);
+ $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+ $maskedDB = $db ^ $dbMask;
+ $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+ $maskedSeed = $seed ^ $seedMask;
+ $em = chr(0) . $maskedSeed . $maskedDB;
- // divide plain data into chunks
- $data_len = $this->_math_obj->bitLen($plain_data);
- $chunk_len = $key->getKeyLength() - 1;
- $block_len = (int) ceil($chunk_len / 8);
- $curr_pos = 0;
- $enc_data = '';
- while ($curr_pos < $data_len) {
- $tmp = $this->_math_obj->subint($plain_data, $curr_pos, $chunk_len);
- $enc_data .= str_pad(
- $this->_math_obj->int2bin($this->_math_obj->powmod($tmp, $exp, $modulus)),
- $block_len,
- "\0"
- );
- $curr_pos += $chunk_len;
+ // RSA encryption
+
+ $m = $this->_os2ip($em);
+ $c = $this->_rsaep($m);
+ $c = $this->_i2osp($c, $this->k);
+
+ // Output the ciphertext C
+
+ return $c;
+ }
+
+ /**
+ * RSAES-OAEP-DECRYPT
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}. The fact that the error
+ * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:
+ *
+ * Note. Care must be taken to ensure that an opponent cannot
+ * distinguish the different error conditions in Step 3.g, whether by
+ * error message or timing, or, more generally, learn partial
+ * information about the encoded message EM. Otherwise an opponent may
+ * be able to obtain useful information about the decryption of the
+ * ciphertext C, leading to a chosen-ciphertext attack such as the one
+ * observed by Manger [36].
+ *
+ * As for $l... to quote from {@link http://tools.ietf.org/html/rfc3447#page-17 RFC3447#page-17}:
+ *
+ * Both the encryption and the decryption operations of RSAES-OAEP take
+ * the value of a label L as input. In this version of PKCS #1, L is
+ * the empty string; other uses of the label are outside the scope of
+ * this document.
+ *
+ * @access private
+ * @param String $c
+ * @param String $l
+ * @return String
+ */
+ function _rsaes_oaep_decrypt($c, $l = '')
+ {
+ // Length checking
+
+ // if $l is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+
+ // RSA decryption
+
+ $c = $this->_os2ip($c);
+ $m = $this->_rsadp($c);
+ if ($m === false) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+ $em = $this->_i2osp($m, $this->k);
+
+ // EME-OAEP decoding
+
+ $lHash = $this->hash->hash($l);
+ $y = ord($em[0]);
+ $maskedSeed = substr($em, 1, $this->hLen);
+ $maskedDB = substr($em, $this->hLen + 1);
+ $seedMask = $this->_mgf1($maskedDB, $this->hLen);
+ $seed = $maskedSeed ^ $seedMask;
+ $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
+ $db = $maskedDB ^ $dbMask;
+ $lHash2 = substr($db, 0, $this->hLen);
+ $m = substr($db, $this->hLen);
+ if ($lHash != $lHash2) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+ $m = ltrim($m, chr(0));
+ if (ord($m[0]) != 1) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
}
- return $enc_data;
+
+ // Output the message M
+
+ return substr($m, 1);
}
/**
- * Decrypts $enc_data by the key $this->_dec_key or $key.
+ * RSAES-PKCS1-V1_5-ENCRYPT
*
- * @param string $enc_data encrypted data as string
- * @param object $key decryption key (object of RSA_Crypt_Key class)
- * @return mixed
- * decrypted data as string on success or false on error
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.
*
- * @access public
+ * @access private
+ * @param String $m
+ * @return String
*/
- function decrypt($enc_data, $key = null)
+ function _rsaes_pkcs1_v1_5_encrypt($m)
{
- $enc_data = base64_decode($enc_data);
- return $this->decryptBinary($enc_data, $key);
+ $mLen = strlen($m);
+
+ // Length checking
+
+ if ($mLen > $this->k - 11) {
+ user_error('Message too long', E_USER_NOTICE);
+ return false;
+ }
+
+ // EME-PKCS1-v1_5 encoding
+
+ $ps = $this->_random($this->k - $mLen - 3, true);
+ $em = chr(0) . chr(2) . $ps . chr(0) . $m;
+
+ // RSA encryption
+ $m = $this->_os2ip($em);
+ $c = $this->_rsaep($m);
+ $c = $this->_i2osp($c, $this->k);
+
+ // Output the ciphertext C
+
+ return $c;
}
/**
- * Decrypts $enc_data by the key $this->_dec_key or $key.
+ * RSAES-PKCS1-V1_5-DECRYPT
*
- * @param string $enc_data encrypted data as binary string
- * @param object $key decryption key (object of RSA_Crypt_Key class)
- * @return mixed
- * decrypted data as string on success or false on error
+ * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.
*
- * @access public
+ * @access private
+ * @param String $c
+ * @return String
+ */
+ function _rsaes_pkcs1_v1_5_decrypt($c)
+ {
+ // Length checking
+
+ if (strlen($c) != $this->k) { // or if k < 11
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+
+ // RSA decryption
+
+ $c = $this->_os2ip($c);
+ $m = $this->_rsadp($c);
+ if ($m === false) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+ $em = $this->_i2osp($m, $this->k);
+
+ // EME-PKCS1-v1_5 decoding
+
+ if (ord($em[0]) != 0 || ord($em[1]) != 2) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+
+ $ps = substr($em, 2, strpos($em, chr(0), 2) - 2);
+ $m = substr($em, strlen($ps) + 3);
+
+ if (strlen($ps) < 8) {
+ user_error('Decryption error', E_USER_NOTICE);
+ return false;
+ }
+
+ // Output M
+
+ return $m;
+ }
+
+ /**
+ * EMSA-PSS-ENCODE
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.
+ *
+ * @access private
+ * @param String $m
+ * @param Integer $emBits
*/
- function decryptBinary($enc_data, $key = null)
+ function _emsa_pss_encode($m, $emBits)
{
- if (is_null($key)) {
- // use current decryption key
- $key = $this->_dec_key;
+ // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
+ $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+ $mHash = $this->hash->hash($m);
+ if ($emLen < $this->hLen + $sLen + 2) {
+ user_error('Encoding error', E_USER_NOTICE);
+ return false;
+ }
+
+ $salt = $this->_random($sLen);
+ $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+ $h = $this->hash->hash($m2);
+ $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
+ $db = $ps . chr(1) . $salt;
+ $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+ $maskedDB = $db ^ $dbMask;
+ $maskedDB[0] = ~chr(0xFF << ($emBits & 7)) & $maskedDB[0];
+ $em = $maskedDB . $h . chr(0xBC);
+
+ return $em;
+ }
+
+ /**
+ * EMSA-PSS-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $em
+ * @param Integer $emBits
+ * @return String
+ */
+ function _emsa_pss_verify($m, $em, $emBits)
+ {
+ // if $m is larger than two million terrabytes and you're using sha1, PKCS#1 suggests a "Label too long" error
+ // be output.
+
+ $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8);
+ $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+
+ $mHash = $this->hash->hash($m);
+ if ($emLen < $this->hLen + $sLen + 2) {
+ return false;
+ }
+
+ if ($em[strlen($em) - 1] != chr(0xBC)) {
+ return false;
}
- else if (!Crypt_RSA_Key::isValid($key)) {
- $this->pushError('invalid decryption key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+
+ $maskedDB = substr($em, 0, $em - $this->hLen - 1);
+ $h = substr($em, $em - $this->hLen - 1, $this->hLen);
+ $temp = chr(0xFF << ($emBits & 7));
+ if ((~$maskedDB[0] & $temp) != $temp) {
+ return false;
+ }
+ $dbMask = $this->_mgf1($h, $emLen - $this->hLen - 1);
+ $db = $maskedDB ^ $dbMask;
+ $db[0] = ~chr(0xFF << ($emBits & 7)) & $db[0];
+ $temp = $emLen - $this->hLen - $sLen - 2;
+ if (substr($db, 0, $temp) != str_repeat(chr(0), $temp) || ord($db[$temp]) != 1) {
return false;
}
+ $salt = substr($db, $temp + 1); // should be $sLen long
+ $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
+ $h2 = $this->hash->hash($m2);
+ return $h == $h2;
+ }
+
+ /**
+ * RSASSA-PSS-SIGN
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pss_sign($m)
+ {
+ // EMSA-PSS encoding
- $exp = $this->_math_obj->bin2int($key->getExponent());
- $modulus = $this->_math_obj->bin2int($key->getModulus());
+ $em = $this->_emsa_pss_encode($m, 8 * $this->k - 1);
+
+ // RSA signature
+
+ $m = $this->_os2ip($em);
+ $s = $this->_rsasp1($m);
+ $s = $this->_i2osp($s, $this->k);
+
+ // Output the signature S
+
+ return $s;
+ }
+
+ /**
+ * RSASSA-PSS-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.
+ *
+ * @access private
+ * @param String $m
+ * @param String $s
+ * @return String
+ */
+ function _rsassa_pss_verify($m, $s)
+ {
+ // Length checking
- $data_len = strlen($enc_data);
- $chunk_len = $key->getKeyLength() - 1;
- $block_len = (int) ceil($chunk_len / 8);
- $curr_pos = 0;
- $bit_pos = 0;
- $plain_data = $this->_math_obj->bin2int("\0");
- while ($curr_pos < $data_len) {
- $tmp = $this->_math_obj->bin2int(substr($enc_data, $curr_pos, $block_len));
- $tmp = $this->_math_obj->powmod($tmp, $exp, $modulus);
- $plain_data = $this->_math_obj->bitOr($plain_data, $tmp, $bit_pos);
- $bit_pos += $chunk_len;
- $curr_pos += $block_len;
+ if (strlen($s) != $this->k) {
+ user_error('Invalid signature', E_USER_NOTICE);
+ return false;
}
- $result = $this->_math_obj->int2bin($plain_data);
- // delete tail, containing of \x01
- $tail = ord($result{strlen($result) - 1});
- if ($tail != 1) {
- $this->pushError("Error tail of decrypted text = {$tail}. Expected 1", CRYPT_RSA_ERROR_WRONG_TAIL);
+ // RSA verification
+
+ $modBits = 8 * $this->k;
+
+ $s2 = $this->_os2ip($s);
+ $m2 = $this->_rsavp1($s2);
+ if ($m2 === false) {
+ user_error('Invalid signature', E_USER_NOTICE);
return false;
}
- return substr($result, 0, -1);
+ $em = $this->_i2osp($m2, $modBits >> 3);
+ if ($em === false) {
+ user_error('Invalid signature', E_USER_NOTICE);
+ return false;
+ }
+
+ // EMSA-PSS verification
+
+ return $this->_emsa_pss_verify($m, $em, $modBits - 1);
}
/**
- * Creates sign for document $document, using $this->_private_key or $private_key
- * as private key and $this->_hash_func or $hash_func as hash function.
+ * EMSA-PKCS1-V1_5-ENCODE
*
- * @param string $document document, which must be signed
- * @param object $private_key private key (object of Crypt_RSA_Key type)
- * @param string $hash_func name of hash function, which will be used during signing
- * @return mixed
- * signature of $document as string on success or false on error
+ * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.
*
- * @access public
+ * @access private
+ * @param String $m
+ * @param Integer $emLen
+ * @return String
*/
- function createSign($document, $private_key = null, $hash_func = null)
+ function _emsa_pkcs1_v1_5_encode($m, $emLen)
{
- // check private key
- if (is_null($private_key)) {
- $private_key = $this->_private_key;
+ $h = $this->hash->hash($m);
+ if ($h === false) {
+ return false;
+ }
+
+ // see http://tools.ietf.org/html/rfc3447#page-43
+ switch ($this->hashName) {
+ case 'md2':
+ $t = pack('H*', '3020300c06082a864886f70d020205000410');
+ break;
+ case 'md5':
+ $t = pack('H*', '3020300c06082a864886f70d020505000410');
+ break;
+ case 'sha1':
+ $t = pack('H*', '3021300906052b0e03021a05000414');
+ break;
+ case 'sha256':
+ $t = pack('H*', '3031300d060960864801650304020105000420');
+ break;
+ case 'sha384':
+ $t = pack('H*', '3041300d060960864801650304020205000430');
+ break;
+ case 'sha512':
+ $t = pack('H*', '3051300d060960864801650304020305000440');
+ }
+ $t.= $h;
+ $tLen = strlen($t);
+
+ if ($emLen < $tLen + 11) {
+ user_error('Intended encoded message length too short', E_USER_NOTICE);
+ return false;
}
- else if (!Crypt_RSA_Key::isValid($private_key)) {
- $this->pushError('invalid private key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
+
+ $ps = str_repeat(chr(0xFF), $emLen - $tLen - 3);
+
+ $em = "\0\1$ps\0$t";
+
+ return $em;
+ }
+
+ /**
+ * RSASSA-PKCS1-V1_5-SIGN
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pkcs1_v1_5_sign($m)
+ {
+ // EMSA-PKCS1-v1_5 encoding
+
+ $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+ if ($em === false) {
+ user_error('RSA modulus too short', E_USER_NOTICE);
return false;
}
- if ($private_key->getKeyType() != 'private') {
- $this->pushError('signing key must be private', CRYPT_RSA_ERROR_NEED_PRV_KEY);
+
+ // RSA signature
+
+ $m = $this->_os2ip($em);
+ $s = $this->_rsasp1($m);
+ $s = $this->_i2osp($s, $this->k);
+
+ // Output the signature S
+
+ return $s;
+ }
+
+ /**
+ * RSASSA-PKCS1-V1_5-VERIFY
+ *
+ * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.
+ *
+ * @access private
+ * @param String $m
+ * @return String
+ */
+ function _rsassa_pkcs1_v1_5_verify($m, $s)
+ {
+ // Length checking
+
+ if (strlen($s) != $this->k) {
+ user_error('Invalid signature', E_USER_NOTICE);
return false;
}
- // check hash_func
- if (is_null($hash_func)) {
- $hash_func = $this->_hash_func;
+ // RSA verification
+
+ $s = $this->_os2ip($s);
+ $m2 = $this->_rsavp1($s);
+ if ($m2 === false) {
+ user_error('Invalid signature', E_USER_NOTICE);
+ return false;
+ }
+ $em = $this->_i2osp($m2, $this->k);
+ if ($em === false) {
+ user_error('Invalid signature', E_USER_NOTICE);
+ return false;
}
- if (!function_exists($hash_func)) {
- $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
+
+ // EMSA-PKCS1-v1_5 encoding
+
+ $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
+ if ($em2 === false) {
+ user_error('RSA modulus too short', E_USER_NOTICE);
return false;
}
- return $this->encrypt($hash_func($document), $private_key);
+ // Compare
+
+ return $em === $em2;
+ }
+
+ /**
+ * Set Encryption Mode
+ *
+ * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1.
+ *
+ * @access public
+ * @param Integer $mode
+ */
+ function setEncryptionMode($mode)
+ {
+ $this->encryptionMode = $mode;
+ }
+
+ /**
+ * Set Signature Mode
+ *
+ * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1
+ *
+ * @access public
+ * @param Integer $mode
+ */
+ function setSignatureMode($mode)
+ {
+ $this->signatureMode = $mode;
}
/**
- * Validates $signature for document $document with public key $this->_public_key
- * or $public_key and hash function $this->_hash_func or $hash_func.
+ * Encryption
*
- * @param string $document document, signature of which must be validated
- * @param string $signature signature, which must be validated
- * @param object $public_key public key (object of Crypt_RSA_Key class)
- * @param string $hash_func hash function, which will be used during validating signature
- * @return mixed
- * true, if signature of document is valid
- * false, if signature of document is invalid
- * null on error
+ * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be.
+ * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will
+ * be concatenated together.
*
+ * @see decrypt()
* @access public
+ * @param String $plaintext
+ * @return String
*/
- function validateSign($document, $signature, $public_key = null, $hash_func = null)
+ function encrypt($plaintext)
{
- // check public key
- if (is_null($public_key)) {
- $public_key = $this->_public_key;
+ switch ($this->encryptionMode) {
+ case CRYPT_RSA_ENCRYPTION_PKCS1:
+ $length = $this->k - 11;
+ if ($length <= 0) {
+ return false;
+ }
+
+ $plaintext = str_split($plaintext, $length);
+ $ciphertext = '';
+ foreach ($plaintext as $m) {
+ $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m);
+ }
+ return $ciphertext;
+ //case CRYPT_RSA_ENCRYPTION_OAEP:
+ default:
+ $length = $this->k - 2 * $this->hLen - 2;
+ if ($length <= 0) {
+ return false;
+ }
+
+ $plaintext = str_split($plaintext, $length);
+ $ciphertext = '';
+ foreach ($plaintext as $m) {
+ $ciphertext.= $this->_rsaes_oaep_encrypt($m);
+ }
+ return $ciphertext;
}
- else if (!Crypt_RSA_Key::isValid($public_key)) {
- $this->pushError('invalid public key. It must be an object of Crypt_RSA_Key class', CRYPT_RSA_ERROR_WRONG_KEY);
- return null;
+ }
+
+ /**
+ * Decryption
+ *
+ * @see encrypt()
+ * @access public
+ * @param String $plaintext
+ * @return String
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->k <= 0) {
+ return false;
}
- if ($public_key->getKeyType() != 'public') {
- $this->pushError('validating key must be public', CRYPT_RSA_ERROR_NEED_PUB_KEY);
- return null;
+
+ $ciphertext = str_split($ciphertext, $this->k);
+ $plaintext = '';
+
+ switch ($this->encryptionMode) {
+ case CRYPT_RSA_ENCRYPTION_PKCS1:
+ $decrypt = '_rsaes_pkcs1_v1_5_decrypt';
+ break;
+ //case CRYPT_RSA_ENCRYPTION_OAEP:
+ default:
+ $decrypt = '_rsaes_oaep_decrypt';
}
- // check hash_func
- if (is_null($hash_func)) {
- $hash_func = $this->_hash_func;
+ foreach ($ciphertext as $c) {
+ $temp = $this->$decrypt($c);
+ if ($temp === false) {
+ return false;
+ }
+ $plaintext.= $temp;
}
- if (!function_exists($hash_func)) {
- $this->pushError("cannot find hash function with name [$hash_func]", CRYPT_RSA_ERROR_WRONG_HASH_FUNC);
- return null;
+
+ return $plaintext;
+ }
+
+ /**
+ * Create a signature
+ *
+ * @see verify()
+ * @access public
+ * @param String $message
+ * @return String
+ */
+ function sign($message)
+ {
+ if (empty($this->modulus) || empty($this->exponent)) {
+ return false;
}
- return $hash_func($document) == $this->decrypt($signature, $public_key);
+ switch ($this->signatureMode) {
+ case CRYPT_RSA_SIGNATURE_PKCS1:
+ return $this->_rsassa_pkcs1_v1_5_sign($message);
+ //case CRYPT_RSA_SIGNATURE_PSS:
+ default:
+ return $this->_rsassa_pss_sign($message);
+ }
}
-}
-?> \ No newline at end of file
+ /**
+ * Verifies a signature
+ *
+ * @see sign()
+ * @access public
+ * @param String $message
+ * @param String $signature
+ * @return Boolean
+ */
+ function verify($message, $signature)
+ {
+ if (empty($this->modulus) || empty($this->exponent)) {
+ return false;
+ }
+
+ switch ($this->signatureMode) {
+ case CRYPT_RSA_SIGNATURE_PKCS1:
+ return $this->_rsassa_pkcs1_v1_5_verify($message, $signature);
+ //case CRYPT_RSA_SIGNATURE_PSS:
+ default:
+ return $this->_rsassa_pss_verify($message, $signature);
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php b/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php
deleted file mode 100644
index 8f39741e0..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/ErrorHandler.php
+++ /dev/null
@@ -1,234 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version CVS: $Id: ErrorHandler.php,v 1.4 2009/01/05 08:30:29 clockwerx Exp $
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * uses PEAR's error handling
- */
-require_once 'PEAR.php';
-
-/**
- * cannot load required extension for math wrapper
- */
-define('CRYPT_RSA_ERROR_NO_EXT', 1);
-
-/**
- * cannot load any math wrappers.
- * Possible reasons:
- * - there is no any wrappers (they must exist in Crypt/RSA/Math folder )
- * - all available wrappers are incorrect (read docs/Crypt_RSA/docs/math_wrappers.txt )
- * - cannot load any extension, required by available wrappers
- */
-define('CRYPT_RSA_ERROR_NO_WRAPPERS', 2);
-
-/**
- * cannot find file, containing requested math wrapper
- */
-define('CRYPT_RSA_ERROR_NO_FILE', 3);
-
-/**
- * cannot find math wrapper class in the math wrapper file
- */
-define('CRYPT_RSA_ERROR_NO_CLASS', 4);
-
-/**
- * invalid key type passed to function (it must be 'public' or 'private')
- */
-define('CRYPT_RSA_ERROR_WRONG_KEY_TYPE', 5);
-
-/**
- * key modulus must be greater than key exponent
- */
-define('CRYPT_RSA_ERROR_EXP_GE_MOD', 6);
-
-/**
- * missing $key_len parameter in Crypt_RSA_KeyPair::generate($key_len) function
- */
-define('CRYPT_RSA_ERROR_MISSING_KEY_LEN', 7);
-
-/**
- * wrong key object passed to function (it must be an object of Crypt_RSA_Key class)
- */
-define('CRYPT_RSA_ERROR_WRONG_KEY', 8);
-
-/**
- * wrong name of hash function passed to Crypt_RSA::setParams() function
- */
-define('CRYPT_RSA_ERROR_WRONG_HASH_FUNC', 9);
-
-/**
- * key, used for signing, must be private
- */
-define('CRYPT_RSA_ERROR_NEED_PRV_KEY', 10);
-
-/**
- * key, used for sign validating, must be public
- */
-define('CRYPT_RSA_ERROR_NEED_PUB_KEY', 11);
-
-/**
- * parameters must be passed to function as associative array
- */
-define('CRYPT_RSA_ERROR_WRONG_PARAMS', 12);
-
-/**
- * error tail of decrypted text. Maybe, wrong decryption key?
- */
-define('CRYPT_RSA_ERROR_WRONG_TAIL', 13);
-
-/**
- * Crypt_RSA_ErrorHandler class.
- *
- * This class is used as base for Crypt_RSA, Crypt_RSA_Key
- * and Crypt_RSA_KeyPair classes.
- *
- * It provides following functions:
- * - isError() - returns true, if list contains errors, else returns false
- * - getErrorList() - returns error list
- * - getLastError() - returns last error from error list or false, if list is empty
- * - pushError($errstr) - pushes $errstr into the error list
- * - setErrorHandler($new_error_handler) - sets error handler function
- * - getErrorHandler() - returns name of error handler function
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Crypt_RSA
- * @access public
- */
-class Crypt_RSA_ErrorHandler
-{
- /**
- * array of error objects, pushed by $this->pushError()
- *
- * @var array
- * @access private
- */
- var $_errors = array();
-
- /**
- * name of error handler - function, which calls on $this->pushError() call
- *
- * @var string
- * @access private
- */
- var $_error_handler = '';
-
- /**
- * Returns true if list of errors is not empty, else returns false
- *
- * @param mixed $err Check if the object is an error
- *
- * @return bool true, if list of errors is not empty or $err is PEAR_Error object, else false
- * @access public
- */
- function isError($err = null)
- {
- return is_null($err) ? (sizeof($this->_errors) > 0) : PEAR::isError($err);
- }
-
- /**
- * Returns list of all errors, pushed to error list by $this->pushError()
- *
- * @return array list of errors (usually it contains objects of PEAR_Error class)
- * @access public
- */
- function getErrorList()
- {
- return $this->_errors;
- }
-
- /**
- * Returns last error from errors list or false, if list is empty
- *
- * @return mixed
- * last error from errors list (usually it is PEAR_Error object)
- * or false, if list is empty.
- *
- * @access public
- */
- function getLastError()
- {
- $len = sizeof($this->_errors);
- return $len ? $this->_errors[$len - 1] : false;
- }
-
- /**
- * pushes error object $error to the error list
- *
- * @param string $errstr error string
- * @param int $errno error number
- *
- * @return bool true on success, false on error
- * @access public
- */
- function pushError($errstr, $errno = 0)
- {
- $this->_errors[] = PEAR::raiseError($errstr, $errno);
-
- if ($this->_error_handler != '') {
- // call user defined error handler
- $func = $this->_error_handler;
- $func($this);
- }
- return true;
- }
-
- /**
- * sets error handler to function with name $func_name.
- * Function $func_name must accept one parameter - current
- * object, which triggered error.
- *
- * @param string $func_name name of error handler function
- *
- * @return bool true on success, false on error
- * @access public
- */
- function setErrorHandler($func_name = '')
- {
- if ($func_name == '') {
- $this->_error_handler = '';
- }
- if (!function_exists($func_name)) {
- return false;
- }
- $this->_error_handler = $func_name;
- return true;
- }
-
- /**
- * returns name of current error handler, or null if there is no error handler
- *
- * @return mixed error handler name as string or null, if there is no error handler
- * @access public
- */
- function getErrorHandler()
- {
- return $this->_error_handler;
- }
-}
-
-?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Key.php b/plugins/OStatus/extlib/Crypt/RSA/Key.php
deleted file mode 100644
index 659530229..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/Key.php
+++ /dev/null
@@ -1,315 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version CVS: $Id: Key.php,v 1.6 2009/01/05 08:30:29 clockwerx Exp $
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * RSA error handling facilities
- */
-require_once 'Crypt/RSA/ErrorHandler.php';
-
-/**
- * loader for RSA math wrappers
- */
-require_once 'Crypt/RSA/MathLoader.php';
-
-/**
- * Crypt_RSA_Key class, derived from Crypt_RSA_ErrorHandler
- *
- * Provides the following functions:
- * - getKeyLength() - returns bit key length
- * - getExponent() - returns key exponent as binary string
- * - getModulus() - returns key modulus as binary string
- * - getKeyType() - returns type of the key (public or private)
- * - toString() - returns serialized key as string
- * - fromString($key_str) - static function; returns key, unserialized from string
- * - isValid($key) - static function for validating of $key
- *
- * Example usage:
- * // create new 1024-bit key pair
- * $key_pair = new Crypt_RSA_KeyPair(1024);
- *
- * // get public key (its class is Crypt_RSA_Key)
- * $key = $key_pair->getPublicKey();
- *
- * // get key length
- * $len = $key->getKeyLength();
- *
- * // get modulus as string
- * $modulus = $key->getModulus();
- *
- * // get exponent as string
- * $exponent = $key->getExponent();
- *
- * // get string represenation of key (use it instead of serialization of Crypt_RSA_Key object)
- * $key_in_str = $key->toString();
- *
- * // restore key object from string using 'BigInt' math wrapper
- * $key = Crypt_RSA_Key::fromString($key_in_str, 'BigInt');
- *
- * // error check
- * if ($key->isError()) {
- * echo "error while unserializing key object:\n";
- * $erorr = $key->getLastError();
- * echo $error->getMessage(), "\n";
- * }
- *
- * // validate key
- * if (Crypt_RSA_Key::isValid($key)) echo 'valid key';
- * else echo 'invalid key';
- *
- * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
- * $rsa_obj = &Crypt_RSA_Key::factory($modulus, $exp, $key_type);
- * if (PEAR::isError($rsa_obj)) {
- * echo "error: ", $rsa_obj->getMessage(), "\n";
- * }
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Crypt_RSA
- * @access public
- */
-class Crypt_RSA_Key extends Crypt_RSA_ErrorHandler
-{
- /**
- * Reference to math wrapper object, which is used to
- * manipulate large integers in RSA algorithm.
- *
- * @var object of Crypt_RSA_Math_* class
- * @access private
- */
- var $_math_obj;
-
- /**
- * shared modulus
- *
- * @var string
- * @access private
- */
- var $_modulus;
-
- /**
- * exponent
- *
- * @var string
- * @access private
- */
- var $_exp;
-
- /**
- * key type (private or public)
- *
- * @var string
- * @access private
- */
- var $_key_type;
-
- /**
- * key length in bits
- *
- * @var int
- * @access private
- */
- var $_key_len;
-
- /**
- * Crypt_RSA_Key constructor.
- *
- * You should pass in the name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- *
- * @param string $modulus key modulus
- * @param string $exp key exponent
- * @param string $key_type type of the key (public or private)
- * @param string $wrapper_name wrapper to use
- * @param string $error_handler name of error handler function
- *
- * @access public
- */
- function Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
- {
- // set error handler
- $this->setErrorHandler($error_handler);
- // try to load math wrapper $wrapper_name
- $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
- if ($this->isError($obj)) {
- // error during loading of math wrapper
- $this->pushError($obj); // push error object into error list
- return;
- }
- $this->_math_obj = &$obj;
-
- $this->_modulus = $modulus;
- $this->_exp = $exp;
-
- if (!in_array($key_type, array('private', 'public'))) {
- $this->pushError('invalid key type. It must be private or public', CRYPT_RSA_ERROR_WRONG_KEY_TYPE);
- return;
- }
- $this->_key_type = $key_type;
-
- /* check length of modulus & exponent ( abs(modulus) > abs(exp) ) */
- $mod_num = $this->_math_obj->bin2int($this->_modulus);
- $exp_num = $this->_math_obj->bin2int($this->_exp);
-
- if ($this->_math_obj->cmpAbs($mod_num, $exp_num) <= 0) {
- $this->pushError('modulus must be greater than exponent', CRYPT_RSA_ERROR_EXP_GE_MOD);
- return;
- }
-
- // determine key length
- $this->_key_len = $this->_math_obj->bitLen($mod_num);
- }
-
- /**
- * Crypt_RSA_Key factory.
- *
- * @param string $modulus key modulus
- * @param string $exp key exponent
- * @param string $key_type type of the key (public or private)
- * @param string $wrapper_name wrapper to use
- * @param string $error_handler name of error handler function
- *
- * @return object new Crypt_RSA_Key object on success or PEAR_Error object on failure
- * @access public
- */
- function factory($modulus, $exp, $key_type, $wrapper_name = 'default', $error_handler = '')
- {
- $obj = new Crypt_RSA_Key($modulus, $exp, $key_type, $wrapper_name, $error_handler);
- if ($obj->isError()) {
- // error during creating a new object. Retrurn PEAR_Error object
- return $obj->getLastError();
- }
- // object created successfully. Return it
- return $obj;
- }
-
- /**
- * Calculates bit length of the key
- *
- * @return int bit length of key
- * @access public
- */
- function getKeyLength()
- {
- return $this->_key_len;
- }
-
- /**
- * Returns modulus part of the key as binary string,
- * which can be used to construct new Crypt_RSA_Key object.
- *
- * @return string modulus as binary string
- * @access public
- */
- function getModulus()
- {
- return $this->_modulus;
- }
-
- /**
- * Returns exponent part of the key as binary string,
- * which can be used to construct new Crypt_RSA_Key object.
- *
- * @return string exponent as binary string
- * @access public
- */
- function getExponent()
- {
- return $this->_exp;
- }
-
- /**
- * Returns key type (public, private)
- *
- * @return string key type (public, private)
- * @access public
- */
- function getKeyType()
- {
- return $this->_key_type;
- }
-
- /**
- * Returns string representation of key
- *
- * @return string key, serialized to string
- * @access public
- */
- function toString()
- {
- return base64_encode(
- serialize(
- array($this->_modulus, $this->_exp, $this->_key_type)
- )
- );
- }
-
- /**
- * Returns Crypt_RSA_Key object, unserialized from
- * string representation of key.
- *
- * optional parameter $wrapper_name - is the name of math wrapper,
- * which will be used during unserialization of this object.
- *
- * This function can be called statically:
- * $key = Crypt_RSA_Key::fromString($key_in_string, 'BigInt');
- *
- * @param string $key_str RSA key, serialized into string
- * @param string $wrapper_name optional math wrapper name
- *
- * @return object key as Crypt_RSA_Key object
- * @access public
- * @static
- */
- function fromString($key_str, $wrapper_name = 'default')
- {
- list($modulus, $exponent, $key_type) = unserialize(base64_decode($key_str));
- $obj = new Crypt_RSA_Key($modulus, $exponent, $key_type, $wrapper_name);
- return $obj;
- }
-
- /**
- * Validates key
- * This function can be called statically:
- * $is_valid = Crypt_RSA_Key::isValid($key)
- *
- * Returns true, if $key is valid Crypt_RSA key, else returns false
- *
- * @param object $key Crypt_RSA_Key object for validating
- *
- * @return bool true if $key is valid, else false
- * @access public
- */
- function isValid($key)
- {
- return (is_object($key) && strtolower(get_class($key)) === strtolower(__CLASS__));
- }
-}
-
-?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php b/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php
deleted file mode 100644
index ecc0b7dc7..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/KeyPair.php
+++ /dev/null
@@ -1,804 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version CVS: $Id: KeyPair.php,v 1.7 2009/01/05 08:30:29 clockwerx Exp $
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * RSA error handling facilities
- */
-require_once 'Crypt/RSA/ErrorHandler.php';
-
-/**
- * loader for RSA math wrappers
- */
-require_once 'Crypt/RSA/MathLoader.php';
-
-/**
- * helper class for single key managing
- */
-require_once 'Crypt/RSA/Key.php';
-
-/**
- * Crypt_RSA_KeyPair class, derived from Crypt_RSA_ErrorHandler
- *
- * Provides the following functions:
- * - generate($key) - generates new key pair
- * - getPublicKey() - returns public key
- * - getPrivateKey() - returns private key
- * - getKeyLength() - returns bit key length
- * - setRandomGenerator($func_name) - sets random generator to $func_name
- * - fromPEMString($str) - retrieves keypair from PEM-encoded string
- * - toPEMString() - stores keypair to PEM-encoded string
- * - isEqual($keypair2) - compares current keypair to $keypair2
- *
- * Example usage:
- * // create new 1024-bit key pair
- * $key_pair = new Crypt_RSA_KeyPair(1024);
- *
- * // error check
- * if ($key_pair->isError()) {
- * echo "error while initializing Crypt_RSA_KeyPair object:\n";
- * $erorr = $key_pair->getLastError();
- * echo $error->getMessage(), "\n";
- * }
- *
- * // get public key
- * $public_key = $key_pair->getPublicKey();
- *
- * // get private key
- * $private_key = $key_pair->getPrivateKey();
- *
- * // generate new 512-bit key pair
- * $key_pair->generate(512);
- *
- * // error check
- * if ($key_pair->isError()) {
- * echo "error while generating key pair:\n";
- * $erorr = $key_pair->getLastError();
- * echo $error->getMessage(), "\n";
- * }
- *
- * // get key pair length
- * $length = $key_pair->getKeyLength();
- *
- * // set random generator to $func_name, where $func_name
- * // consists name of random generator function. See comments
- * // before setRandomGenerator() method for details
- * $key_pair->setRandomGenerator($func_name);
- *
- * // error check
- * if ($key_pair->isError()) {
- * echo "error while changing random generator:\n";
- * $erorr = $key_pair->getLastError();
- * echo $error->getMessage(), "\n";
- * }
- *
- * // using factory() method instead of constructor (it returns PEAR_Error object on failure)
- * $rsa_obj = &Crypt_RSA_KeyPair::factory($key_len);
- * if (PEAR::isError($rsa_obj)) {
- * echo "error: ", $rsa_obj->getMessage(), "\n";
- * }
- *
- * // read key pair from PEM-encoded string:
- * $str = "-----BEGIN RSA PRIVATE KEY-----"
- * . "MCsCAQACBHr5LDkCAwEAAQIEBc6jbQIDAOCfAgMAjCcCAk3pAgJMawIDAL41"
- * . "-----END RSA PRIVATE KEY-----";
- * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
- *
- * // read key pair from .pem file 'private.pem':
- * $str = file_get_contents('private.pem');
- * $keypair = Crypt_RSA_KeyPair::fromPEMString($str);
- *
- * // generate and write 1024-bit key pair to .pem file 'private_new.pem'
- * $keypair = new Crypt_RSA_KeyPair(1024);
- * $str = $keypair->toPEMString();
- * file_put_contents('private_new.pem', $str);
- *
- * // compare $keypair1 to $keypair2
- * if ($keypair1->isEqual($keypair2)) {
- * echo "keypair1 = keypair2\n";
- * }
- * else {
- * echo "keypair1 != keypair2\n";
- * }
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Crypt_RSA
- * @access public
- */
-class Crypt_RSA_KeyPair extends Crypt_RSA_ErrorHandler
-{
- /**
- * Reference to math wrapper object, which is used to
- * manipulate large integers in RSA algorithm.
- *
- * @var object of Crypt_RSA_Math_* class
- * @access private
- */
- var $_math_obj;
-
- /**
- * length of each key in the key pair
- *
- * @var int
- * @access private
- */
- var $_key_len;
-
- /**
- * public key
- *
- * @var object of Crypt_RSA_KEY class
- * @access private
- */
- var $_public_key;
-
- /**
- * private key
- *
- * @var object of Crypt_RSA_KEY class
- * @access private
- */
- var $_private_key;
-
- /**
- * name of function, which is used as random generator
- *
- * @var string
- * @access private
- */
- var $_random_generator;
-
- /**
- * RSA keypair attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp] as associative array
- *
- * @var array
- * @access private
- */
- var $_attrs;
-
- /**
- * Returns names of keypair attributes from $this->_attrs array
- *
- * @return array Array of keypair attributes names
- * @access private
- */
- function _get_attr_names()
- {
- return array('version', 'n', 'e', 'd', 'p', 'q', 'dmp1', 'dmq1', 'iqmp');
- }
-
- /**
- * Parses ASN.1 string [$str] starting form position [$pos].
- * Returns tag and string value of parsed object.
- *
- * @param string $str
- * @param int &$pos
- * @param Crypt_RSA_ErrorHandler &$err_handler
- *
- * @return mixed Array('tag' => ..., 'str' => ...) on success, false on error
- * @access private
- */
- function _ASN1Parse($str, &$pos, &$err_handler)
- {
- $max_pos = strlen($str);
- if ($max_pos < 2) {
- $err_handler->pushError("ASN.1 string too short");
- return false;
- }
-
- // get ASN.1 tag value
- $tag = ord($str[$pos++]) & 0x1f;
- if ($tag == 0x1f) {
- $tag = 0;
- do {
- $n = ord($str[$pos++]);
- $tag <<= 7;
- $tag |= $n & 0x7f;
- } while (($n & 0x80) && $pos < $max_pos);
- }
- if ($pos >= $max_pos) {
- $err_handler->pushError("ASN.1 string too short");
- return false;
- }
-
- // get ASN.1 object length
- $len = ord($str[$pos++]);
- if ($len & 0x80) {
- $n = $len & 0x1f;
- $len = 0;
- while ($n-- && $pos < $max_pos) {
- $len <<= 8;
- $len |= ord($str[$pos++]);
- }
- }
- if ($pos >= $max_pos || $len > $max_pos - $pos) {
- $err_handler->pushError("ASN.1 string too short");
- return false;
- }
-
- // get string value of ASN.1 object
- $str = substr($str, $pos, $len);
-
- return array(
- 'tag' => $tag,
- 'str' => $str,
- );
- }
-
- /**
- * Parses ASN.1 sting [$str] starting from position [$pos].
- * Returns string representation of number, which can be passed
- * in bin2int() function of math wrapper.
- *
- * @param string $str
- * @param int &$pos
- * @param Crypt_RSA_ErrorHandler &$err_handler
- *
- * @return mixed string representation of parsed number on success, false on error
- * @access private
- */
- function _ASN1ParseInt($str, &$pos, &$err_handler)
- {
- $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
- if ($err_handler->isError()) {
- return false;
- }
- if ($tmp['tag'] != 0x02) {
- $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x02 (INTEGER)", $tmp['tag']);
- $err_handler->pushError($errstr);
- return false;
- }
- $pos += strlen($tmp['str']);
-
- return strrev($tmp['str']);
- }
-
- /**
- * Constructs ASN.1 string from tag $tag and object $str
- *
- * @param string $str ASN.1 object string
- * @param int $tag ASN.1 tag value
- * @param bool $is_constructed
- * @param bool $is_private
- *
- * @return ASN.1-encoded string
- * @access private
- */
- function _ASN1Store($str, $tag, $is_constructed = false, $is_private = false)
- {
- $out = '';
-
- // encode ASN.1 tag value
- $tag_ext = ($is_constructed ? 0x20 : 0) | ($is_private ? 0xc0 : 0);
- if ($tag < 0x1f) {
- $out .= chr($tag | $tag_ext);
- } else {
- $out .= chr($tag_ext | 0x1f);
- $tmp = chr($tag & 0x7f);
- $tag >>= 7;
- while ($tag) {
- $tmp .= chr(($tag & 0x7f) | 0x80);
- $tag >>= 7;
- }
- $out .= strrev($tmp);
- }
-
- // encode ASN.1 object length
- $len = strlen($str);
- if ($len < 0x7f) {
- $out .= chr($len);
- } else {
- $tmp = '';
- $n = 0;
- while ($len) {
- $tmp .= chr($len & 0xff);
- $len >>= 8;
- $n++;
- }
- $out .= chr($n | 0x80);
- $out .= strrev($tmp);
- }
-
- return $out . $str;
- }
-
- /**
- * Constructs ASN.1 string from binary representation of big integer
- *
- * @param string $str binary representation of big integer
- *
- * @return ASN.1-encoded string
- * @access private
- */
- function _ASN1StoreInt($str)
- {
- $str = strrev($str);
- return Crypt_RSA_KeyPair::_ASN1Store($str, 0x02);
- }
-
- /**
- * Crypt_RSA_KeyPair constructor.
- *
- * Wrapper: name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- *
- * @param int $key_len bit length of key pair, which will be generated in constructor
- * @param string $wrapper_name wrapper name
- * @param string $error_handler name of error handler function
- * @param callback $random_generator function which will be used as random generator
- *
- * @access public
- */
- function Crypt_RSA_KeyPair($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
- {
- // set error handler
- $this->setErrorHandler($error_handler);
- // try to load math wrapper
- $obj = &Crypt_RSA_MathLoader::loadWrapper($wrapper_name);
- if ($this->isError($obj)) {
- // error during loading of math wrapper
- $this->pushError($obj);
- return;
- }
- $this->_math_obj = &$obj;
-
- // set random generator
- if (!$this->setRandomGenerator($random_generator)) {
- // error in setRandomGenerator() function
- return;
- }
-
- if (is_array($key_len)) {
- // ugly BC hack - it is possible to pass RSA private key attributes [version, n, e, d, p, q, dmp1, dmq1, iqmp]
- // as associative array instead of key length to Crypt_RSA_KeyPair constructor
- $rsa_attrs = $key_len;
-
- // convert attributes to big integers
- $attr_names = $this->_get_attr_names();
- foreach ($attr_names as $attr) {
- if (!isset($rsa_attrs[$attr])) {
- $this->pushError("missing required RSA attribute [$attr]");
- return;
- }
- ${$attr} = $this->_math_obj->bin2int($rsa_attrs[$attr]);
- }
-
- // check primality of p and q
- if (!$this->_math_obj->isPrime($p)) {
- $this->pushError("[p] must be prime");
- return;
- }
- if (!$this->_math_obj->isPrime($q)) {
- $this->pushError("[q] must be prime");
- return;
- }
-
- // check n = p * q
- $n1 = $this->_math_obj->mul($p, $q);
- if ($this->_math_obj->cmpAbs($n, $n1)) {
- $this->pushError("n != p * q");
- return;
- }
-
- // check e * d = 1 mod (p-1) * (q-1)
- $p1 = $this->_math_obj->dec($p);
- $q1 = $this->_math_obj->dec($q);
- $p1q1 = $this->_math_obj->mul($p1, $q1);
- $ed = $this->_math_obj->mul($e, $d);
- $one = $this->_math_obj->mod($ed, $p1q1);
- if (!$this->_math_obj->isOne($one)) {
- $this->pushError("e * d != 1 mod (p-1)*(q-1)");
- return;
- }
-
- // check dmp1 = d mod (p-1)
- $dmp = $this->_math_obj->mod($d, $p1);
- if ($this->_math_obj->cmpAbs($dmp, $dmp1)) {
- $this->pushError("dmp1 != d mod (p-1)");
- return;
- }
-
- // check dmq1 = d mod (q-1)
- $dmq = $this->_math_obj->mod($d, $q1);
- if ($this->_math_obj->cmpAbs($dmq, $dmq1)) {
- $this->pushError("dmq1 != d mod (q-1)");
- return;
- }
-
- // check iqmp = 1/q mod p
- $q1 = $this->_math_obj->invmod($iqmp, $p);
- if ($this->_math_obj->cmpAbs($q, $q1)) {
- $this->pushError("iqmp != 1/q mod p");
- return;
- }
-
- // try to create public key object
- $public_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['e'], 'public', $wrapper_name, $error_handler);
- if ($public_key->isError()) {
- // error during creating public object
- $this->pushError($public_key->getLastError());
- return;
- }
-
- // try to create private key object
- $private_key = &new Crypt_RSA_Key($rsa_attrs['n'], $rsa_attrs['d'], 'private', $wrapper_name, $error_handler);
- if ($private_key->isError()) {
- // error during creating private key object
- $this->pushError($private_key->getLastError());
- return;
- }
-
- $this->_public_key = $public_key;
- $this->_private_key = $private_key;
- $this->_key_len = $public_key->getKeyLength();
- $this->_attrs = $rsa_attrs;
- } else {
- // generate key pair
- if (!$this->generate($key_len)) {
- // error during generating key pair
- return;
- }
- }
- }
-
- /**
- * Crypt_RSA_KeyPair factory.
- *
- * Wrapper - Name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- *
- * @param int $key_len bit length of key pair, which will be generated in constructor
- * @param string $wrapper_name wrapper name
- * @param string $error_handler name of error handler function
- * @param callback $random_generator function which will be used as random generator
- *
- * @return object new Crypt_RSA_KeyPair object on success or PEAR_Error object on failure
- * @access public
- */
- function &factory($key_len, $wrapper_name = 'default', $error_handler = '', $random_generator = null)
- {
- $obj = &new Crypt_RSA_KeyPair($key_len, $wrapper_name, $error_handler, $random_generator);
- if ($obj->isError()) {
- // error during creating a new object. Return PEAR_Error object
- return $obj->getLastError();
- }
- // object created successfully. Return it
- return $obj;
- }
-
- /**
- * Generates new Crypt_RSA key pair with length $key_len.
- * If $key_len is missed, use an old key length from $this->_key_len
- *
- * @param int $key_len bit length of key pair, which will be generated
- *
- * @return bool true on success or false on error
- * @access public
- */
- function generate($key_len = null)
- {
- if (is_null($key_len)) {
- // use an old key length
- $key_len = $this->_key_len;
- if (is_null($key_len)) {
- $this->pushError('missing key_len parameter', CRYPT_RSA_ERROR_MISSING_KEY_LEN);
- return false;
- }
- }
-
- // minimal key length is 8 bit ;)
- if ($key_len < 8) {
- $key_len = 8;
- }
- // store key length in the _key_len property
- $this->_key_len = $key_len;
-
- // set [e] to 0x10001 (65537)
- $e = $this->_math_obj->bin2int("\x01\x00\x01");
-
- // generate [p], [q] and [n]
- $p_len = intval(($key_len + 1) / 2);
- $q_len = $key_len - $p_len;
- $p1 = $q1 = 0;
- do {
- // generate prime number [$p] with length [$p_len] with the following condition:
- // GCD($e, $p - 1) = 1
- do {
- $p = $this->_math_obj->getPrime($p_len, $this->_random_generator);
- $p1 = $this->_math_obj->dec($p);
- $tmp = $this->_math_obj->GCD($e, $p1);
- } while (!$this->_math_obj->isOne($tmp));
- // generate prime number [$q] with length [$q_len] with the following conditions:
- // GCD($e, $q - 1) = 1
- // $q != $p
- do {
- $q = $this->_math_obj->getPrime($q_len, $this->_random_generator);
- $q1 = $this->_math_obj->dec($q);
- $tmp = $this->_math_obj->GCD($e, $q1);
- } while (!$this->_math_obj->isOne($tmp) && !$this->_math_obj->cmpAbs($q, $p));
- // if (p < q), then exchange them
- if ($this->_math_obj->cmpAbs($p, $q) < 0) {
- $tmp = $p;
- $p = $q;
- $q = $tmp;
- $tmp = $p1;
- $p1 = $q1;
- $q1 = $tmp;
- }
- // calculate n = p * q
- $n = $this->_math_obj->mul($p, $q);
- } while ($this->_math_obj->bitLen($n) != $key_len);
-
- // calculate d = 1/e mod (p - 1) * (q - 1)
- $pq = $this->_math_obj->mul($p1, $q1);
- $d = $this->_math_obj->invmod($e, $pq);
-
- // calculate dmp1 = d mod (p - 1)
- $dmp1 = $this->_math_obj->mod($d, $p1);
-
- // calculate dmq1 = d mod (q - 1)
- $dmq1 = $this->_math_obj->mod($d, $q1);
-
- // calculate iqmp = 1/q mod p
- $iqmp = $this->_math_obj->invmod($q, $p);
-
- // store RSA keypair attributes
- $this->_attrs = array(
- 'version' => "\x00",
- 'n' => $this->_math_obj->int2bin($n),
- 'e' => $this->_math_obj->int2bin($e),
- 'd' => $this->_math_obj->int2bin($d),
- 'p' => $this->_math_obj->int2bin($p),
- 'q' => $this->_math_obj->int2bin($q),
- 'dmp1' => $this->_math_obj->int2bin($dmp1),
- 'dmq1' => $this->_math_obj->int2bin($dmq1),
- 'iqmp' => $this->_math_obj->int2bin($iqmp),
- );
-
- $n = $this->_attrs['n'];
- $e = $this->_attrs['e'];
- $d = $this->_attrs['d'];
-
- // try to create public key object
- $obj = &new Crypt_RSA_Key($n, $e, 'public', $this->_math_obj->getWrapperName(), $this->_error_handler);
- if ($obj->isError()) {
- // error during creating public object
- $this->pushError($obj->getLastError());
- return false;
- }
- $this->_public_key = &$obj;
-
- // try to create private key object
- $obj = &new Crypt_RSA_Key($n, $d, 'private', $this->_math_obj->getWrapperName(), $this->_error_handler);
- if ($obj->isError()) {
- // error during creating private key object
- $this->pushError($obj->getLastError());
- return false;
- }
- $this->_private_key = &$obj;
-
- return true; // key pair successfully generated
- }
-
- /**
- * Returns public key from the pair
- *
- * @return object public key object of class Crypt_RSA_Key
- * @access public
- */
- function getPublicKey()
- {
- return $this->_public_key;
- }
-
- /**
- * Returns private key from the pair
- *
- * @return object private key object of class Crypt_RSA_Key
- * @access public
- */
- function getPrivateKey()
- {
- return $this->_private_key;
- }
-
- /**
- * Sets name of random generator function for key generation.
- * If parameter is skipped, then sets to default random generator.
- *
- * Random generator function must return integer with at least 8 lower
- * significant bits, which will be used as random values.
- *
- * @param string $random_generator name of random generator function
- *
- * @return bool true on success or false on error
- * @access public
- */
- function setRandomGenerator($random_generator = null)
- {
- static $default_random_generator = null;
-
- if (is_string($random_generator)) {
- // set user's random generator
- if (!function_exists($random_generator)) {
- $this->pushError("can't find random generator function with name [{$random_generator}]");
- return false;
- }
- $this->_random_generator = $random_generator;
- } else {
- // set default random generator
- $this->_random_generator = is_null($default_random_generator) ?
- ($default_random_generator = create_function('', '$a=explode(" ",microtime());return(int)($a[0]*1000000);')) :
- $default_random_generator;
- }
- return true;
- }
-
- /**
- * Returns length of each key in the key pair
- *
- * @return int bit length of each key in key pair
- * @access public
- */
- function getKeyLength()
- {
- return $this->_key_len;
- }
-
- /**
- * Retrieves RSA keypair from PEM-encoded string, containing RSA private key.
- * Example of such string:
- * -----BEGIN RSA PRIVATE KEY-----
- * MCsCAQACBHtvbSECAwEAAQIEeYrk3QIDAOF3AgMAjCcCAmdnAgJMawIDALEk
- * -----END RSA PRIVATE KEY-----
- *
- * Wrapper: Name of math wrapper, which will be used to
- * perform different operations with big integers.
- * See contents of Crypt/RSA/Math folder for examples of wrappers.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details.
- *
- * @param string $str PEM-encoded string
- * @param string $wrapper_name Wrapper name
- * @param string $error_handler name of error handler function
- *
- * @return Crypt_RSA_KeyPair object on success, PEAR_Error object on error
- * @access public
- * @static
- */
- function &fromPEMString($str, $wrapper_name = 'default', $error_handler = '')
- {
- if (isset($this)) {
- if ($wrapper_name == 'default') {
- $wrapper_name = $this->_math_obj->getWrapperName();
- }
- if ($error_handler == '') {
- $error_handler = $this->_error_handler;
- }
- }
- $err_handler = &new Crypt_RSA_ErrorHandler;
- $err_handler->setErrorHandler($error_handler);
-
- // search for base64-encoded private key
- if (!preg_match('/-----BEGIN RSA PRIVATE KEY-----([^-]+)-----END RSA PRIVATE KEY-----/', $str, $matches)) {
- $err_handler->pushError("can't find RSA private key in the string [{$str}]");
- return $err_handler->getLastError();
- }
-
- // parse private key. It is ASN.1-encoded
- $str = base64_decode($matches[1]);
- $pos = 0;
- $tmp = Crypt_RSA_KeyPair::_ASN1Parse($str, $pos, $err_handler);
- if ($err_handler->isError()) {
- return $err_handler->getLastError();
- }
- if ($tmp['tag'] != 0x10) {
- $errstr = sprintf("wrong ASN tag value: 0x%02x. Expected 0x10 (SEQUENCE)", $tmp['tag']);
- $err_handler->pushError($errstr);
- return $err_handler->getLastError();
- }
-
- // parse ASN.1 SEQUENCE for RSA private key
- $attr_names = Crypt_RSA_KeyPair::_get_attr_names();
- $n = sizeof($attr_names);
- $rsa_attrs = array();
- for ($i = 0; $i < $n; $i++) {
- $tmp = Crypt_RSA_KeyPair::_ASN1ParseInt($str, $pos, $err_handler);
- if ($err_handler->isError()) {
- return $err_handler->getLastError();
- }
- $attr = $attr_names[$i];
- $rsa_attrs[$attr] = $tmp;
- }
-
- // create Crypt_RSA_KeyPair object.
- $keypair = &new Crypt_RSA_KeyPair($rsa_attrs, $wrapper_name, $error_handler);
- if ($keypair->isError()) {
- return $keypair->getLastError();
- }
-
- return $keypair;
- }
-
- /**
- * converts keypair to PEM-encoded string, which can be stroed in
- * .pem compatible files, contianing RSA private key.
- *
- * @return string PEM-encoded keypair on success, false on error
- * @access public
- */
- function toPEMString()
- {
- // store RSA private key attributes into ASN.1 string
- $str = '';
- $attr_names = $this->_get_attr_names();
- $n = sizeof($attr_names);
- $rsa_attrs = $this->_attrs;
- for ($i = 0; $i < $n; $i++) {
- $attr = $attr_names[$i];
- if (!isset($rsa_attrs[$attr])) {
- $this->pushError("Cannot find value for ASN.1 attribute [$attr]");
- return false;
- }
- $tmp = $rsa_attrs[$attr];
- $str .= Crypt_RSA_KeyPair::_ASN1StoreInt($tmp);
- }
-
- // prepend $str by ASN.1 SEQUENCE (0x10) header
- $str = Crypt_RSA_KeyPair::_ASN1Store($str, 0x10, true);
-
- // encode and format PEM string
- $str = base64_encode($str);
- $str = chunk_split($str, 64, "\n");
- return "-----BEGIN RSA PRIVATE KEY-----\n$str-----END RSA PRIVATE KEY-----\n";
- }
-
- /**
- * Compares keypairs in Crypt_RSA_KeyPair objects $this and $key_pair
- *
- * @param Crypt_RSA_KeyPair $key_pair keypair to compare
- *
- * @return bool true, if keypair stored in $this equal to keypair stored in $key_pair
- * @access public
- */
- function isEqual($key_pair)
- {
- $attr_names = $this->_get_attr_names();
- foreach ($attr_names as $attr) {
- if ($this->_attrs[$attr] != $key_pair->_attrs[$attr]) {
- return false;
- }
- }
- return true;
- }
-}
-
-?>
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php
deleted file mode 100644
index 646ff6710..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/Math/BCMath.php
+++ /dev/null
@@ -1,482 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version 1.2.0b
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * Crypt_RSA_Math_BCMath class.
- *
- * Provides set of math functions, which are used by Crypt_RSA package
- * This class is a wrapper for PHP BCMath extension.
- * See http://php.net/manual/en/ref.bc.php for details.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @link http://pear.php.net/package/Crypt_RSA
- * @version @package_version@
- * @access public
- */
-class Crypt_RSA_Math_BCMath
-{
- /**
- * error description
- *
- * @var string
- * @access public
- */
- var $errstr = '';
-
- /**
- * Performs Miller-Rabin primality test for number $num
- * with base $base. Returns true, if $num is strong pseudoprime
- * by base $base. Else returns false.
- *
- * @param string $num
- * @param string $base
- * @return bool
- * @access private
- */
- function _millerTest($num, $base)
- {
- if (!bccomp($num, '1')) {
- // 1 is not prime ;)
- return false;
- }
- $tmp = bcsub($num, '1');
-
- $zero_bits = 0;
- while (!bccomp(bcmod($tmp, '2'), '0')) {
- $zero_bits++;
- $tmp = bcdiv($tmp, '2');
- }
-
- $tmp = $this->powmod($base, $tmp, $num);
- if (!bccomp($tmp, '1')) {
- // $num is probably prime
- return true;
- }
-
- while ($zero_bits--) {
- if (!bccomp(bcadd($tmp, '1'), $num)) {
- // $num is probably prime
- return true;
- }
- $tmp = $this->powmod($tmp, '2', $num);
- }
- // $num is composite
- return false;
- }
-
- /**
- * Crypt_RSA_Math_BCMath constructor.
- * Checks an existance of PHP BCMath extension.
- * On failure saves error description in $this->errstr
- *
- * @access public
- */
- function Crypt_RSA_Math_BCMath()
- {
- if (!extension_loaded('bcmath')) {
- if (!@dl('bcmath.' . PHP_SHLIB_SUFFIX) && !@dl('php_bcmath.' . PHP_SHLIB_SUFFIX)) {
- // cannot load BCMath extension. Set error string
- $this->errstr = 'Crypt_RSA package requires the BCMath extension. See http://php.net/manual/en/ref.bc.php for details';
- return;
- }
- }
- }
-
- /**
- * Transforms binary representation of large integer into its native form.
- *
- * Example of transformation:
- * $str = "\x12\x34\x56\x78\x90";
- * $num = 0x9078563412;
- *
- * @param string $str
- * @return string
- * @access public
- */
- function bin2int($str)
- {
- $result = '0';
- $n = strlen($str);
- do {
- $result = bcadd(bcmul($result, '256'), ord($str{--$n}));
- } while ($n > 0);
- return $result;
- }
-
- /**
- * Transforms large integer into binary representation.
- *
- * Example of transformation:
- * $num = 0x9078563412;
- * $str = "\x12\x34\x56\x78\x90";
- *
- * @param string $num
- * @return string
- * @access public
- */
- function int2bin($num)
- {
- $result = '';
- do {
- $result .= chr(bcmod($num, '256'));
- $num = bcdiv($num, '256');
- } while (bccomp($num, '0'));
- return $result;
- }
-
- /**
- * Calculates pow($num, $pow) (mod $mod)
- *
- * @param string $num
- * @param string $pow
- * @param string $mod
- * @return string
- * @access public
- */
- function powmod($num, $pow, $mod)
- {
- if (function_exists('bcpowmod')) {
- // bcpowmod is only available under PHP5
- return bcpowmod($num, $pow, $mod);
- }
-
- // emulate bcpowmod
- $result = '1';
- do {
- if (!bccomp(bcmod($pow, '2'), '1')) {
- $result = bcmod(bcmul($result, $num), $mod);
- }
- $num = bcmod(bcpow($num, '2'), $mod);
- $pow = bcdiv($pow, '2');
- } while (bccomp($pow, '0'));
- return $result;
- }
-
- /**
- * Calculates $num1 * $num2
- *
- * @param string $num1
- * @param string $num2
- * @return string
- * @access public
- */
- function mul($num1, $num2)
- {
- return bcmul($num1, $num2);
- }
-
- /**
- * Calculates $num1 % $num2
- *
- * @param string $num1
- * @param string $num2
- * @return string
- * @access public
- */
- function mod($num1, $num2)
- {
- return bcmod($num1, $num2);
- }
-
- /**
- * Compares abs($num1) to abs($num2).
- * Returns:
- * -1, if abs($num1) < abs($num2)
- * 0, if abs($num1) == abs($num2)
- * 1, if abs($num1) > abs($num2)
- *
- * @param string $num1
- * @param string $num2
- * @return int
- * @access public
- */
- function cmpAbs($num1, $num2)
- {
- return bccomp($num1, $num2);
- }
-
- /**
- * Tests $num on primality. Returns true, if $num is strong pseudoprime.
- * Else returns false.
- *
- * @param string $num
- * @return bool
- * @access private
- */
- function isPrime($num)
- {
- static $primes = null;
- static $primes_cnt = 0;
- if (is_null($primes)) {
- // generate all primes up to 10000
- $primes = array();
- for ($i = 0; $i < 10000; $i++) {
- $primes[] = $i;
- }
- $primes[0] = $primes[1] = 0;
- for ($i = 2; $i < 100; $i++) {
- while (!$primes[$i]) {
- $i++;
- }
- $j = $i;
- for ($j += $i; $j < 10000; $j += $i) {
- $primes[$j] = 0;
- }
- }
- $j = 0;
- for ($i = 0; $i < 10000; $i++) {
- if ($primes[$i]) {
- $primes[$j++] = $primes[$i];
- }
- }
- $primes_cnt = $j;
- }
-
- // try to divide number by small primes
- for ($i = 0; $i < $primes_cnt; $i++) {
- if (bccomp($num, $primes[$i]) <= 0) {
- // number is prime
- return true;
- }
- if (!bccomp(bcmod($num, $primes[$i]), '0')) {
- // number divides by $primes[$i]
- return false;
- }
- }
-
- /*
- try Miller-Rabin's probable-primality test for first
- 7 primes as bases
- */
- for ($i = 0; $i < 7; $i++) {
- if (!$this->_millerTest($num, $primes[$i])) {
- // $num is composite
- return false;
- }
- }
- // $num is strong pseudoprime
- return true;
- }
-
- /**
- * Generates prime number with length $bits_cnt
- * using $random_generator as random generator function.
- *
- * @param int $bits_cnt
- * @param string $rnd_generator
- * @access public
- */
- function getPrime($bits_cnt, $random_generator)
- {
- $bytes_n = intval($bits_cnt / 8);
- $bits_n = $bits_cnt % 8;
- do {
- $str = '';
- for ($i = 0; $i < $bytes_n; $i++) {
- $str .= chr(call_user_func($random_generator) & 0xff);
- }
- $n = call_user_func($random_generator) & 0xff;
- $n |= 0x80;
- $n >>= 8 - $bits_n;
- $str .= chr($n);
- $num = $this->bin2int($str);
-
- // search for the next closest prime number after [$num]
- if (!bccomp(bcmod($num, '2'), '0')) {
- $num = bcadd($num, '1');
- }
- while (!$this->isPrime($num)) {
- $num = bcadd($num, '2');
- }
- } while ($this->bitLen($num) != $bits_cnt);
- return $num;
- }
-
- /**
- * Calculates $num - 1
- *
- * @param string $num
- * @return string
- * @access public
- */
- function dec($num)
- {
- return bcsub($num, '1');
- }
-
- /**
- * Returns true, if $num is equal to one. Else returns false
- *
- * @param string $num
- * @return bool
- * @access public
- */
- function isOne($num)
- {
- return !bccomp($num, '1');
- }
-
- /**
- * Finds greatest common divider (GCD) of $num1 and $num2
- *
- * @param string $num1
- * @param string $num2
- * @return string
- * @access public
- */
- function GCD($num1, $num2)
- {
- do {
- $tmp = bcmod($num1, $num2);
- $num1 = $num2;
- $num2 = $tmp;
- } while (bccomp($num2, '0'));
- return $num1;
- }
-
- /**
- * Finds inverse number $inv for $num by modulus $mod, such as:
- * $inv * $num = 1 (mod $mod)
- *
- * @param string $num
- * @param string $mod
- * @return string
- * @access public
- */
- function invmod($num, $mod)
- {
- $x = '1';
- $y = '0';
- $num1 = $mod;
- do {
- $tmp = bcmod($num, $num1);
- $q = bcdiv($num, $num1);
- $num = $num1;
- $num1 = $tmp;
-
- $tmp = bcsub($x, bcmul($y, $q));
- $x = $y;
- $y = $tmp;
- } while (bccomp($num1, '0'));
- if (bccomp($x, '0') < 0) {
- $x = bcadd($x, $mod);
- }
- return $x;
- }
-
- /**
- * Returns bit length of number $num
- *
- * @param string $num
- * @return int
- * @access public
- */
- function bitLen($num)
- {
- $tmp = $this->int2bin($num);
- $bit_len = strlen($tmp) * 8;
- $tmp = ord($tmp{strlen($tmp) - 1});
- if (!$tmp) {
- $bit_len -= 8;
- }
- else {
- while (!($tmp & 0x80)) {
- $bit_len--;
- $tmp <<= 1;
- }
- }
- return $bit_len;
- }
-
- /**
- * Calculates bitwise or of $num1 and $num2,
- * starting from bit $start_pos for number $num1
- *
- * @param string $num1
- * @param string $num2
- * @param int $start_pos
- * @return string
- * @access public
- */
- function bitOr($num1, $num2, $start_pos)
- {
- $start_byte = intval($start_pos / 8);
- $start_bit = $start_pos % 8;
- $tmp1 = $this->int2bin($num1);
-
- $num2 = bcmul($num2, 1 << $start_bit);
- $tmp2 = $this->int2bin($num2);
- if ($start_byte < strlen($tmp1)) {
- $tmp2 |= substr($tmp1, $start_byte);
- $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
- }
- else {
- $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
- }
- return $this->bin2int($tmp1);
- }
-
- /**
- * Returns part of number $num, starting at bit
- * position $start with length $length
- *
- * @param string $num
- * @param int start
- * @param int length
- * @return string
- * @access public
- */
- function subint($num, $start, $length)
- {
- $start_byte = intval($start / 8);
- $start_bit = $start % 8;
- $byte_length = intval($length / 8);
- $bit_length = $length % 8;
- if ($bit_length) {
- $byte_length++;
- }
- $num = bcdiv($num, 1 << $start_bit);
- $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
- $tmp = str_pad($tmp, $byte_length, "\0");
- $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
- return $this->bin2int($tmp);
- }
-
- /**
- * Returns name of current wrapper
- *
- * @return string name of current wrapper
- * @access public
- */
- function getWrapperName()
- {
- return 'BCMath';
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php b/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php
deleted file mode 100644
index b7ac24cb6..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/Math/BigInt.php
+++ /dev/null
@@ -1,313 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version 1.2.0b
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * Crypt_RSA_Math_BigInt class.
- *
- * Provides set of math functions, which are used by Crypt_RSA package
- * This class is a wrapper for big_int PECL extension,
- * which could be loaded from http://pecl.php.net/packages/big_int
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @link http://pear.php.net/package/Crypt_RSA
- * @version @package_version@
- * @access public
- */
-class Crypt_RSA_Math_BigInt
-{
- /**
- * error description
- *
- * @var string
- * @access public
- */
- var $errstr = '';
-
- /**
- * Crypt_RSA_Math_BigInt constructor.
- * Checks an existance of big_int PECL math package.
- * This package is available at http://pecl.php.net/packages/big_int
- * On failure saves error description in $this->errstr
- *
- * @access public
- */
- function Crypt_RSA_Math_BigInt()
- {
- if (!extension_loaded('big_int')) {
- if (!@dl('big_int.' . PHP_SHLIB_SUFFIX) && !@dl('php_big_int.' . PHP_SHLIB_SUFFIX)) {
- // cannot load big_int extension
- $this->errstr = 'Crypt_RSA package requires big_int PECL package. ' .
- 'It is available at http://pecl.php.net/packages/big_int';
- return;
- }
- }
-
- // check version of big_int extension ( Crypt_RSA requires version 1.0.2 and higher )
- if (!in_array('bi_info', get_extension_funcs('big_int'))) {
- // there is no bi_info() function in versions, older than 1.0.2
- $this->errstr = 'Crypt_RSA package requires big_int package version 1.0.2 and higher';
- }
- }
-
- /**
- * Transforms binary representation of large integer into its native form.
- *
- * Example of transformation:
- * $str = "\x12\x34\x56\x78\x90";
- * $num = 0x9078563412;
- *
- * @param string $str
- * @return big_int resource
- * @access public
- */
- function bin2int($str)
- {
- return bi_unserialize($str);
- }
-
- /**
- * Transforms large integer into binary representation.
- *
- * Example of transformation:
- * $num = 0x9078563412;
- * $str = "\x12\x34\x56\x78\x90";
- *
- * @param big_int resource $num
- * @return string
- * @access public
- */
- function int2bin($num)
- {
- return bi_serialize($num);
- }
-
- /**
- * Calculates pow($num, $pow) (mod $mod)
- *
- * @param big_int resource $num
- * @param big_int resource $pow
- * @param big_int resource $mod
- * @return big_int resource
- * @access public
- */
- function powmod($num, $pow, $mod)
- {
- return bi_powmod($num, $pow, $mod);
- }
-
- /**
- * Calculates $num1 * $num2
- *
- * @param big_int resource $num1
- * @param big_int resource $num2
- * @return big_int resource
- * @access public
- */
- function mul($num1, $num2)
- {
- return bi_mul($num1, $num2);
- }
-
- /**
- * Calculates $num1 % $num2
- *
- * @param string $num1
- * @param string $num2
- * @return string
- * @access public
- */
- function mod($num1, $num2)
- {
- return bi_mod($num1, $num2);
- }
-
- /**
- * Compares abs($num1) to abs($num2).
- * Returns:
- * -1, if abs($num1) < abs($num2)
- * 0, if abs($num1) == abs($num2)
- * 1, if abs($num1) > abs($num2)
- *
- * @param big_int resource $num1
- * @param big_int resource $num2
- * @return int
- * @access public
- */
- function cmpAbs($num1, $num2)
- {
- return bi_cmp_abs($num1, $num2);
- }
-
- /**
- * Tests $num on primality. Returns true, if $num is strong pseudoprime.
- * Else returns false.
- *
- * @param string $num
- * @return bool
- * @access private
- */
- function isPrime($num)
- {
- return bi_is_prime($num) ? true : false;
- }
-
- /**
- * Generates prime number with length $bits_cnt
- * using $random_generator as random generator function.
- *
- * @param int $bits_cnt
- * @param string $rnd_generator
- * @access public
- */
- function getPrime($bits_cnt, $random_generator)
- {
- $bytes_n = intval($bits_cnt / 8);
- $bits_n = $bits_cnt % 8;
- do {
- $str = '';
- for ($i = 0; $i < $bytes_n; $i++) {
- $str .= chr(call_user_func($random_generator) & 0xff);
- }
- $n = call_user_func($random_generator) & 0xff;
- $n |= 0x80;
- $n >>= 8 - $bits_n;
- $str .= chr($n);
- $num = $this->bin2int($str);
-
- // search for the next closest prime number after [$num]
- $num = bi_next_prime($num);
- } while ($this->bitLen($num) != $bits_cnt);
- return $num;
- }
-
- /**
- * Calculates $num - 1
- *
- * @param big_int resource $num
- * @return big_int resource
- * @access public
- */
- function dec($num)
- {
- return bi_dec($num);
- }
-
- /**
- * Returns true, if $num is equal to 1. Else returns false
- *
- * @param big_int resource $num
- * @return bool
- * @access public
- */
- function isOne($num)
- {
- return bi_is_one($num);
- }
-
- /**
- * Finds greatest common divider (GCD) of $num1 and $num2
- *
- * @param big_int resource $num1
- * @param big_int resource $num2
- * @return big_int resource
- * @access public
- */
- function GCD($num1, $num2)
- {
- return bi_gcd($num1, $num2);
- }
-
- /**
- * Finds inverse number $inv for $num by modulus $mod, such as:
- * $inv * $num = 1 (mod $mod)
- *
- * @param big_int resource $num
- * @param big_int resource $mod
- * @return big_int resource
- * @access public
- */
- function invmod($num, $mod)
- {
- return bi_invmod($num, $mod);
- }
-
- /**
- * Returns bit length of number $num
- *
- * @param big_int resource $num
- * @return int
- * @access public
- */
- function bitLen($num)
- {
- return bi_bit_len($num);
- }
-
- /**
- * Calculates bitwise or of $num1 and $num2,
- * starting from bit $start_pos for number $num1
- *
- * @param big_int resource $num1
- * @param big_int resource $num2
- * @param int $start_pos
- * @return big_int resource
- * @access public
- */
- function bitOr($num1, $num2, $start_pos)
- {
- return bi_or($num1, $num2, $start_pos);
- }
-
- /**
- * Returns part of number $num, starting at bit
- * position $start with length $length
- *
- * @param big_int resource $num
- * @param int start
- * @param int length
- * @return big_int resource
- * @access public
- */
- function subint($num, $start, $length)
- {
- return bi_subint($num, $start, $length);
- }
-
- /**
- * Returns name of current wrapper
- *
- * @return string name of current wrapper
- * @access public
- */
- function getWrapperName()
- {
- return 'BigInt';
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php b/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php
deleted file mode 100644
index 54e4c34fc..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/Math/GMP.php
+++ /dev/null
@@ -1,361 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version 1.2.0b
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * Crypt_RSA_Math_GMP class.
- *
- * Provides set of math functions, which are used by Crypt_RSA package
- * This class is a wrapper for PHP GMP extension.
- * See http://php.net/gmp for details.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright 2005, 2006 Alexander Valyalkin
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @link http://pear.php.net/package/Crypt_RSA
- * @version @package_version@
- * @access public
- */
-class Crypt_RSA_Math_GMP
-{
- /**
- * error description
- *
- * @var string
- * @access public
- */
- var $errstr = '';
-
- /**
- * Crypt_RSA_Math_GMP constructor.
- * Checks an existance of PHP GMP package.
- * See http://php.net/gmp for details.
- *
- * On failure saves error description in $this->errstr
- *
- * @access public
- */
- function Crypt_RSA_Math_GMP()
- {
- if (!extension_loaded('gmp')) {
- if (!@dl('gmp.' . PHP_SHLIB_SUFFIX) && !@dl('php_gmp.' . PHP_SHLIB_SUFFIX)) {
- // cannot load GMP extension
- $this->errstr = 'Crypt_RSA package requires PHP GMP package. ' .
- 'See http://php.net/gmp for details';
- return;
- }
- }
- }
-
- /**
- * Transforms binary representation of large integer into its native form.
- *
- * Example of transformation:
- * $str = "\x12\x34\x56\x78\x90";
- * $num = 0x9078563412;
- *
- * @param string $str
- * @return gmp resource
- * @access public
- */
- function bin2int($str)
- {
- $result = 0;
- $n = strlen($str);
- do {
- // dirty hack: GMP returns FALSE, when second argument equals to int(0).
- // so, it must be converted to string '0'
- $result = gmp_add(gmp_mul($result, 256), strval(ord($str{--$n})));
- } while ($n > 0);
- return $result;
- }
-
- /**
- * Transforms large integer into binary representation.
- *
- * Example of transformation:
- * $num = 0x9078563412;
- * $str = "\x12\x34\x56\x78\x90";
- *
- * @param gmp resource $num
- * @return string
- * @access public
- */
- function int2bin($num)
- {
- $result = '';
- do {
- $result .= chr(gmp_intval(gmp_mod($num, 256)));
- $num = gmp_div($num, 256);
- } while (gmp_cmp($num, 0));
- return $result;
- }
-
- /**
- * Calculates pow($num, $pow) (mod $mod)
- *
- * @param gmp resource $num
- * @param gmp resource $pow
- * @param gmp resource $mod
- * @return gmp resource
- * @access public
- */
- function powmod($num, $pow, $mod)
- {
- return gmp_powm($num, $pow, $mod);
- }
-
- /**
- * Calculates $num1 * $num2
- *
- * @param gmp resource $num1
- * @param gmp resource $num2
- * @return gmp resource
- * @access public
- */
- function mul($num1, $num2)
- {
- return gmp_mul($num1, $num2);
- }
-
- /**
- * Calculates $num1 % $num2
- *
- * @param string $num1
- * @param string $num2
- * @return string
- * @access public
- */
- function mod($num1, $num2)
- {
- return gmp_mod($num1, $num2);
- }
-
- /**
- * Compares abs($num1) to abs($num2).
- * Returns:
- * -1, if abs($num1) < abs($num2)
- * 0, if abs($num1) == abs($num2)
- * 1, if abs($num1) > abs($num2)
- *
- * @param gmp resource $num1
- * @param gmp resource $num2
- * @return int
- * @access public
- */
- function cmpAbs($num1, $num2)
- {
- return gmp_cmp($num1, $num2);
- }
-
- /**
- * Tests $num on primality. Returns true, if $num is strong pseudoprime.
- * Else returns false.
- *
- * @param string $num
- * @return bool
- * @access private
- */
- function isPrime($num)
- {
- return gmp_prob_prime($num) ? true : false;
- }
-
- /**
- * Generates prime number with length $bits_cnt
- * using $random_generator as random generator function.
- *
- * @param int $bits_cnt
- * @param string $rnd_generator
- * @access public
- */
- function getPrime($bits_cnt, $random_generator)
- {
- $bytes_n = intval($bits_cnt / 8);
- $bits_n = $bits_cnt % 8;
- do {
- $str = '';
- for ($i = 0; $i < $bytes_n; $i++) {
- $str .= chr(call_user_func($random_generator) & 0xff);
- }
- $n = call_user_func($random_generator) & 0xff;
- $n |= 0x80;
- $n >>= 8 - $bits_n;
- $str .= chr($n);
- $num = $this->bin2int($str);
-
- // search for the next closest prime number after [$num]
- if (!gmp_cmp(gmp_mod($num, '2'), '0')) {
- $num = gmp_add($num, '1');
- }
- while (!gmp_prob_prime($num)) {
- $num = gmp_add($num, '2');
- }
- } while ($this->bitLen($num) != $bits_cnt);
- return $num;
- }
-
- /**
- * Calculates $num - 1
- *
- * @param gmp resource $num
- * @return gmp resource
- * @access public
- */
- function dec($num)
- {
- return gmp_sub($num, 1);
- }
-
- /**
- * Returns true, if $num is equal to one. Else returns false
- *
- * @param gmp resource $num
- * @return bool
- * @access public
- */
- function isOne($num)
- {
- return !gmp_cmp($num, 1);
- }
-
- /**
- * Finds greatest common divider (GCD) of $num1 and $num2
- *
- * @param gmp resource $num1
- * @param gmp resource $num2
- * @return gmp resource
- * @access public
- */
- function GCD($num1, $num2)
- {
- return gmp_gcd($num1, $num2);
- }
-
- /**
- * Finds inverse number $inv for $num by modulus $mod, such as:
- * $inv * $num = 1 (mod $mod)
- *
- * @param gmp resource $num
- * @param gmp resource $mod
- * @return gmp resource
- * @access public
- */
- function invmod($num, $mod)
- {
- return gmp_invert($num, $mod);
- }
-
- /**
- * Returns bit length of number $num
- *
- * @param gmp resource $num
- * @return int
- * @access public
- */
- function bitLen($num)
- {
- $tmp = $this->int2bin($num);
- $bit_len = strlen($tmp) * 8;
- $tmp = ord($tmp{strlen($tmp) - 1});
- if (!$tmp) {
- $bit_len -= 8;
- }
- else {
- while (!($tmp & 0x80)) {
- $bit_len--;
- $tmp <<= 1;
- }
- }
- return $bit_len;
- }
-
- /**
- * Calculates bitwise or of $num1 and $num2,
- * starting from bit $start_pos for number $num1
- *
- * @param gmp resource $num1
- * @param gmp resource $num2
- * @param int $start_pos
- * @return gmp resource
- * @access public
- */
- function bitOr($num1, $num2, $start_pos)
- {
- $start_byte = intval($start_pos / 8);
- $start_bit = $start_pos % 8;
- $tmp1 = $this->int2bin($num1);
-
- $num2 = gmp_mul($num2, 1 << $start_bit);
- $tmp2 = $this->int2bin($num2);
- if ($start_byte < strlen($tmp1)) {
- $tmp2 |= substr($tmp1, $start_byte);
- $tmp1 = substr($tmp1, 0, $start_byte) . $tmp2;
- }
- else {
- $tmp1 = str_pad($tmp1, $start_byte, "\0") . $tmp2;
- }
- return $this->bin2int($tmp1);
- }
-
- /**
- * Returns part of number $num, starting at bit
- * position $start with length $length
- *
- * @param gmp resource $num
- * @param int start
- * @param int length
- * @return gmp resource
- * @access public
- */
- function subint($num, $start, $length)
- {
- $start_byte = intval($start / 8);
- $start_bit = $start % 8;
- $byte_length = intval($length / 8);
- $bit_length = $length % 8;
- if ($bit_length) {
- $byte_length++;
- }
- $num = gmp_div($num, 1 << $start_bit);
- $tmp = substr($this->int2bin($num), $start_byte, $byte_length);
- $tmp = str_pad($tmp, $byte_length, "\0");
- $tmp = substr_replace($tmp, $tmp{$byte_length - 1} & chr(0xff >> (8 - $bit_length)), $byte_length - 1, 1);
- return $this->bin2int($tmp);
- }
-
- /**
- * Returns name of current wrapper
- *
- * @return string name of current wrapper
- * @access public
- */
- function getWrapperName()
- {
- return 'GMP';
- }
-}
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php b/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php
deleted file mode 100644
index de6c94642..000000000
--- a/plugins/OStatus/extlib/Crypt/RSA/MathLoader.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Crypt_RSA allows to do following operations:
- * - key pair generation
- * - encryption and decryption
- * - signing and sign validation
- *
- * PHP versions 4 and 5
- *
- * LICENSE: This source file is subject to version 3.0 of the PHP license
- * that is available through the world-wide-web at the following URI:
- * http://www.php.net/license/3_0.txt. If you did not receive a copy of
- * the PHP License and are unable to obtain it through the web, please
- * send a note to license@php.net so we can mail you a copy immediately.
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright Alexander Valyalkin 2005
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version CVS: $Id: MathLoader.php,v 1.5 2009/01/05 08:30:29 clockwerx Exp $
- * @link http://pear.php.net/package/Crypt_RSA
- */
-
-/**
- * RSA error handling facilities
- */
-require_once 'Crypt/RSA/ErrorHandler.php';
-
-/**
- * Crypt_RSA_MathLoader class.
- *
- * Provides static function:
- * - loadWrapper($wrapper_name) - loads RSA math wrapper with name $wrapper_name
- * or most suitable wrapper if $wrapper_name == 'default'
- *
- * Example usage:
- * // load BigInt wrapper
- * $big_int_wrapper = Crypt_RSA_MathLoader::loadWrapper('BigInt');
- *
- * // load BCMath wrapper
- * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper('BCMath');
- *
- * // load the most suitable wrapper
- * $bcmath_wrapper = Crypt_RSA_MathLoader::loadWrapper();
- *
- * @category Encryption
- * @package Crypt_RSA
- * @author Alexander Valyalkin <valyala@gmail.com>
- * @copyright Alexander Valyalkin 2005
- * @license http://www.php.net/license/3_0.txt PHP License 3.0
- * @version Release: @package_version@
- * @link http://pear.php.net/package/Crypt_RSA
- * @access public
- */
-class Crypt_RSA_MathLoader
-{
- /**
- * Loads RSA math wrapper with name $wrapper_name.
- * Implemented wrappers can be found at Crypt/RSA/Math folder.
- * Read docs/Crypt_RSA/docs/math_wrappers.txt for details
- *
- * This is a static function:
- * // load BigInt wrapper
- * $big_int_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BigInt');
- *
- * // load BCMath wrapper
- * $bcmath_wrapper = &Crypt_RSA_MathLoader::loadWrapper('BCMath');
- *
- * @param string $wrapper_name Name of wrapper
- *
- * @return object
- * Reference to object of wrapper with name $wrapper_name on success
- * or PEAR_Error object on error
- *
- * @access public
- */
- function loadWrapper($wrapper_name = 'default')
- {
- static $math_objects = array();
- // ordered by performance. GMP is the fastest math library, BCMath - the slowest.
- static $math_wrappers = array('GMP', 'BigInt', 'BCMath',);
-
- if (isset($math_objects[$wrapper_name])) {
- /*
- wrapper with name $wrapper_name is already loaded and created.
- Return reference to existing copy of wrapper
- */
- return $math_objects[$wrapper_name];
- }
-
- $err_handler = new Crypt_RSA_ErrorHandler();
-
- if ($wrapper_name === 'default') {
- // try to load the most suitable wrapper
- $n = sizeof($math_wrappers);
- for ($i = 0; $i < $n; $i++) {
- $obj = Crypt_RSA_MathLoader::loadWrapper($math_wrappers[$i]);
- if (!$err_handler->isError($obj)) {
- // wrapper for $math_wrappers[$i] successfully loaded
- // register it as default wrapper and return reference to it
- return $math_objects['default'] = $obj;
- }
- }
- // can't load any wrapper
- $err_handler->pushError("can't load any wrapper for existing math libraries", CRYPT_RSA_ERROR_NO_WRAPPERS);
- return $err_handler->getLastError();
- }
-
- $class_name = 'Crypt_RSA_Math_' . $wrapper_name;
- $class_filename = dirname(__FILE__) . '/Math/' . $wrapper_name . '.php';
-
- if (!is_file($class_filename)) {
- $err_handler->pushError("can't find file [{$class_filename}] for RSA math wrapper [{$wrapper_name}]", CRYPT_RSA_ERROR_NO_FILE);
- return $err_handler->getLastError();
- }
-
- include_once $class_filename;
- if (!class_exists($class_name)) {
- $err_handler->pushError("can't find class [{$class_name}] in file [{$class_filename}]", CRYPT_RSA_ERROR_NO_CLASS);
- return $err_handler->getLastError();
- }
-
- // create and return wrapper object on success or PEAR_Error object on error
- $obj = new $class_name;
- if ($obj->errstr) {
- // cannot load required extension for math wrapper
- $err_handler->pushError($obj->errstr, CRYPT_RSA_ERROR_NO_EXT);
- return $err_handler->getLastError();
- }
- return $math_objects[$wrapper_name] = $obj;
- }
-}
-
-?>
diff --git a/plugins/OStatus/extlib/Crypt/Random.php b/plugins/OStatus/extlib/Crypt/Random.php
new file mode 100644
index 000000000..bfc24ca62
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/Random.php
@@ -0,0 +1,125 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Random Number Generator
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Random.php');
+ *
+ * echo crypt_random();
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_Random
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: Random.php,v 1.6 2010/02/28 05:28:38 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Generate a random value.
+ *
+ * On 32-bit machines, the largest distance that can exist between $min and $max is 2**31.
+ * If $min and $max are farther apart than that then the last ($max - range) numbers.
+ *
+ * Depending on how this is being used, it may be worth while to write a replacement. For example,
+ * a PHP-based web app that stores its data in an SQL database can collect more entropy than this function
+ * can.
+ *
+ * @param optional Integer $min
+ * @param optional Integer $max
+ * @return Integer
+ * @access public
+ */
+function crypt_random($min = 0, $max = 0x7FFFFFFF)
+{
+ if ($min == $max) {
+ return $min;
+ }
+
+ // see http://en.wikipedia.org/wiki//dev/random
+ if (file_exists('/dev/urandom')) {
+ $fp = fopen('/dev/urandom', 'rb');
+ extract(unpack('Nrandom', fread($fp, 4)));
+ fclose($fp);
+
+ // say $min = 0 and $max = 3. if we didn't do abs() then we could have stuff like this:
+ // -4 % 3 + 0 = -1, even though -1 < $min
+ return abs($random) % ($max - $min) + $min;
+ }
+
+ /* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called.
+ Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here:
+
+ http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/
+
+ The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro:
+
+ http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3_2/ext/standard/php_rand.h?view=markup */
+ if (version_compare(PHP_VERSION, '5.2.5', '<=')) {
+ static $seeded;
+ if (!isset($seeded)) {
+ $seeded = true;
+ mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF));
+ }
+ }
+
+ static $crypto;
+
+ // The CSPRNG's Yarrow and Fortuna periodically reseed. This function can be reseeded by hitting F5
+ // in the browser and reloading the page.
+
+ if (!isset($crypto)) {
+ $key = $iv = '';
+ for ($i = 0; $i < 8; $i++) {
+ $key.= pack('n', mt_rand(0, 0xFFFF));
+ $iv .= pack('n', mt_rand(0, 0xFFFF));
+ }
+ switch (true) {
+ case class_exists('Crypt_AES'):
+ $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
+ break;
+ case class_exists('Crypt_TripleDES'):
+ $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
+ break;
+ case class_exists('Crypt_DES'):
+ $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
+ break;
+ case class_exists('Crypt_RC4'):
+ $crypto = new Crypt_RC4();
+ break;
+ default:
+ extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF)))));
+ return abs($random) % ($max - $min) + $min;
+ }
+ $crypto->setKey($key);
+ $crypto->setIV($iv);
+ }
+
+ extract(unpack('Nrandom', $crypto->encrypt("\0\0\0\0")));
+ return abs($random) % ($max - $min) + $min;
+}
+?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/Rijndael.php b/plugins/OStatus/extlib/Crypt/Rijndael.php
new file mode 100644
index 000000000..3b5fd6a7d
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/Rijndael.php
@@ -0,0 +1,1242 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * Does not use mcrypt, even when available, for reasons that are explained below.
+ *
+ * PHP versions 4 and 5
+ *
+ * If {@link Crypt_Rijndael::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits. If
+ * {@link Crypt_Rijndael::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link Crypt_Rijndael::setKey() setKey()}. ie. if the key is 128-bits, the key length will be 128-bits. If it's
+ * 136-bits it'll be null-padded to 160-bits and 160 bits will be the key length until
+ * {@link Crypt_Rijndael::setKey() setKey()} is called, again, at which point, it'll be recalculated.
+ *
+ * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length. mcrypt, for example,
+ * does not. AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
+ * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224. Indeed, 160 and 224
+ * are first defined as valid key / block lengths in
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
+ * Extensions: Other block and Cipher Key lengths.
+ *
+ * {@internal The variable names are the same as those in
+ * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/Rijndael.php');
+ *
+ * $rijndael = new Crypt_Rijndael();
+ *
+ * $rijndael->setKey('abcdefghijklmnop');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $rijndael->decrypt($rijndael->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_Rijndael
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVIII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**#@+
+ * @access public
+ * @see Crypt_Rijndael::encrypt()
+ * @see Crypt_Rijndael::decrypt()
+ */
+/**
+ * Encrypt / decrypt using the Counter mode.
+ *
+ * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CTR', -1);
+/**
+ * Encrypt / decrypt using the Electronic Code Book mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+ */
+define('CRYPT_RIJNDAEL_MODE_ECB', 1);
+/**
+ * Encrypt / decrypt using the Code Book Chaining mode.
+ *
+ * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ */
+define('CRYPT_RIJNDAEL_MODE_CBC', 2);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ */
+/**
+ * Toggles the internal implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1);
+/**
+ * Toggles the mcrypt implementation
+ */
+define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2);
+/**#@-*/
+
+/**
+ * Pure-PHP implementation of Rijndael.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_Rijndael
+ */
+class Crypt_Rijndael {
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_Rijndael::Crypt_Rijndael()
+ * @var Integer
+ * @access private
+ */
+ var $mode;
+
+ /**
+ * The Key
+ *
+ * @see Crypt_Rijndael::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_Rijndael::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = '';
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = '';
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = '';
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_Rijndael::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * Does the key schedule need to be (re)calculated?
+ *
+ * @see setKey()
+ * @see setBlockLength()
+ * @see setKeyLength()
+ * @var Boolean
+ * @access private
+ */
+ var $changed = true;
+
+ /**
+ * Has the key length explicitly been set or should it be derived from the key, itself?
+ *
+ * @see setKeyLength()
+ * @var Boolean
+ * @access private
+ */
+ var $explicit_key_length = false;
+
+ /**
+ * The Key Schedule
+ *
+ * @see _setup()
+ * @var Array
+ * @access private
+ */
+ var $w;
+
+ /**
+ * The Inverse Key Schedule
+ *
+ * @see _setup()
+ * @var Array
+ * @access private
+ */
+ var $dw;
+
+ /**
+ * The Block Length
+ *
+ * @see setBlockLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 32, the min value is 16. All valid values are multiples of 4. Exists in conjunction with
+ * $Nb because we need this value and not $Nb to pad strings appropriately.
+ */
+ var $block_size = 16;
+
+ /**
+ * The Block Length divided by 32
+ *
+ * @see setBlockLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4. Exists in conjunction with $block_size
+ * because the encryption / decryption / key schedule creation requires this number and not $block_size. We could
+ * derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+ * of that, we'll just precompute it once.
+ *
+ */
+ var $Nb = 4;
+
+ /**
+ * The Key Length
+ *
+ * @see setKeyLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16. Exists in conjunction with $key_size
+ * because the encryption / decryption / key schedule creation requires this number and not $key_size. We could
+ * derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+ * of that, we'll just precompute it once.
+ */
+ var $key_size = 16;
+
+ /**
+ * The Key Length divided by 32
+ *
+ * @see setKeyLength()
+ * @var Integer
+ * @access private
+ * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
+ */
+ var $Nk = 4;
+
+ /**
+ * The Number of Rounds
+ *
+ * @var Integer
+ * @access private
+ * @internal The max value is 14, the min value is 10.
+ */
+ var $Nr;
+
+ /**
+ * Shift offsets
+ *
+ * @var Array
+ * @access private
+ */
+ var $c;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t0;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t1;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t2;
+
+ /**
+ * Precomputed mixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $t3;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt0;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt1;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt2;
+
+ /**
+ * Precomputed invMixColumns table
+ *
+ * @see Crypt_Rijndael()
+ * @var Array
+ * @access private
+ */
+ var $dt3;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC. If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_Rijndael
+ * @access public
+ */
+ function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC)
+ {
+ switch ($mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
+ }
+
+ $t3 = &$this->t3;
+ $t2 = &$this->t2;
+ $t1 = &$this->t1;
+ $t0 = &$this->t0;
+
+ $dt3 = &$this->dt3;
+ $dt2 = &$this->dt2;
+ $dt1 = &$this->dt1;
+ $dt0 = &$this->dt0;
+
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
+ // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
+ // those are the names we'll use.
+ $t3 = array(
+ 0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
+ 0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
+ 0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
+ 0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
+ 0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
+ 0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
+ 0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
+ 0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
+ 0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
+ 0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
+ 0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
+ 0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
+ 0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
+ 0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
+ 0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
+ 0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
+ 0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
+ 0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
+ 0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
+ 0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
+ 0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
+ 0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
+ 0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
+ 0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
+ 0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
+ 0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
+ 0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
+ 0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
+ 0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
+ 0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
+ 0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
+ 0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
+ );
+
+ $dt3 = array(
+ 0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
+ 0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
+ 0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
+ 0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
+ 0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
+ 0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
+ 0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
+ 0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
+ 0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
+ 0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
+ 0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
+ 0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
+ 0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
+ 0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
+ 0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
+ 0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
+ 0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
+ 0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
+ 0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
+ 0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
+ 0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
+ 0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
+ 0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
+ 0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
+ 0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
+ 0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
+ 0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
+ 0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
+ 0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
+ 0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
+ 0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
+ 0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
+ );
+
+ for ($i = 0; $i < 256; $i++) {
+ $t2[$i << 8] = (($t3[$i] << 8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF);
+ $t1[$i << 16] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF);
+ $t0[$i << 24] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >> 8) & 0x00FFFFFF);
+
+ $dt2[$i << 8] = (($this->dt3[$i] << 8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF);
+ $dt1[$i << 16] = (($this->dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF);
+ $dt0[$i << 24] = (($this->dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >> 8) & 0x00FFFFFF);
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
+ * whose length is a multiple of 32. If the key is less than 256-bits and the key length isn't set, we round the length
+ * up to the closest valid key length, padding $key with null bytes. If the key is more than 256-bits, we trim the
+ * excess bits.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all null bytes.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $this->key = $key;
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0));;
+ }
+
+ /**
+ * Sets the key length
+ *
+ * Valid key lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
+ * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setKeyLength($length)
+ {
+ $length >>= 5;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+
+ $this->explicit_key_length = true;
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the block length
+ *
+ * Valid block lengths are 128, 160, 192, 224, and 256. If the length is less than 128, it will be rounded up to
+ * 128. If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+ *
+ * @access public
+ * @param Integer $length
+ */
+ function setBlockLength($length)
+ {
+ $length >>= 5;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nb = $length;
+ $this->block_size = $length << 2;
+ $this->changed = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_Rijndael::decrypt()
+ * @see Crypt_Rijndael::encrypt()
+ * @access public
+ * @param Integer $length
+ * @param String $iv
+ */
+ function _generate_xor($length, &$iv)
+ {
+ $xor = '';
+ $block_size = $this->block_size;
+ $num_blocks = floor(($length + ($block_size - 1)) / $block_size);
+ for ($i = 0; $i < $num_blocks; $i++) {
+ $xor.= $iv;
+ for ($j = 4; $j <= $block_size; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other Rjindael
+ * implementations may or may not pad in the same manner. Other common approaches to padding and the reasons why it's
+ * necessary are discussed in the following
+ * URL:
+ *
+ * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+ *
+ * An alternative to padding is to, separately, send the length of the file. This is what SSH, in fact, does.
+ * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
+ * length.
+ *
+ * @see Crypt_Rijndael::decrypt()
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ $this->_setup();
+ if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ $block_size = $this->block_size;
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $block = substr($plaintext, $i, $block_size);
+ $block = $this->_encryptBlock($block ^ $xor);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+ $block = substr($plaintext, $i, $block_size);
+ $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $ciphertext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
+ * it is.
+ *
+ * @see Crypt_Rijndael::encrypt()
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ $this->_setup();
+
+ if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) {
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + $this->block_size - 1) % $this->block_size, chr(0));
+ }
+
+ $block_size = $this->block_size;
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_RIJNDAEL_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $block = substr($ciphertext, $i, $block_size);
+ $plaintext.= $this->_decryptBlock($block) ^ $xor;
+ $xor = $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_RIJNDAEL_MODE_CTR:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+ $block = substr($ciphertext, $i, $block_size);
+ $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
+ $plaintext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ }
+
+ return $this->mode != CRYPT_RIJNDAEL_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Encrypts a block
+ *
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _encryptBlock($in)
+ {
+ $state = array();
+ $words = unpack('N*word', $in);
+
+ $w = $this->w;
+ $t0 = $this->t0;
+ $t1 = $this->t1;
+ $t2 = $this->t2;
+ $t3 = $this->t3;
+ $Nb = $this->Nb;
+ $Nr = $this->Nr;
+ $c = $this->c;
+
+ // addRoundKey
+ $i = 0;
+ foreach ($words as $word) {
+ $state[] = $word ^ $w[0][$i++];
+ }
+
+ // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
+ // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
+ // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
+ // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
+ // Unfortunately, the description given there is not quite correct. Per aes.spec.v316.pdf#page=19 [1],
+ // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
+
+ // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
+ $temp = array();
+ for ($round = 1; $round < $Nr; $round++) {
+ $i = 0; // $c[0] == 0
+ $j = $c[1];
+ $k = $c[2];
+ $l = $c[3];
+
+ while ($i < $this->Nb) {
+ $temp[$i] = $t0[$state[$i] & 0xFF000000] ^
+ $t1[$state[$j] & 0x00FF0000] ^
+ $t2[$state[$k] & 0x0000FF00] ^
+ $t3[$state[$l] & 0x000000FF] ^
+ $w[$round][$i];
+ $i++;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+
+ for ($i = 0; $i < $Nb; $i++) {
+ $state[$i] = $temp[$i];
+ }
+ }
+
+ // subWord
+ for ($i = 0; $i < $Nb; $i++) {
+ $state[$i] = $this->_subWord($state[$i]);
+ }
+
+ // shiftRows + addRoundKey
+ $i = 0; // $c[0] == 0
+ $j = $c[1];
+ $k = $c[2];
+ $l = $c[3];
+ while ($i < $this->Nb) {
+ $temp[$i] = ($state[$i] & 0xFF000000) ^
+ ($state[$j] & 0x00FF0000) ^
+ ($state[$k] & 0x0000FF00) ^
+ ($state[$l] & 0x000000FF) ^
+ $w[$Nr][$i];
+ $i++;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+ $state = $temp;
+
+ array_unshift($state, 'N*');
+
+ return call_user_func_array('pack', $state);
+ }
+
+ /**
+ * Decrypts a block
+ *
+ * @access private
+ * @param String $in
+ * @return String
+ */
+ function _decryptBlock($in)
+ {
+ $state = array();
+ $words = unpack('N*word', $in);
+
+ $num_states = count($state);
+ $dw = $this->dw;
+ $dt0 = $this->dt0;
+ $dt1 = $this->dt1;
+ $dt2 = $this->dt2;
+ $dt3 = $this->dt3;
+ $Nb = $this->Nb;
+ $Nr = $this->Nr;
+ $c = $this->c;
+
+ // addRoundKey
+ $i = 0;
+ foreach ($words as $word) {
+ $state[] = $word ^ $dw[$Nr][$i++];
+ }
+
+ $temp = array();
+ for ($round = $Nr - 1; $round > 0; $round--) {
+ $i = 0; // $c[0] == 0
+ $j = $Nb - $c[1];
+ $k = $Nb - $c[2];
+ $l = $Nb - $c[3];
+
+ while ($i < $Nb) {
+ $temp[$i] = $dt0[$state[$i] & 0xFF000000] ^
+ $dt1[$state[$j] & 0x00FF0000] ^
+ $dt2[$state[$k] & 0x0000FF00] ^
+ $dt3[$state[$l] & 0x000000FF] ^
+ $dw[$round][$i];
+ $i++;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+
+ for ($i = 0; $i < $Nb; $i++) {
+ $state[$i] = $temp[$i];
+ }
+ }
+
+ // invShiftRows + invSubWord + addRoundKey
+ $i = 0; // $c[0] == 0
+ $j = $Nb - $c[1];
+ $k = $Nb - $c[2];
+ $l = $Nb - $c[3];
+
+ while ($i < $Nb) {
+ $temp[$i] = $dw[0][$i] ^
+ $this->_invSubWord(($state[$i] & 0xFF000000) |
+ ($state[$j] & 0x00FF0000) |
+ ($state[$k] & 0x0000FF00) |
+ ($state[$l] & 0x000000FF));
+ $i++;
+ $j = ($j + 1) % $Nb;
+ $k = ($k + 1) % $Nb;
+ $l = ($l + 1) % $Nb;
+ }
+
+ $state = $temp;
+
+ array_unshift($state, 'N*');
+
+ return call_user_func_array('pack', $state);
+ }
+
+ /**
+ * Setup Rijndael
+ *
+ * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key
+ * key schedule.
+ *
+ * @access private
+ */
+ function _setup()
+ {
+ // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
+ // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
+ static $rcon = array(0,
+ 0x01000000, 0x02000000, 0x04000000, 0x08000000, 0x10000000,
+ 0x20000000, 0x40000000, 0x80000000, 0x1B000000, 0x36000000,
+ 0x6C000000, 0xD8000000, 0xAB000000, 0x4D000000, 0x9A000000,
+ 0x2F000000, 0x5E000000, 0xBC000000, 0x63000000, 0xC6000000,
+ 0x97000000, 0x35000000, 0x6A000000, 0xD4000000, 0xB3000000,
+ 0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
+ );
+
+ if (!$this->changed) {
+ return;
+ }
+
+ if (!$this->explicit_key_length) {
+ // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits
+ $length = strlen($this->key) >> 2;
+ if ($length > 8) {
+ $length = 8;
+ } else if ($length < 4) {
+ $length = 4;
+ }
+ $this->Nk = $length;
+ $this->key_size = $length << 2;
+ }
+
+ $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0));
+
+ // see Rijndael-ammended.pdf#page=44
+ $this->Nr = max($this->Nk, $this->Nb) + 6;
+
+ // shift offsets for Nb = 5, 7 are defined in Rijndael-ammended.pdf#page=44,
+ // "Table 8: Shift offsets in Shiftrow for the alternative block lengths"
+ // shift offsets for Nb = 4, 6, 8 are defined in Rijndael-ammended.pdf#page=14,
+ // "Table 2: Shift offsets for different block lengths"
+ switch ($this->Nb) {
+ case 4:
+ case 5:
+ case 6:
+ $this->c = array(0, 1, 2, 3);
+ break;
+ case 7:
+ $this->c = array(0, 1, 2, 4);
+ break;
+ case 8:
+ $this->c = array(0, 1, 3, 4);
+ }
+
+ $key = $this->key;
+
+ $w = array_values(unpack('N*words', $key));
+
+ $length = $this->Nb * ($this->Nr + 1);
+ for ($i = $this->Nk; $i < $length; $i++) {
+ $temp = $w[$i - 1];
+ if ($i % $this->Nk == 0) {
+ // according to <http://php.net/language.types.integer>, "the size of an integer is platform-dependent".
+ // on a 32-bit machine, it's 32-bits, and on a 64-bit machine, it's 64-bits. on a 32-bit machine,
+ // 0xFFFFFFFF << 8 == 0xFFFFFF00, but on a 64-bit machine, it equals 0xFFFFFFFF00. as such, doing 'and'
+ // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
+ $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
+ $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
+ } else if ($this->Nk > 6 && $i % $this->Nk == 4) {
+ $temp = $this->_subWord($temp);
+ }
+ $w[$i] = $w[$i - $this->Nk] ^ $temp;
+ }
+
+ // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
+ // and generate the inverse key schedule. more specifically,
+ // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
+ // "The key expansion for the Inverse Cipher is defined as follows:
+ // 1. Apply the Key Expansion.
+ // 2. Apply InvMixColumn to all Round Keys except the first and the last one."
+ // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
+ $temp = array();
+ for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
+ if ($col == $this->Nb) {
+ if ($row == 0) {
+ $this->dw[0] = $this->w[0];
+ } else {
+ // subWord + invMixColumn + invSubWord = invMixColumn
+ $j = 0;
+ while ($j < $this->Nb) {
+ $dw = $this->_subWord($this->w[$row][$j]);
+ $temp[$j] = $this->dt0[$dw & 0xFF000000] ^
+ $this->dt1[$dw & 0x00FF0000] ^
+ $this->dt2[$dw & 0x0000FF00] ^
+ $this->dt3[$dw & 0x000000FF];
+ $j++;
+ }
+ $this->dw[$row] = $temp;
+ }
+
+ $col = 0;
+ $row++;
+ }
+ $this->w[$row][$col] = $w[$i];
+ }
+
+ $this->dw[$row] = $this->w[$row];
+
+ $this->changed = false;
+ }
+
+ /**
+ * Performs S-Box substitutions
+ *
+ * @access private
+ */
+ function _subWord($word)
+ {
+ static $sbox0, $sbox1, $sbox2, $sbox3;
+
+ if (empty($sbox0)) {
+ $sbox0 = array(
+ 0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+ 0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+ 0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+ 0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+ 0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+ 0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+ 0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+ 0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+ 0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+ 0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+ 0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+ 0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+ 0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+ 0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+ 0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+ 0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+ );
+
+ $sbox1 = array();
+ $sbox2 = array();
+ $sbox3 = array();
+
+ for ($i = 0; $i < 256; $i++) {
+ $sbox1[$i << 8] = $sbox0[$i] << 8;
+ $sbox2[$i << 16] = $sbox0[$i] << 16;
+ $sbox3[$i << 24] = $sbox0[$i] << 24;
+ }
+ }
+
+ return $sbox0[$word & 0x000000FF] |
+ $sbox1[$word & 0x0000FF00] |
+ $sbox2[$word & 0x00FF0000] |
+ $sbox3[$word & 0xFF000000];
+ }
+
+ /**
+ * Performs inverse S-Box substitutions
+ *
+ * @access private
+ */
+ function _invSubWord($word)
+ {
+ static $sbox0, $sbox1, $sbox2, $sbox3;
+
+ if (empty($sbox0)) {
+ $sbox0 = array(
+ 0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+ 0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+ 0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+ 0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+ 0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+ 0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+ 0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+ 0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+ 0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+ 0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+ 0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+ 0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+ 0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+ 0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+ 0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+ );
+
+ $sbox1 = array();
+ $sbox2 = array();
+ $sbox3 = array();
+
+ for ($i = 0; $i < 256; $i++) {
+ $sbox1[$i << 8] = $sbox0[$i] << 8;
+ $sbox2[$i << 16] = $sbox0[$i] << 16;
+ $sbox3[$i << 24] = $sbox0[$i] << 24;
+ }
+ }
+
+ return $sbox0[$word & 0x000000FF] |
+ $sbox1[$word & 0x0000FF00] |
+ $sbox2[$word & 0x00FF0000] |
+ $sbox3[$word & 0xFF000000];
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple
+ * of four. If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
+ * pad the input so that it is of the proper length.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_Rijndael::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_Rijndael::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
+ * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to
+ * chr($block_size - (strlen($text) % $block_size)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_Rijndael::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if ($length % $this->block_size == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})", E_USER_NOTICE);
+ $this->padding = true;
+ }
+ }
+
+ $pad = $this->block_size - ($length % $this->block_size);
+
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string.
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_Rijndael::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > $this->block_size) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 32-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $rijndael->encrypt(substr($plaintext, 0, 16));
+ * echo $rijndael->encrypt(substr($plaintext, 16, 16));
+ * </code>
+ * <code>
+ * echo $rijndael->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $rijndael->encrypt(substr($plaintext, 0, 16));
+ * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+ * </code>
+ * <code>
+ * echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_Rijndael::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_Rijndael::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+ }
+
+ /**
+ * String Shift
+ *
+ * Inspired by array_shift
+ *
+ * @param String $string
+ * @param optional Integer $index
+ * @return String
+ * @access private
+ */
+ function _string_shift(&$string, $index = 1)
+ {
+ $substr = substr($string, 0, $index);
+ $string = substr($string, $index);
+ return $substr;
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Crypt/TripleDES.php b/plugins/OStatus/extlib/Crypt/TripleDES.php
new file mode 100644
index 000000000..9d054086a
--- /dev/null
+++ b/plugins/OStatus/extlib/Crypt/TripleDES.php
@@ -0,0 +1,690 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise. Operates in the EDE3 mode (encrypt-decrypt-encrypt).
+ *
+ * PHP versions 4 and 5
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ * include('Crypt/TripleDES.php');
+ *
+ * $des = new Crypt_TripleDES();
+ *
+ * $des->setKey('abcdefghijklmnopqrstuvwx');
+ *
+ * $size = 10 * 1024;
+ * $plaintext = '';
+ * for ($i = 0; $i < $size; $i++) {
+ * $plaintext.= 'a';
+ * }
+ *
+ * echo $des->decrypt($des->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Crypt
+ * @package Crypt_TripleDES
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVII Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $
+ * @link http://phpseclib.sourceforge.net
+ */
+
+/**
+ * Include Crypt_DES
+ */
+require_once 'DES.php';
+
+/**
+ * Encrypt / decrypt using inner chaining
+ *
+ * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3).
+ */
+define('CRYPT_DES_MODE_3CBC', 3);
+
+/**
+ * Encrypt / decrypt using outer chaining
+ *
+ * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC.
+ */
+define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC);
+
+/**
+ * Pure-PHP implementation of Triple DES.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 0.1.0
+ * @access public
+ * @package Crypt_TerraDES
+ */
+class Crypt_TripleDES {
+ /**
+ * The Three Keys
+ *
+ * @see Crypt_TripleDES::setKey()
+ * @var String
+ * @access private
+ */
+ var $key = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Encryption Mode
+ *
+ * @see Crypt_TripleDES::Crypt_TripleDES()
+ * @var Integer
+ * @access private
+ */
+ var $mode = CRYPT_DES_MODE_CBC;
+
+ /**
+ * Continuous Buffer status
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var Boolean
+ * @access private
+ */
+ var $continuousBuffer = false;
+
+ /**
+ * Padding status
+ *
+ * @see Crypt_TripleDES::enablePadding()
+ * @var Boolean
+ * @access private
+ */
+ var $padding = true;
+
+ /**
+ * The Initialization Vector
+ *
+ * @see Crypt_TripleDES::setIV()
+ * @var String
+ * @access private
+ */
+ var $iv = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $encryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * A "sliding" Initialization Vector
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @var String
+ * @access private
+ */
+ var $decryptIV = "\0\0\0\0\0\0\0\0";
+
+ /**
+ * The Crypt_DES objects
+ *
+ * @var Array
+ * @access private
+ */
+ var $des;
+
+ /**
+ * mcrypt resource for encryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::encrypt()
+ * @var String
+ * @access private
+ */
+ var $enmcrypt;
+
+ /**
+ * mcrypt resource for decryption
+ *
+ * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+ * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+ *
+ * @see Crypt_AES::decrypt()
+ * @var String
+ * @access private
+ */
+ var $demcrypt;
+
+ /**
+ * Does the (en|de)mcrypt resource need to be (re)initialized?
+ *
+ * @see setKey()
+ * @see setIV()
+ * @var Boolean
+ * @access private
+ */
+ var $changed = true;
+
+ /**
+ * Default Constructor.
+ *
+ * Determines whether or not the mcrypt extension should be used. $mode should only, at present, be
+ * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC. If not explictly set, CRYPT_DES_MODE_CBC will be used.
+ *
+ * @param optional Integer $mode
+ * @return Crypt_TripleDES
+ * @access public
+ */
+ function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC)
+ {
+ if ( !defined('CRYPT_DES_MODE') ) {
+ switch (true) {
+ case extension_loaded('mcrypt'):
+ // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')),
+ // but since that can be changed after the object has been created, there doesn't seem to be
+ // a lot of point...
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
+ break;
+ default:
+ define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
+ }
+ }
+
+ if ( $mode == CRYPT_DES_MODE_3CBC ) {
+ $this->mode = CRYPT_DES_MODE_3CBC;
+ $this->des = array(
+ new Crypt_DES(CRYPT_DES_MODE_CBC),
+ new Crypt_DES(CRYPT_DES_MODE_CBC),
+ new Crypt_DES(CRYPT_DES_MODE_CBC)
+ );
+
+ // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+ $this->des[0]->disablePadding();
+ $this->des[1]->disablePadding();
+ $this->des[2]->disablePadding();
+
+ return;
+ }
+
+ switch ( CRYPT_DES_MODE ) {
+ case CRYPT_DES_MODE_MCRYPT:
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ $this->mode = MCRYPT_MODE_ECB;
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $this->mode = 'ctr';
+ break;
+ case CRYPT_DES_MODE_CBC:
+ default:
+ $this->mode = MCRYPT_MODE_CBC;
+ }
+
+ break;
+ default:
+ $this->des = array(
+ new Crypt_DES(CRYPT_DES_MODE_ECB),
+ new Crypt_DES(CRYPT_DES_MODE_ECB),
+ new Crypt_DES(CRYPT_DES_MODE_ECB)
+ );
+
+ // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+ $this->des[0]->disablePadding();
+ $this->des[1]->disablePadding();
+ $this->des[2]->disablePadding();
+
+ switch ($mode) {
+ case CRYPT_DES_MODE_ECB:
+ case CRYPT_DES_MODE_CTR:
+ case CRYPT_DES_MODE_CBC:
+ $this->mode = $mode;
+ break;
+ default:
+ $this->mode = CRYPT_DES_MODE_CBC;
+ }
+ }
+ }
+
+ /**
+ * Sets the key.
+ *
+ * Keys can be of any length. Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or
+ * 192-bit (eg. strlen($key) == 24) keys. This function pads and truncates $key as appropriate.
+ *
+ * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+ *
+ * If the key is not explicitly set, it'll be assumed to be all zero's.
+ *
+ * @access public
+ * @param String $key
+ */
+ function setKey($key)
+ {
+ $length = strlen($key);
+ if ($length > 8) {
+ $key = str_pad($key, 24, chr(0));
+ // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this:
+ // http://php.net/function.mcrypt-encrypt#47973
+ //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24);
+ }
+ $this->key = $key;
+ switch (true) {
+ case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL:
+ case $this->mode == CRYPT_DES_MODE_3CBC:
+ $this->des[0]->setKey(substr($key, 0, 8));
+ $this->des[1]->setKey(substr($key, 8, 8));
+ $this->des[2]->setKey(substr($key, 16, 8));
+ }
+ $this->changed = true;
+ }
+
+ /**
+ * Sets the initialization vector. (optional)
+ *
+ * SetIV is not required when CRYPT_DES_MODE_ECB is being used. If not explictly set, it'll be assumed
+ * to be all zero's.
+ *
+ * @access public
+ * @param String $iv
+ */
+ function setIV($iv)
+ {
+ $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->setIV($iv);
+ $this->des[1]->setIV($iv);
+ $this->des[2]->setIV($iv);
+ }
+ $this->changed = true;
+ }
+
+ /**
+ * Generate CTR XOR encryption key
+ *
+ * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
+ * plaintext / ciphertext in CTR mode.
+ *
+ * @see Crypt_DES::decrypt()
+ * @see Crypt_DES::encrypt()
+ * @access public
+ * @param Integer $length
+ * @param String $iv
+ */
+ function _generate_xor($length, &$iv)
+ {
+ $xor = '';
+ $num_blocks = ($length + 7) >> 3;
+ for ($i = 0; $i < $num_blocks; $i++) {
+ $xor.= $iv;
+ for ($j = 4; $j <= 8; $j+=4) {
+ $temp = substr($iv, -$j, 4);
+ switch ($temp) {
+ case "\xFF\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
+ break;
+ case "\x7F\xFF\xFF\xFF":
+ $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
+ break 2;
+ default:
+ extract(unpack('Ncount', $temp));
+ $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
+ break 2;
+ }
+ }
+ }
+
+ return $xor;
+ }
+
+ /**
+ * Encrypts a message.
+ *
+ * @access public
+ * @param String $plaintext
+ */
+ function encrypt($plaintext)
+ {
+ if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
+ $plaintext = $this->_pad($plaintext);
+ }
+
+ // if the key is smaller then 8, do what we'd normally do
+ if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+ $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext)));
+
+ return $ciphertext;
+ }
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->changed) {
+ if (!isset($this->enmcrypt)) {
+ $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+ }
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+ $this->changed = false;
+ }
+
+ $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+ }
+
+ return $ciphertext;
+ }
+
+ if (strlen($this->key) <= 8) {
+ $this->des[0]->mode = $this->mode;
+
+ return $this->des[0]->encrypt($plaintext);
+ }
+
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $plaintext = str_pad($plaintext, ceil(strlen($plaintext) / 8) * 8, chr(0));
+
+ $des = $this->des;
+
+ $ciphertext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8);
+ $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $ciphertext.= $block;
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $block = substr($plaintext, $i, 8) ^ $xor;
+ $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $xor = $block;
+ $ciphertext.= $block;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->encryptIV;
+ for ($i = 0; $i < strlen($plaintext); $i+=8) {
+ $key = $this->_generate_xor(8, $xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $block = substr($plaintext, $i, 8);
+ $ciphertext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->encryptIV = $xor;
+ }
+ }
+
+ return $ciphertext;
+ }
+
+ /**
+ * Decrypts a message.
+ *
+ * @access public
+ * @param String $ciphertext
+ */
+ function decrypt($ciphertext)
+ {
+ if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
+ $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext)));
+
+ return $this->_unpad($plaintext);
+ }
+
+ // we pad with chr(0) since that's what mcrypt_generic does. to quote from http://php.net/function.mcrypt-generic :
+ // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+ $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
+
+ if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
+ if ($this->changed) {
+ if (!isset($this->demcrypt)) {
+ $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
+ }
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+ $this->changed = false;
+ }
+
+ $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
+
+ if (!$this->continuousBuffer) {
+ mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+ }
+
+ return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ if (strlen($this->key) <= 8) {
+ $this->des[0]->mode = $this->mode;
+
+ return $this->_unpad($this->des[0]->decrypt($plaintext));
+ }
+
+ $des = $this->des;
+
+ $plaintext = '';
+ switch ($this->mode) {
+ case CRYPT_DES_MODE_ECB:
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $block = substr($ciphertext, $i, 8);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $plaintext.= $block;
+ }
+ break;
+ case CRYPT_DES_MODE_CBC:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $orig = $block = substr($ciphertext, $i, 8);
+ $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
+ $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
+ $plaintext.= $block ^ $xor;
+ $xor = $orig;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ break;
+ case CRYPT_DES_MODE_CTR:
+ $xor = $this->decryptIV;
+ for ($i = 0; $i < strlen($ciphertext); $i+=8) {
+ $key = $this->_generate_xor(8, $xor);
+ $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
+ $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
+ $block = substr($ciphertext, $i, 8);
+ $plaintext.= $block ^ $key;
+ }
+ if ($this->continuousBuffer) {
+ $this->decryptIV = $xor;
+ }
+ }
+
+ return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
+ }
+
+ /**
+ * Treat consecutive "packets" as if they are a continuous buffer.
+ *
+ * Say you have a 16-byte plaintext $plaintext. Using the default behavior, the two following code snippets
+ * will yield different outputs:
+ *
+ * <code>
+ * echo $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->encrypt(substr($plaintext, 8, 8));
+ * </code>
+ * <code>
+ * echo $des->encrypt($plaintext);
+ * </code>
+ *
+ * The solution is to enable the continuous buffer. Although this will resolve the above discrepancy, it creates
+ * another, as demonstrated with the following:
+ *
+ * <code>
+ * $des->encrypt(substr($plaintext, 0, 8));
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ * <code>
+ * echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
+ * </code>
+ *
+ * With the continuous buffer disabled, these would yield the same output. With it enabled, they yield different
+ * outputs. The reason is due to the fact that the initialization vector's change after every encryption /
+ * decryption round when the continuous buffer is enabled. When it's disabled, they remain constant.
+ *
+ * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+ * encryption / decryption round, whereas otherwise, it'd remain constant. For this reason, it's recommended that
+ * continuous buffers not be used. They do offer better security and are, in fact, sometimes required (SSH uses them),
+ * however, they are also less intuitive and more likely to cause you problems.
+ *
+ * @see Crypt_TripleDES::disableContinuousBuffer()
+ * @access public
+ */
+ function enableContinuousBuffer()
+ {
+ $this->continuousBuffer = true;
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->enableContinuousBuffer();
+ $this->des[1]->enableContinuousBuffer();
+ $this->des[2]->enableContinuousBuffer();
+ }
+ }
+
+ /**
+ * Treat consecutive packets as if they are a discontinuous buffer.
+ *
+ * The default behavior.
+ *
+ * @see Crypt_TripleDES::enableContinuousBuffer()
+ * @access public
+ */
+ function disableContinuousBuffer()
+ {
+ $this->continuousBuffer = false;
+ $this->encryptIV = $this->iv;
+ $this->decryptIV = $this->iv;
+
+ if ($this->mode == CRYPT_DES_MODE_3CBC) {
+ $this->des[0]->disableContinuousBuffer();
+ $this->des[1]->disableContinuousBuffer();
+ $this->des[2]->disableContinuousBuffer();
+ }
+ }
+
+ /**
+ * Pad "packets".
+ *
+ * DES works by encrypting eight bytes at a time. If you ever need to encrypt or decrypt something that's not
+ * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+ *
+ * Padding is enabled by default. Sometimes, however, it is undesirable to pad strings. Such is the case in SSH1,
+ * where "packets" are padded with random bytes before being encrypted. Unpad these packets and you risk stripping
+ * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+ * transmitted separately)
+ *
+ * @see Crypt_TripleDES::disablePadding()
+ * @access public
+ */
+ function enablePadding()
+ {
+ $this->padding = true;
+ }
+
+ /**
+ * Do not pad packets.
+ *
+ * @see Crypt_TripleDES::enablePadding()
+ * @access public
+ */
+ function disablePadding()
+ {
+ $this->padding = false;
+ }
+
+ /**
+ * Pads a string
+ *
+ * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
+ * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
+ *
+ * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+ * and padding will, hence forth, be enabled.
+ *
+ * @see Crypt_TripleDES::_unpad()
+ * @access private
+ */
+ function _pad($text)
+ {
+ $length = strlen($text);
+
+ if (!$this->padding) {
+ if (($length & 7) == 0) {
+ return $text;
+ } else {
+ user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
+ $this->padding = true;
+ }
+ }
+
+ $pad = 8 - ($length & 7);
+ return str_pad($text, $length + $pad, chr($pad));
+ }
+
+ /**
+ * Unpads a string
+ *
+ * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+ * and false will be returned.
+ *
+ * @see Crypt_TripleDES::_pad()
+ * @access private
+ */
+ function _unpad($text)
+ {
+ if (!$this->padding) {
+ return $text;
+ }
+
+ $length = ord($text[strlen($text) - 1]);
+
+ if (!$length || $length > 8) {
+ return false;
+ }
+
+ return substr($text, 0, -$length);
+ }
+}
+
+// vim: ts=4:sw=4:et:
+// vim6: fdl=1: \ No newline at end of file
diff --git a/plugins/OStatus/extlib/Math/BigInteger.php b/plugins/OStatus/extlib/Math/BigInteger.php
new file mode 100644
index 000000000..9733351d4
--- /dev/null
+++ b/plugins/OStatus/extlib/Math/BigInteger.php
@@ -0,0 +1,3545 @@
+<?php
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library.
+ *
+ * Supports base-2, base-10, base-16, and base-256 numbers. Uses the GMP or BCMath extensions, if available,
+ * and an internal implementation, otherwise.
+ *
+ * PHP versions 4 and 5
+ *
+ * {@internal (all DocBlock comments regarding implementation - such as the one that follows - refer to the
+ * {@link MATH_BIGINTEGER_MODE_INTERNAL MATH_BIGINTEGER_MODE_INTERNAL} mode)
+ *
+ * Math_BigInteger uses base-2**26 to perform operations such as multiplication and division and
+ * base-2**52 (ie. two base 2**26 digits) to perform addition and subtraction. Because the largest possible
+ * value when multiplying two base-2**26 numbers together is a base-2**52 number, double precision floating
+ * point numbers - numbers that should be supported on most hardware and whose significand is 53 bits - are
+ * used. As a consequence, bitwise operators such as >> and << cannot be used, nor can the modulo operator %,
+ * which only supports integers. Although this fact will slow this library down, the fact that such a high
+ * base is being used should more than compensate.
+ *
+ * When PHP version 6 is officially released, we'll be able to use 64-bit integers. This should, once again,
+ * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition /
+ * subtraction).
+ *
+ * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format. ie.
+ * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1)
+ *
+ * Useful resources are as follows:
+ *
+ * - {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf Handbook of Applied Cryptography (HAC)}
+ * - {@link http://math.libtomcrypt.com/files/tommath.pdf Multi-Precision Math (MPM)}
+ * - Java's BigInteger classes. See /j2se/src/share/classes/java/math in jdk-1_5_0-src-jrl.zip
+ *
+ * Here's an example of how to use this library:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(2);
+ * $b = new Math_BigInteger(3);
+ *
+ * $c = $a->add($b);
+ *
+ * echo $c->toString(); // outputs 5
+ * ?>
+ * </code>
+ *
+ * LICENSE: This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ * @category Math
+ * @package Math_BigInteger
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @copyright MMVI Jim Wigginton
+ * @license http://www.gnu.org/licenses/lgpl.txt
+ * @version $Id: BigInteger.php,v 1.31 2010/03/01 17:28:19 terrafrost Exp $
+ * @link http://pear.php.net/package/Math_BigInteger
+ */
+
+/**#@+
+ * Reduction constants
+ *
+ * @access private
+ * @see Math_BigInteger::_reduce()
+ */
+/**
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_prepMontgomery()
+ */
+define('MATH_BIGINTEGER_MONTGOMERY', 0);
+/**
+ * @see Math_BigInteger::_barrett()
+ */
+define('MATH_BIGINTEGER_BARRETT', 1);
+/**
+ * @see Math_BigInteger::_mod2()
+ */
+define('MATH_BIGINTEGER_POWEROF2', 2);
+/**
+ * @see Math_BigInteger::_remainder()
+ */
+define('MATH_BIGINTEGER_CLASSIC', 3);
+/**
+ * @see Math_BigInteger::__clone()
+ */
+define('MATH_BIGINTEGER_NONE', 4);
+/**#@-*/
+
+/**#@+
+ * Array constants
+ *
+ * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and
+ * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
+ *
+ * @access private
+ */
+/**
+ * $result[MATH_BIGINTEGER_VALUE] contains the value.
+ */
+define('MATH_BIGINTEGER_VALUE', 0);
+/**
+ * $result[MATH_BIGINTEGER_SIGN] contains the sign.
+ */
+define('MATH_BIGINTEGER_SIGN', 1);
+/**#@-*/
+
+/**#@+
+ * @access private
+ * @see Math_BigInteger::_montgomery()
+ * @see Math_BigInteger::_barrett()
+ */
+/**
+ * Cache constants
+ *
+ * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid.
+ */
+define('MATH_BIGINTEGER_VARIABLE', 0);
+/**
+ * $cache[MATH_BIGINTEGER_DATA] contains the cached data.
+ */
+define('MATH_BIGINTEGER_DATA', 1);
+/**#@-*/
+
+/**#@+
+ * Mode constants.
+ *
+ * @access private
+ * @see Math_BigInteger::Math_BigInteger()
+ */
+/**
+ * To use the pure-PHP implementation
+ */
+define('MATH_BIGINTEGER_MODE_INTERNAL', 1);
+/**
+ * To use the BCMath library
+ *
+ * (if enabled; otherwise, the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_BCMATH', 2);
+/**
+ * To use the GMP library
+ *
+ * (if present; otherwise, either the BCMath or the internal implementation will be used)
+ */
+define('MATH_BIGINTEGER_MODE_GMP', 3);
+/**#@-*/
+
+/**
+ * The largest digit that may be used in addition / subtraction
+ *
+ * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations
+ * will truncate 4503599627370496)
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52));
+
+/**
+ * Karatsuba Cutoff
+ *
+ * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
+ *
+ * @access private
+ */
+define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25);
+
+/**
+ * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256
+ * numbers.
+ *
+ * @author Jim Wigginton <terrafrost@php.net>
+ * @version 1.0.0RC4
+ * @access public
+ * @package Math_BigInteger
+ */
+class Math_BigInteger {
+ /**
+ * Holds the BigInteger's value.
+ *
+ * @var Array
+ * @access private
+ */
+ var $value;
+
+ /**
+ * Holds the BigInteger's magnitude.
+ *
+ * @var Boolean
+ * @access private
+ */
+ var $is_negative = false;
+
+ /**
+ * Random number generator function
+ *
+ * @see setRandomGenerator()
+ * @access private
+ */
+ var $generator = 'mt_rand';
+
+ /**
+ * Precision
+ *
+ * @see setPrecision()
+ * @access private
+ */
+ var $precision = -1;
+
+ /**
+ * Precision Bitmask
+ *
+ * @see setPrecision()
+ * @access private
+ */
+ var $bitmask = false;
+
+ /**
+ * Mode independant value used for serialization.
+ *
+ * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for
+ * a variable that'll be serializable regardless of whether or not extensions are being used. Unlike $this->value,
+ * however, $this->hex is only calculated when $this->__sleep() is called.
+ *
+ * @see __sleep()
+ * @see __wakeup()
+ * @var String
+ * @access private
+ */
+ var $hex;
+
+ /**
+ * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers.
+ *
+ * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using
+ * two's compliment. The sole exception to this is -10, which is treated the same as 10 is.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('0x32', 16); // 50 in base-16
+ *
+ * echo $a->toString(); // outputs 50
+ * ?>
+ * </code>
+ *
+ * @param optional $x base-10 number or base-$base number if $base set.
+ * @param optional integer $base
+ * @return Math_BigInteger
+ * @access public
+ */
+ function Math_BigInteger($x = 0, $base = 10)
+ {
+ if ( !defined('MATH_BIGINTEGER_MODE') ) {
+ switch (true) {
+ case extension_loaded('gmp'):
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP);
+ break;
+ case extension_loaded('bcmath'):
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH);
+ break;
+ default:
+ define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL);
+ }
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (is_resource($x) && get_resource_type($x) == 'GMP integer') {
+ $this->value = $x;
+ return;
+ }
+ $this->value = gmp_init(0);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $this->value = '0';
+ break;
+ default:
+ $this->value = array();
+ }
+
+ if ($x === 0) {
+ return;
+ }
+
+ switch ($base) {
+ case -256:
+ if (ord($x[0]) & 0x80) {
+ $x = ~$x;
+ $this->is_negative = true;
+ }
+ case 256:
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $sign = $this->is_negative ? '-' : '';
+ $this->value = gmp_init($sign . '0x' . bin2hex($x));
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // round $len to the nearest 4 (thanks, DavidMJ!)
+ $len = (strlen($x) + 3) & 0xFFFFFFFC;
+
+ $x = str_pad($x, $len, chr(0), STR_PAD_LEFT);
+
+ for ($i = 0; $i < $len; $i+= 4) {
+ $this->value = bcmul($this->value, '4294967296', 0); // 4294967296 == 2**32
+ $this->value = bcadd($this->value, 0x1000000 * ord($x[$i]) + ((ord($x[$i + 1]) << 16) | (ord($x[$i + 2]) << 8) | ord($x[$i + 3])), 0);
+ }
+
+ if ($this->is_negative) {
+ $this->value = '-' . $this->value;
+ }
+
+ break;
+ // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb)
+ default:
+ while (strlen($x)) {
+ $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26));
+ }
+ }
+
+ if ($this->is_negative) {
+ if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
+ $this->is_negative = false;
+ }
+ $temp = $this->add(new Math_BigInteger('-1'));
+ $this->value = $temp->value;
+ }
+ break;
+ case 16:
+ case -16:
+ if ($base > 0 && $x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = preg_replace('#^(?:0x)?([A-Fa-f0-9]*).*#', '$1', $x);
+
+ $is_negative = false;
+ if ($base < 0 && hexdec($x[0]) >= 8) {
+ $this->is_negative = $is_negative = true;
+ $x = bin2hex(~pack('H*', $x));
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = $this->is_negative ? '-0x' . $x : '0x' . $x;
+ $this->value = gmp_init($temp);
+ $this->is_negative = false;
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+ $temp = new Math_BigInteger(pack('H*', $x), 256);
+ $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;
+ $this->is_negative = false;
+ break;
+ default:
+ $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
+ $temp = new Math_BigInteger(pack('H*', $x), 256);
+ $this->value = $temp->value;
+ }
+
+ if ($is_negative) {
+ $temp = $this->add(new Math_BigInteger('-1'));
+ $this->value = $temp->value;
+ }
+ break;
+ case 10:
+ case -10:
+ $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x);
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $this->value = gmp_init($x);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different
+ // results then doing it on '-1' does (modInverse does $x[0])
+ $this->value = (string) $x;
+ break;
+ default:
+ $temp = new Math_BigInteger();
+
+ // array(10000000) is 10**7 in base-2**26. 10**7 is the closest to 2**26 we can get without passing it.
+ $multiplier = new Math_BigInteger();
+ $multiplier->value = array(10000000);
+
+ if ($x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT);
+
+ while (strlen($x)) {
+ $temp = $temp->multiply($multiplier);
+ $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256));
+ $x = substr($x, 7);
+ }
+
+ $this->value = $temp->value;
+ }
+ break;
+ case 2: // base-2 support originally implemented by Lluis Pamies - thanks!
+ case -2:
+ if ($base > 0 && $x[0] == '-') {
+ $this->is_negative = true;
+ $x = substr($x, 1);
+ }
+
+ $x = preg_replace('#^([01]*).*#', '$1', $x);
+ $x = str_pad($x, strlen($x) + (3 * strlen($x)) % 4, 0, STR_PAD_LEFT);
+
+ $str = '0x';
+ while (strlen($x)) {
+ $part = substr($x, 0, 4);
+ $str.= dechex(bindec($part));
+ $x = substr($x, 4);
+ }
+
+ if ($this->is_negative) {
+ $str = '-' . $str;
+ }
+
+ $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16
+ $this->value = $temp->value;
+ $this->is_negative = $temp->is_negative;
+
+ break;
+ default:
+ // base not supported, so we'll let $this == 0
+ }
+ }
+
+ /**
+ * Converts a BigInteger to a byte string (eg. base-256).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toBytes(); // outputs chr(65)
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**8
+ */
+ function toBytes($twos_compliment = false)
+ {
+ if ($twos_compliment) {
+ $comparison = $this->compare(new Math_BigInteger());
+ if ($comparison == 0) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy();
+ $bytes = $temp->toBytes();
+
+ if (empty($bytes)) { // eg. if the number we're trying to convert is -1
+ $bytes = chr(0);
+ }
+
+ if (ord($bytes[0]) & 0x80) {
+ $bytes = chr(0) . $bytes;
+ }
+
+ return $comparison < 0 ? ~$bytes : $bytes;
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (gmp_cmp($this->value, gmp_init(0)) == 0) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $temp = gmp_strval(gmp_abs($this->value), 16);
+ $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp;
+ $temp = pack('H*', $temp);
+
+ return $this->precision > 0 ?
+ substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+ ltrim($temp, chr(0));
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '0') {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+
+ $value = '';
+ $current = $this->value;
+
+ if ($current[0] == '-') {
+ $current = substr($current, 1);
+ }
+
+ while (bccomp($current, '0', 0) > 0) {
+ $temp = bcmod($current, '16777216');
+ $value = chr($temp >> 16) . chr($temp >> 8) . chr($temp) . $value;
+ $current = bcdiv($current, '16777216', 0);
+ }
+
+ return $this->precision > 0 ?
+ substr(str_pad($value, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
+ ltrim($value, chr(0));
+ }
+
+ if (!count($this->value)) {
+ return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
+ }
+ $result = $this->_int2bytes($this->value[count($this->value) - 1]);
+
+ $temp = $this->copy();
+
+ for ($i = count($temp->value) - 2; $i >= 0; --$i) {
+ $temp->_base256_lshift($result, 26);
+ $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT);
+ }
+
+ return $this->precision > 0 ?
+ str_pad(substr($result, -(($this->precision + 7) >> 3)), ($this->precision + 7) >> 3, chr(0), STR_PAD_LEFT) :
+ $result;
+ }
+
+ /**
+ * Converts a BigInteger to a hex string (eg. base-16)).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toHex(); // outputs '41'
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**8
+ */
+ function toHex($twos_compliment = false)
+ {
+ return bin2hex($this->toBytes($twos_compliment));
+ }
+
+ /**
+ * Converts a BigInteger to a bit string (eg. base-2).
+ *
+ * Negative numbers are saved as positive numbers, unless $twos_compliment is set to true, at which point, they're
+ * saved as two's compliment.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('65');
+ *
+ * echo $a->toBits(); // outputs '1000001'
+ * ?>
+ * </code>
+ *
+ * @param Boolean $twos_compliment
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-2**2
+ */
+ function toBits($twos_compliment = false)
+ {
+ $hex = $this->toHex($twos_compliment);
+ $bits = '';
+ for ($i = 0; $i < strlen($hex); $i+=8) {
+ $bits.= str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT);
+ }
+ return $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');
+ }
+
+ /**
+ * Converts a BigInteger to a base-10 number.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('50');
+ *
+ * echo $a->toString(); // outputs 50
+ * ?>
+ * </code>
+ *
+ * @return String
+ * @access public
+ * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10)
+ */
+ function toString()
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_strval($this->value);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '0') {
+ return '0';
+ }
+
+ return ltrim($this->value, '0');
+ }
+
+ if (!count($this->value)) {
+ return '0';
+ }
+
+ $temp = $this->copy();
+ $temp->is_negative = false;
+
+ $divisor = new Math_BigInteger();
+ $divisor->value = array(10000000); // eg. 10**7
+ $result = '';
+ while (count($temp->value)) {
+ list($temp, $mod) = $temp->divide($divisor);
+ $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result;
+ }
+ $result = ltrim($result, '0');
+ if (empty($result)) {
+ $result = '0';
+ }
+
+ if ($this->is_negative) {
+ $result = '-' . $result;
+ }
+
+ return $result;
+ }
+
+ /**
+ * Copy an object
+ *
+ * PHP5 passes objects by reference while PHP4 passes by value. As such, we need a function to guarantee
+ * that all objects are passed by value, when appropriate. More information can be found here:
+ *
+ * {@link http://php.net/language.oop5.basic#51624}
+ *
+ * @access public
+ * @see __clone()
+ * @return Math_BigInteger
+ */
+ function copy()
+ {
+ $temp = new Math_BigInteger();
+ $temp->value = $this->value;
+ $temp->is_negative = $this->is_negative;
+ $temp->generator = $this->generator;
+ $temp->precision = $this->precision;
+ $temp->bitmask = $this->bitmask;
+ return $temp;
+ }
+
+ /**
+ * __toString() magic method
+ *
+ * Will be called, automatically, if you're supporting just PHP5. If you're supporting PHP4, you'll need to call
+ * toString().
+ *
+ * @access public
+ * @internal Implemented per a suggestion by Techie-Michael - thanks!
+ */
+ function __toString()
+ {
+ return $this->toString();
+ }
+
+ /**
+ * __clone() magic method
+ *
+ * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone()
+ * directly in PHP5. You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5
+ * only syntax of $y = clone $x. As such, if you're trying to write an application that works on both PHP4 and PHP5,
+ * call Math_BigInteger::copy(), instead.
+ *
+ * @access public
+ * @see copy()
+ * @return Math_BigInteger
+ */
+ function __clone()
+ {
+ return $this->copy();
+ }
+
+ /**
+ * __sleep() magic method
+ *
+ * Will be called, automatically, when serialize() is called on a Math_BigInteger object.
+ *
+ * @see __wakeup
+ * @access public
+ */
+ function __sleep()
+ {
+ $this->hex = $this->toHex(true);
+ $vars = array('hex');
+ if ($this->generator != 'mt_rand') {
+ $vars[] = 'generator';
+ }
+ if ($this->precision > 0) {
+ $vars[] = 'precision';
+ }
+ return $vars;
+
+ }
+
+ /**
+ * __wakeup() magic method
+ *
+ * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.
+ *
+ * @see __sleep
+ * @access public
+ */
+ function __wakeup()
+ {
+ $temp = new Math_BigInteger($this->hex, -16);
+ $this->value = $temp->value;
+ $this->is_negative = $temp->is_negative;
+ $this->setRandomGenerator($this->generator);
+ if ($this->precision > 0) {
+ // recalculate $this->bitmask
+ $this->setPrecision($this->precision);
+ }
+ }
+
+ /**
+ * Adds two BigIntegers.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->add($b);
+ *
+ * echo $c->toString(); // outputs 30
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Math_BigInteger
+ * @access public
+ * @internal Performs base-2**52 addition
+ */
+ function add($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_add($this->value, $y->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcadd($this->value, $y->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+ $result = new Math_BigInteger();
+ $result->value = $temp[MATH_BIGINTEGER_VALUE];
+ $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs addition.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _add($x_value, $x_negative, $y_value, $y_negative)
+ {
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+
+ if ($x_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $y_value,
+ MATH_BIGINTEGER_SIGN => $y_negative
+ );
+ } else if ($y_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $x_value,
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ // subtract, if appropriate
+ if ( $x_negative != $y_negative ) {
+ if ( $x_value == $y_value ) {
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ $temp = $this->_subtract($x_value, false, $y_value, false);
+ $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ?
+ $x_negative : $y_negative;
+
+ return $temp;
+ }
+
+ if ($x_size < $y_size) {
+ $size = $x_size;
+ $value = $y_value;
+ } else {
+ $size = $y_size;
+ $value = $x_value;
+ }
+
+ $value[] = 0; // just in case the carry adds an extra digit
+
+ $carry = 0;
+ for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
+ $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry;
+ $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+ $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+ $temp = (int) ($sum / 0x4000000);
+
+ $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
+ $value[$j] = $temp;
+ }
+
+ if ($j == $size) { // ie. if $y_size is odd
+ $sum = $x_value[$i] + $y_value[$i] + $carry;
+ $carry = $sum >= 0x4000000;
+ $value[$i] = $carry ? $sum - 0x4000000 : $sum;
+ ++$i; // ie. let $i = $j since we've just done $value[$i]
+ }
+
+ if ($carry) {
+ for (; $value[$i] == 0x3FFFFFF; ++$i) {
+ $value[$i] = 0;
+ }
+ ++$value[$i];
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($value),
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ /**
+ * Subtracts two BigIntegers.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->subtract($b);
+ *
+ * echo $c->toString(); // outputs -10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Math_BigInteger
+ * @access public
+ * @internal Performs base-2**52 subtraction
+ */
+ function subtract($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_sub($this->value, $y->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcsub($this->value, $y->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative);
+
+ $result = new Math_BigInteger();
+ $result->value = $temp[MATH_BIGINTEGER_VALUE];
+ $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs subtraction.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _subtract($x_value, $x_negative, $y_value, $y_negative)
+ {
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+
+ if ($x_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $y_value,
+ MATH_BIGINTEGER_SIGN => !$y_negative
+ );
+ } else if ($y_size == 0) {
+ return array(
+ MATH_BIGINTEGER_VALUE => $x_value,
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ // add, if appropriate (ie. -$x - +$y or +$x - -$y)
+ if ( $x_negative != $y_negative ) {
+ $temp = $this->_add($x_value, false, $y_value, false);
+ $temp[MATH_BIGINTEGER_SIGN] = $x_negative;
+
+ return $temp;
+ }
+
+ $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative);
+
+ if ( !$diff ) {
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ // switch $x and $y around, if appropriate.
+ if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_negative = !$x_negative;
+
+ $x_size = count($x_value);
+ $y_size = count($y_value);
+ }
+
+ // at this point, $x_value should be at least as big as - if not bigger than - $y_value
+
+ $carry = 0;
+ for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) {
+ $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry;
+ $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+ $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+
+ $temp = (int) ($sum / 0x4000000);
+
+ $x_value[$i] = (int) ($sum - 0x4000000 * $temp);
+ $x_value[$j] = $temp;
+ }
+
+ if ($j == $y_size) { // ie. if $y_size is odd
+ $sum = $x_value[$i] - $y_value[$i] - $carry;
+ $carry = $sum < 0;
+ $x_value[$i] = $carry ? $sum + 0x4000000 : $sum;
+ ++$i;
+ }
+
+ if ($carry) {
+ for (; !$x_value[$i]; ++$i) {
+ $x_value[$i] = 0x3FFFFFF;
+ }
+ --$x_value[$i];
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($x_value),
+ MATH_BIGINTEGER_SIGN => $x_negative
+ );
+ }
+
+ /**
+ * Multiplies two BigIntegers
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * $c = $a->multiply($b);
+ *
+ * echo $c->toString(); // outputs 200
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $x
+ * @return Math_BigInteger
+ * @access public
+ */
+ function multiply($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_mul($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcmul($this->value, $x->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative);
+
+ $product = new Math_BigInteger();
+ $product->value = $temp[MATH_BIGINTEGER_VALUE];
+ $product->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+
+ return $this->_normalize($product);
+ }
+
+ /**
+ * Performs multiplication.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _multiply($x_value, $x_negative, $y_value, $y_negative)
+ {
+ //if ( $x_value == $y_value ) {
+ // return array(
+ // MATH_BIGINTEGER_VALUE => $this->_square($x_value),
+ // MATH_BIGINTEGER_SIGN => $x_sign != $y_value
+ // );
+ //}
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+ $this->_trim($this->_regularMultiply($x_value, $y_value)) :
+ $this->_trim($this->_karatsuba($x_value, $y_value)),
+ MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+ );
+ }
+
+ /**
+ * Performs long multiplication on two BigIntegers
+ *
+ * Modeled after 'multiply' in MutableBigInteger.java.
+ *
+ * @param Array $x_value
+ * @param Array $y_value
+ * @return Array
+ * @access private
+ */
+ function _regularMultiply($x_value, $y_value)
+ {
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array();
+ }
+
+ if ( $x_length < $y_length ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+ }
+
+ $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+ // the following for loop could be removed if the for loop following it
+ // (the one with nested for loops) initially set $i to 0, but
+ // doing so would also make the result in one set of unnecessary adds,
+ // since on the outermost loops first pass, $product->value[$k] is going
+ // to always be 0
+
+ $carry = 0;
+
+ for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0
+ $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ $product_value[$j] = $carry;
+
+ // the above for loop is what the previous comment was talking about. the
+ // following for loop is the "one with nested for loops"
+ for ($i = 1; $i < $y_length; ++$i) {
+ $carry = 0;
+
+ for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {
+ $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ $product_value[$k] = $carry;
+ }
+
+ return $product_value;
+ }
+
+ /**
+ * Performs Karatsuba multiplication on two BigIntegers
+ *
+ * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
+ *
+ * @param Array $x_value
+ * @param Array $y_value
+ * @return Array
+ * @access private
+ */
+ function _karatsuba($x_value, $y_value)
+ {
+ $m = min(count($x_value) >> 1, count($y_value) >> 1);
+
+ if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+ return $this->_regularMultiply($x_value, $y_value);
+ }
+
+ $x1 = array_slice($x_value, $m);
+ $x0 = array_slice($x_value, 0, $m);
+ $y1 = array_slice($y_value, $m);
+ $y0 = array_slice($y_value, 0, $m);
+
+ $z2 = $this->_karatsuba($x1, $y1);
+ $z0 = $this->_karatsuba($x0, $y0);
+
+ $z1 = $this->_add($x1, false, $x0, false);
+ $temp = $this->_add($y1, false, $y0, false);
+ $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]);
+ $temp = $this->_add($z2, false, $z0, false);
+ $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+ $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+ $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+ $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false);
+
+ return $xy[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Performs squaring
+ *
+ * @param Array $x
+ * @return Array
+ * @access private
+ */
+ function _square($x = false)
+ {
+ return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+ $this->_trim($this->_baseSquare($x)) :
+ $this->_trim($this->_karatsubaSquare($x));
+ }
+
+ /**
+ * Performs traditional squaring on two BigIntegers
+ *
+ * Squaring can be done faster than multiplying a number by itself can be. See
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.
+ *
+ * @param Array $value
+ * @return Array
+ * @access private
+ */
+ function _baseSquare($value)
+ {
+ if ( empty($value) ) {
+ return array();
+ }
+ $square_value = $this->_array_repeat(0, 2 * count($value));
+
+ for ($i = 0, $max_index = count($value) - 1; $i <= $max_index; ++$i) {
+ $i2 = $i << 1;
+
+ $temp = $square_value[$i2] + $value[$i] * $value[$i];
+ $carry = (int) ($temp / 0x4000000);
+ $square_value[$i2] = (int) ($temp - 0x4000000 * $carry);
+
+ // note how we start from $i+1 instead of 0 as we do in multiplication.
+ for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {
+ $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $square_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ // the following line can yield values larger 2**15. at this point, PHP should switch
+ // over to floats.
+ $square_value[$i + $max_index + 1] = $carry;
+ }
+
+ return $square_value;
+ }
+
+ /**
+ * Performs Karatsuba "squaring" on two BigIntegers
+ *
+ * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.
+ *
+ * @param Array $value
+ * @return Array
+ * @access private
+ */
+ function _karatsubaSquare($value)
+ {
+ $m = count($value) >> 1;
+
+ if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+ return $this->_baseSquare($value);
+ }
+
+ $x1 = array_slice($value, $m);
+ $x0 = array_slice($value, 0, $m);
+
+ $z2 = $this->_karatsubaSquare($x1);
+ $z0 = $this->_karatsubaSquare($x0);
+
+ $z1 = $this->_add($x1, false, $x0, false);
+ $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]);
+ $temp = $this->_add($z2, false, $z0, false);
+ $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
+ $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+
+ $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
+ $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false);
+
+ return $xx[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Divides two BigIntegers.
+ *
+ * Returns an array whose first element contains the quotient and whose second element contains the
+ * "common residue". If the remainder would be positive, the "common residue" and the remainder are the
+ * same. If the remainder would be negative, the "common residue" is equal to the sum of the remainder
+ * and the divisor (basically, the "common residue" is the first positive modulo).
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ *
+ * list($quotient, $remainder) = $a->divide($b);
+ *
+ * echo $quotient->toString(); // outputs 0
+ * echo "\r\n";
+ * echo $remainder->toString(); // outputs 10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $y
+ * @return Array
+ * @access public
+ * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.
+ */
+ function divide($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+
+ list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);
+
+ if (gmp_sign($remainder->value) < 0) {
+ $remainder->value = gmp_add($remainder->value, gmp_abs($y->value));
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+
+ $quotient->value = bcdiv($this->value, $y->value, 0);
+ $remainder->value = bcmod($this->value, $y->value);
+
+ if ($remainder->value[0] == '-') {
+ $remainder->value = bcadd($remainder->value, $y->value[0] == '-' ? substr($y->value, 1) : $y->value, 0);
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ }
+
+ if (count($y->value) == 1) {
+ list($q, $r) = $this->_divide_digit($this->value, $y->value[0]);
+ $quotient = new Math_BigInteger();
+ $remainder = new Math_BigInteger();
+ $quotient->value = $q;
+ $remainder->value = array($r);
+ $quotient->is_negative = $this->is_negative != $y->is_negative;
+ return array($this->_normalize($quotient), $this->_normalize($remainder));
+ }
+
+ static $zero;
+ if ( !isset($zero) ) {
+ $zero = new Math_BigInteger();
+ }
+
+ $x = $this->copy();
+ $y = $y->copy();
+
+ $x_sign = $x->is_negative;
+ $y_sign = $y->is_negative;
+
+ $x->is_negative = $y->is_negative = false;
+
+ $diff = $x->compare($y);
+
+ if ( !$diff ) {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ $temp->is_negative = $x_sign != $y_sign;
+ return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger()));
+ }
+
+ if ( $diff < 0 ) {
+ // if $x is negative, "add" $y.
+ if ( $x_sign ) {
+ $x = $y->subtract($x);
+ }
+ return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x));
+ }
+
+ // normalize $x and $y as described in HAC 14.23 / 14.24
+ $msb = $y->value[count($y->value) - 1];
+ for ($shift = 0; !($msb & 0x2000000); ++$shift) {
+ $msb <<= 1;
+ }
+ $x->_lshift($shift);
+ $y->_lshift($shift);
+ $y_value = &$y->value;
+
+ $x_max = count($x->value) - 1;
+ $y_max = count($y->value) - 1;
+
+ $quotient = new Math_BigInteger();
+ $quotient_value = &$quotient->value;
+ $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1);
+
+ static $temp, $lhs, $rhs;
+ if (!isset($temp)) {
+ $temp = new Math_BigInteger();
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ }
+ $temp_value = &$temp->value;
+ $rhs_value = &$rhs->value;
+
+ // $temp = $y << ($x_max - $y_max-1) in base 2**26
+ $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value);
+
+ while ( $x->compare($temp) >= 0 ) {
+ // calculate the "common residue"
+ ++$quotient_value[$x_max - $y_max];
+ $x = $x->subtract($temp);
+ $x_max = count($x->value) - 1;
+ }
+
+ for ($i = $x_max; $i >= $y_max + 1; --$i) {
+ $x_value = &$x->value;
+ $x_window = array(
+ isset($x_value[$i]) ? $x_value[$i] : 0,
+ isset($x_value[$i - 1]) ? $x_value[$i - 1] : 0,
+ isset($x_value[$i - 2]) ? $x_value[$i - 2] : 0
+ );
+ $y_window = array(
+ $y_value[$y_max],
+ ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0
+ );
+
+ $q_index = $i - $y_max - 1;
+ if ($x_window[0] == $y_window[0]) {
+ $quotient_value[$q_index] = 0x3FFFFFF;
+ } else {
+ $quotient_value[$q_index] = (int) (
+ ($x_window[0] * 0x4000000 + $x_window[1])
+ /
+ $y_window[0]
+ );
+ }
+
+ $temp_value = array($y_window[1], $y_window[0]);
+
+ $lhs->value = array($quotient_value[$q_index]);
+ $lhs = $lhs->multiply($temp);
+
+ $rhs_value = array($x_window[2], $x_window[1], $x_window[0]);
+
+ while ( $lhs->compare($rhs) > 0 ) {
+ --$quotient_value[$q_index];
+
+ $lhs->value = array($quotient_value[$q_index]);
+ $lhs = $lhs->multiply($temp);
+ }
+
+ $adjust = $this->_array_repeat(0, $q_index);
+ $temp_value = array($quotient_value[$q_index]);
+ $temp = $temp->multiply($y);
+ $temp_value = &$temp->value;
+ $temp_value = array_merge($adjust, $temp_value);
+
+ $x = $x->subtract($temp);
+
+ if ($x->compare($zero) < 0) {
+ $temp_value = array_merge($adjust, $y_value);
+ $x = $x->add($temp);
+
+ --$quotient_value[$q_index];
+ }
+
+ $x_max = count($x_value) - 1;
+ }
+
+ // unnormalize the remainder
+ $x->_rshift($shift);
+
+ $quotient->is_negative = $x_sign != $y_sign;
+
+ // calculate the "common residue", if appropriate
+ if ( $x_sign ) {
+ $y->_rshift($shift);
+ $x = $y->subtract($x);
+ }
+
+ return array($this->_normalize($quotient), $this->_normalize($x));
+ }
+
+ /**
+ * Divides a BigInteger by a regular integer
+ *
+ * abc / x = a00 / x + b0 / x + c / x
+ *
+ * @param Array $dividend
+ * @param Array $divisor
+ * @return Array
+ * @access private
+ */
+ function _divide_digit($dividend, $divisor)
+ {
+ $carry = 0;
+ $result = array();
+
+ for ($i = count($dividend) - 1; $i >= 0; --$i) {
+ $temp = 0x4000000 * $carry + $dividend[$i];
+ $result[$i] = (int) ($temp / $divisor);
+ $carry = (int) ($temp - $divisor * $result[$i]);
+ }
+
+ return array($result, $carry);
+ }
+
+ /**
+ * Performs modular exponentiation.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger('10');
+ * $b = new Math_BigInteger('20');
+ * $c = new Math_BigInteger('30');
+ *
+ * $c = $a->modPow($b, $c);
+ *
+ * echo $c->toString(); // outputs 10
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and
+ * and although the approach involving repeated squaring does vastly better, it, too, is impractical
+ * for our purposes. The reason being that division - by far the most complicated and time-consuming
+ * of the basic operations (eg. +,-,*,/) - occurs multiple times within it.
+ *
+ * Modular reductions resolve this issue. Although an individual modular reduction takes more time
+ * then an individual division, when performed in succession (with the same modulo), they're a lot faster.
+ *
+ * The two most commonly used modular reductions are Barrett and Montgomery reduction. Montgomery reduction,
+ * although faster, only works when the gcd of the modulo and of the base being used is 1. In RSA, when the
+ * base is a power of two, the modulo - a product of two primes - is always going to have a gcd of 1 (because
+ * the product of two odd numbers is odd), but what about when RSA isn't used?
+ *
+ * In contrast, Barrett reduction has no such constraint. As such, some bigint implementations perform a
+ * Barrett reduction after every operation in the modpow function. Others perform Barrett reductions when the
+ * modulo is even and Montgomery reductions when the modulo is odd. BigInteger.java's modPow method, however,
+ * uses a trick involving the Chinese Remainder Theorem to factor the even modulo into two numbers - one odd and
+ * the other, a power of two - and recombine them, later. This is the method that this modPow function uses.
+ * {@link http://islab.oregonstate.edu/papers/j34monex.pdf Montgomery Reduction with Even Modulus} elaborates.
+ */
+ function modPow($e, $n)
+ {
+ $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();
+
+ if ($e->compare(new Math_BigInteger()) < 0) {
+ $e = $e->abs();
+
+ $temp = $this->modInverse($n);
+ if ($temp === false) {
+ return false;
+ }
+
+ return $this->_normalize($temp->modPow($e, $n));
+ }
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_powm($this->value, $e->value, $n->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp = new Math_BigInteger();
+ $temp->value = bcpowmod($this->value, $e->value, $n->value, 0);
+
+ return $this->_normalize($temp);
+ }
+
+ if ( empty($e->value) ) {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ return $this->_normalize($temp);
+ }
+
+ if ( $e->value == array(1) ) {
+ list(, $temp) = $this->divide($n);
+ return $this->_normalize($temp);
+ }
+
+ if ( $e->value == array(2) ) {
+ $temp = new Math_BigInteger();
+ $temp->value = $this->_square($this->value);
+ list(, $temp) = $temp->divide($n);
+ return $this->_normalize($temp);
+ }
+
+ return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT));
+
+ // is the modulo odd?
+ if ( $n->value[0] & 1 ) {
+ return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY));
+ }
+ // if it's not, it's even
+
+ // find the lowest set bit (eg. the max pow of 2 that divides $n)
+ for ($i = 0; $i < count($n->value); ++$i) {
+ if ( $n->value[$i] ) {
+ $temp = decbin($n->value[$i]);
+ $j = strlen($temp) - strrpos($temp, '1') - 1;
+ $j+= 26 * $i;
+ break;
+ }
+ }
+ // at this point, 2^$j * $n/(2^$j) == $n
+
+ $mod1 = $n->copy();
+ $mod1->_rshift($j);
+ $mod2 = new Math_BigInteger();
+ $mod2->value = array(1);
+ $mod2->_lshift($j);
+
+ $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger();
+ $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2);
+
+ $y1 = $mod2->modInverse($mod1);
+ $y2 = $mod1->modInverse($mod2);
+
+ $result = $part1->multiply($mod2);
+ $result = $result->multiply($y1);
+
+ $temp = $part2->multiply($mod1);
+ $temp = $temp->multiply($y2);
+
+ $result = $result->add($temp);
+ list(, $result) = $result->divide($n);
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Performs modular exponentiation.
+ *
+ * Alias for Math_BigInteger::modPow()
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ */
+ function powMod($e, $n)
+ {
+ return $this->modPow($e, $n);
+ }
+
+ /**
+ * Sliding Window k-ary Modular Exponentiation
+ *
+ * Based on {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=27 HAC 14.85} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=210 MPM 7.7}. In a departure from those algorithims,
+ * however, this function performs a modular reduction after every multiplication and squaring operation.
+ * As such, this function has the same preconditions that the reductions being used do.
+ *
+ * @param Math_BigInteger $e
+ * @param Math_BigInteger $n
+ * @param Integer $mode
+ * @return Math_BigInteger
+ * @access private
+ */
+ function _slidingWindow($e, $n, $mode)
+ {
+ static $window_ranges = array(7, 25, 81, 241, 673, 1793); // from BigInteger.java's oddModPow function
+ //static $window_ranges = array(0, 7, 36, 140, 450, 1303, 3529); // from MPM 7.3.1
+
+ $e_value = $e->value;
+ $e_length = count($e_value) - 1;
+ $e_bits = decbin($e_value[$e_length]);
+ for ($i = $e_length - 1; $i >= 0; --$i) {
+ $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT);
+ }
+
+ $e_length = strlen($e_bits);
+
+ // calculate the appropriate window size.
+ // $window_size == 3 if $window_ranges is between 25 and 81, for example.
+ for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i);
+
+ $n_value = $n->value;
+
+ // precompute $this^0 through $this^$window_size
+ $powers = array();
+ $powers[1] = $this->_prepareReduce($this->value, $n_value, $mode);
+ $powers[2] = $this->_squareReduce($powers[1], $n_value, $mode);
+
+ // we do every other number since substr($e_bits, $i, $j+1) (see below) is supposed to end
+ // in a 1. ie. it's supposed to be odd.
+ $temp = 1 << ($window_size - 1);
+ for ($i = 1; $i < $temp; ++$i) {
+ $i2 = $i << 1;
+ $powers[$i2 + 1] = $this->_multiplyReduce($powers[$i2 - 1], $powers[2], $n_value, $mode);
+ }
+
+ $result = array(1);
+ $result = $this->_prepareReduce($result, $n_value, $mode);
+
+ for ($i = 0; $i < $e_length; ) {
+ if ( !$e_bits[$i] ) {
+ $result = $this->_squareReduce($result, $n_value, $mode);
+ ++$i;
+ } else {
+ for ($j = $window_size - 1; $j > 0; --$j) {
+ if ( !empty($e_bits[$i + $j]) ) {
+ break;
+ }
+ }
+
+ for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1)
+ $result = $this->_squareReduce($result, $n_value, $mode);
+ }
+
+ $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode);
+
+ $i+=$j + 1;
+ }
+ }
+
+ $temp = new Math_BigInteger();
+ $temp->value = $this->_reduce($result, $n_value, $mode);
+
+ return $temp;
+ }
+
+ /**
+ * Modular reduction
+ *
+ * For most $modes this will return the remainder.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _reduce($x, $n, $mode)
+ {
+ switch ($mode) {
+ case MATH_BIGINTEGER_MONTGOMERY:
+ return $this->_montgomery($x, $n);
+ case MATH_BIGINTEGER_BARRETT:
+ return $this->_barrett($x, $n);
+ case MATH_BIGINTEGER_POWEROF2:
+ $lhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ return $x->_mod2($n);
+ case MATH_BIGINTEGER_CLASSIC:
+ $lhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ case MATH_BIGINTEGER_NONE:
+ return $x;
+ default:
+ // an invalid $mode was provided
+ }
+ }
+
+ /**
+ * Modular reduction preperation
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _prepareReduce($x, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_prepMontgomery($x, $n);
+ }
+ return $this->_reduce($x, $n, $mode);
+ }
+
+ /**
+ * Modular multiply
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $y
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _multiplyReduce($x, $y, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_montgomeryMultiply($x, $y, $n);
+ }
+ $temp = $this->_multiply($x, false, $y, false);
+ return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode);
+ }
+
+ /**
+ * Modular square
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @param Integer $mode
+ * @return Array
+ */
+ function _squareReduce($x, $n, $mode)
+ {
+ if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+ return $this->_montgomeryMultiply($x, $x, $n);
+ }
+ return $this->_reduce($this->_square($x), $n, $mode);
+ }
+
+ /**
+ * Modulos for Powers of Two
+ *
+ * Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1),
+ * we'll just use this function as a wrapper for doing that.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Math_BigInteger
+ * @return Math_BigInteger
+ */
+ function _mod2($n)
+ {
+ $temp = new Math_BigInteger();
+ $temp->value = array(1);
+ return $this->bitwise_and($n->subtract($temp));
+ }
+
+ /**
+ * Barrett Modular Reduction
+ *
+ * See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=14 HAC 14.3.3} /
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=165 MPM 6.2.5} for more information. Modified slightly,
+ * so as not to require negative numbers (initially, this script didn't support negative numbers).
+ *
+ * Employs "folding", as described at
+ * {@link http://www.cosic.esat.kuleuven.be/publications/thesis-149.pdf#page=66 thesis-149.pdf#page=66}. To quote from
+ * it, "the idea [behind folding] is to find a value x' such that x (mod m) = x' (mod m), with x' being smaller than x."
+ *
+ * Unfortunately, the "Barrett Reduction with Folding" algorithm described in thesis-149.pdf is not, as written, all that
+ * usable on account of (1) its not using reasonable radix points as discussed in
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=162 MPM 6.2.2} and (2) the fact that, even with reasonable
+ * radix points, it only works when there are an even number of digits in the denominator. The reason for (2) is that
+ * (x >> 1) + (x >> 1) != x / 2 + x / 2. If x is even, they're the same, but if x is odd, they're not. See the in-line
+ * comments for details.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $n
+ * @param Array $m
+ * @return Array
+ */
+ function _barrett($n, $m)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ $m_length = count($m);
+
+ // if ($this->_compare($n, $this->_square($m)) >= 0) {
+ if (count($n) > 2 * $m_length) {
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ $lhs->value = $n;
+ $rhs->value = $m;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ // if (m.length >> 1) + 2 <= m.length then m is too small and n can't be reduced
+ if ($m_length < 5) {
+ return $this->_regularBarrett($n, $m);
+ }
+
+ // n = 2 * m.length
+
+ if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+
+ $lhs = new Math_BigInteger();
+ $lhs_value = &$lhs->value;
+ $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1));
+ $lhs_value[] = 1;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $m;
+
+ list($u, $m1) = $lhs->divide($rhs);
+ $u = $u->value;
+ $m1 = $m1->value;
+
+ $cache[MATH_BIGINTEGER_DATA][] = array(
+ 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
+ 'm1'=> $m1 // m.length
+ );
+ } else {
+ extract($cache[MATH_BIGINTEGER_DATA][$key]);
+ }
+
+ $cutoff = $m_length + ($m_length >> 1);
+ $lsd = array_slice($n, 0, $cutoff); // m.length + (m.length >> 1)
+ $msd = array_slice($n, $cutoff); // m.length >> 1
+ $lsd = $this->_trim($lsd);
+ $temp = $this->_multiply($msd, false, $m1, false);
+ $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1
+
+ if ($m_length & 1) {
+ return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m);
+ }
+
+ // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
+ $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1);
+ // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
+ // if odd: ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
+ $temp = $this->_multiply($temp, false, $u, false);
+ // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
+ // if odd: (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
+ $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1);
+ // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
+ // if odd: (m.length - (m.length >> 1)) + m.length = 2 * m.length - (m.length >> 1)
+ $temp = $this->_multiply($temp, false, $m, false);
+
+ // at this point, if m had an odd number of digits, we'd be subtracting a 2 * m.length - (m.length >> 1) digit
+ // number from a m.length + (m.length >> 1) + 1 digit number. ie. there'd be an extra digit and the while loop
+ // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).
+
+ $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+
+ while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * (Regular) Barrett Modular Reduction
+ *
+ * For numbers with more than four digits Math_BigInteger::_barrett() is faster. The difference between that and this
+ * is that this function does not fold the denominator into a smaller form.
+ *
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _regularBarrett($x, $n)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ $n_length = count($n);
+
+ if (count($x) > 2 * $n_length) {
+ $lhs = new Math_BigInteger();
+ $rhs = new Math_BigInteger();
+ $lhs->value = $x;
+ $rhs->value = $n;
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $n;
+ $lhs = new Math_BigInteger();
+ $lhs_value = &$lhs->value;
+ $lhs_value = $this->_array_repeat(0, 2 * $n_length);
+ $lhs_value[] = 1;
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+ list($temp, ) = $lhs->divide($rhs); // m.length
+ $cache[MATH_BIGINTEGER_DATA][] = $temp->value;
+ }
+
+ // 2 * m.length - (m.length - 1) = m.length + 1
+ $temp = array_slice($x, $n_length - 1);
+ // (m.length + 1) + m.length = 2 * m.length + 1
+ $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false);
+ // (2 * m.length + 1) - (m.length - 1) = m.length + 2
+ $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1);
+
+ // m.length + 1
+ $result = array_slice($x, 0, $n_length + 1);
+ // m.length + 1
+ $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1);
+ // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1)
+
+ if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
+ $corrector_value = $this->_array_repeat(0, $n_length + 1);
+ $corrector_value[] = 1;
+ $result = $this->_add($result, false, $corrector, false);
+ $result = $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits
+ $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]);
+ while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Performs long multiplication up to $stop digits
+ *
+ * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.
+ *
+ * @see _regularBarrett()
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Array
+ * @access private
+ */
+ function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop)
+ {
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+
+ if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+ return array(
+ MATH_BIGINTEGER_VALUE => array(),
+ MATH_BIGINTEGER_SIGN => false
+ );
+ }
+
+ if ( $x_length < $y_length ) {
+ $temp = $x_value;
+ $x_value = $y_value;
+ $y_value = $temp;
+
+ $x_length = count($x_value);
+ $y_length = count($y_value);
+ }
+
+ $product_value = $this->_array_repeat(0, $x_length + $y_length);
+
+ // the following for loop could be removed if the for loop following it
+ // (the one with nested for loops) initially set $i to 0, but
+ // doing so would also make the result in one set of unnecessary adds,
+ // since on the outermost loops first pass, $product->value[$k] is going
+ // to always be 0
+
+ $carry = 0;
+
+ for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i
+ $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ if ($j < $stop) {
+ $product_value[$j] = $carry;
+ }
+
+ // the above for loop is what the previous comment was talking about. the
+ // following for loop is the "one with nested for loops"
+
+ for ($i = 1; $i < $y_length; ++$i) {
+ $carry = 0;
+
+ for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {
+ $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+ }
+
+ if ($k < $stop) {
+ $product_value[$k] = $carry;
+ }
+ }
+
+ return array(
+ MATH_BIGINTEGER_VALUE => $this->_trim($product_value),
+ MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+ );
+ }
+
+ /**
+ * Montgomery Modular Reduction
+ *
+ * ($x->_prepMontgomery($n))->_montgomery($n) yields $x % $n.
+ * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=170 MPM 6.3} provides insights on how this can be
+ * improved upon (basically, by using the comba method). gcd($n, 2) must be equal to one for this function
+ * to work correctly.
+ *
+ * @see _prepMontgomery()
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _montgomery($x, $n)
+ {
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $x;
+ $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n);
+ }
+
+ $k = count($n);
+
+ $result = array(MATH_BIGINTEGER_VALUE => $x);
+
+ for ($i = 0; $i < $k; ++$i) {
+ $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $this->_regularMultiply(array($temp), $n);
+ $temp = array_merge($this->_array_repeat(0, $i), $temp);
+ $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false);
+ }
+
+ $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k);
+
+ if ($this->_compare($result, false, $n, false) >= 0) {
+ $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false);
+ }
+
+ return $result[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Montgomery Multiply
+ *
+ * Interleaves the montgomery reduction and long multiplication algorithms together as described in
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
+ *
+ * @see _prepMontgomery()
+ * @see _montgomery()
+ * @access private
+ * @param Array $x
+ * @param Array $y
+ * @param Array $m
+ * @return Array
+ */
+ function _montgomeryMultiply($x, $y, $m)
+ {
+ $temp = $this->_multiply($x, false, $y, false);
+ return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m);
+
+ static $cache = array(
+ MATH_BIGINTEGER_VARIABLE => array(),
+ MATH_BIGINTEGER_DATA => array()
+ );
+
+ if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
+ $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
+ $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+ $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m);
+ }
+
+ $n = max(count($x), count($y), count($m));
+ $x = array_pad($x, $n, 0);
+ $y = array_pad($y, $n, 0);
+ $m = array_pad($m, $n, 0);
+ $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1));
+ for ($i = 0; $i < $n; ++$i) {
+ $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key];
+ $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+ $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false);
+ $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+ $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1);
+ }
+ if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) {
+ $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false);
+ }
+ return $a[MATH_BIGINTEGER_VALUE];
+ }
+
+ /**
+ * Prepare a number for use in Montgomery Modular Reductions
+ *
+ * @see _montgomery()
+ * @see _slidingWindow()
+ * @access private
+ * @param Array $x
+ * @param Array $n
+ * @return Array
+ */
+ function _prepMontgomery($x, $n)
+ {
+ $lhs = new Math_BigInteger();
+ $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x);
+ $rhs = new Math_BigInteger();
+ $rhs->value = $n;
+
+ list(, $temp) = $lhs->divide($rhs);
+ return $temp->value;
+ }
+
+ /**
+ * Modular Inverse of a number mod 2**26 (eg. 67108864)
+ *
+ * Based off of the bnpInvDigit function implemented and justified in the following URL:
+ *
+ * {@link http://www-cs-students.stanford.edu/~tjw/jsbn/jsbn.js}
+ *
+ * The following URL provides more info:
+ *
+ * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}
+ *
+ * As for why we do all the bitmasking... strange things can happen when converting from floats to ints. For
+ * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields
+ * int(-2147483648). To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't
+ * auto-converted to floats. The outermost bitmask is present because without it, there's no guarantee that
+ * the "residue" returned would be the so-called "common residue". We use fmod, in the last step, because the
+ * maximum possible $x is 26 bits and the maximum $result is 16 bits. Thus, we have to be able to handle up to
+ * 40 bits, which only 64-bit floating points will support.
+ *
+ * Thanks to Pedro Gimeno Fortea for input!
+ *
+ * @see _montgomery()
+ * @access private
+ * @param Array $x
+ * @return Integer
+ */
+ function _modInverse67108864($x) // 2**26 == 67108864
+ {
+ $x = -$x[0];
+ $result = $x & 0x3; // x**-1 mod 2**2
+ $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4
+ $result = ($result * (2 - ($x & 0xFF) * $result)) & 0xFF; // x**-1 mod 2**8
+ $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16
+ $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26
+ return $result & 0x3FFFFFF;
+ }
+
+ /**
+ * Calculates modular inverses.
+ *
+ * Say you have (30 mod 17 * x mod 17) mod 17 == 1. x can be found using modular inverses.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(30);
+ * $b = new Math_BigInteger(17);
+ *
+ * $c = $a->modInverse($b);
+ * echo $c->toString(); // outputs 4
+ *
+ * echo "\r\n";
+ *
+ * $d = $a->multiply($c);
+ * list(, $d) = $d->divide($b);
+ * echo $d; // outputs 1 (as per the definition of modular inverse)
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise.
+ * @access public
+ * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.
+ */
+ function modInverse($n)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_invert($this->value, $n->value);
+
+ return ( $temp->value === false ) ? false : $this->_normalize($temp);
+ }
+
+ static $zero, $one;
+ if (!isset($zero)) {
+ $zero = new Math_BigInteger();
+ $one = new Math_BigInteger(1);
+ }
+
+ // $x mod $n == $x mod -$n.
+ $n = $n->abs();
+
+ if ($this->compare($zero) < 0) {
+ $temp = $this->abs();
+ $temp = $temp->modInverse($n);
+ return $negated === false ? false : $this->_normalize($n->subtract($temp));
+ }
+
+ extract($this->extendedGCD($n));
+
+ if (!$gcd->equals($one)) {
+ return false;
+ }
+
+ $x = $x->compare($zero) < 0 ? $x->add($n) : $x;
+
+ return $this->compare($zero) < 0 ? $this->_normalize($n->subtract($x)) : $this->_normalize($x);
+ }
+
+ /**
+ * Calculates the greatest common divisor and Bézout's identity.
+ *
+ * Say you have 693 and 609. The GCD is 21. Bézout's identity states that there exist integers x and y such that
+ * 693*x + 609*y == 21. In point of fact, there are actually an infinite number of x and y combinations and which
+ * combination is returned is dependant upon which mode is in use. See
+ * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bézout's identity - Wikipedia} for more information.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(693);
+ * $b = new Math_BigInteger(609);
+ *
+ * extract($a->extendedGCD($b));
+ *
+ * echo $gcd->toString() . "\r\n"; // outputs 21
+ * echo $a->toString() * $x->toString() + $b->toString() * $y->toString(); // outputs 21
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ * @internal Calculates the GCD using the binary xGCD algorithim described in
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}. As the text above 14.61 notes,
+ * the more traditional algorithim requires "relatively costly multiple-precision divisions".
+ */
+ function extendedGCD($n)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ extract(gmp_gcdext($this->value, $n->value));
+
+ return array(
+ 'gcd' => $this->_normalize(new Math_BigInteger($g)),
+ 'x' => $this->_normalize(new Math_BigInteger($s)),
+ 'y' => $this->_normalize(new Math_BigInteger($t))
+ );
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works
+ // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway. as is,
+ // the basic extended euclidean algorithim is what we're using.
+
+ $u = $this->value;
+ $v = $n->value;
+
+ $a = '1';
+ $b = '0';
+ $c = '0';
+ $d = '1';
+
+ while (bccomp($v, '0', 0) != 0) {
+ $q = bcdiv($u, $v, 0);
+
+ $temp = $u;
+ $u = $v;
+ $v = bcsub($temp, bcmul($v, $q, 0), 0);
+
+ $temp = $a;
+ $a = $c;
+ $c = bcsub($temp, bcmul($a, $q, 0), 0);
+
+ $temp = $b;
+ $b = $d;
+ $d = bcsub($temp, bcmul($b, $q, 0), 0);
+ }
+
+ return array(
+ 'gcd' => $this->_normalize(new Math_BigInteger($u)),
+ 'x' => $this->_normalize(new Math_BigInteger($a)),
+ 'y' => $this->_normalize(new Math_BigInteger($b))
+ );
+ }
+
+ $y = $n->copy();
+ $x = $this->copy();
+ $g = new Math_BigInteger();
+ $g->value = array(1);
+
+ while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) {
+ $x->_rshift(1);
+ $y->_rshift(1);
+ $g->_lshift(1);
+ }
+
+ $u = $x->copy();
+ $v = $y->copy();
+
+ $a = new Math_BigInteger();
+ $b = new Math_BigInteger();
+ $c = new Math_BigInteger();
+ $d = new Math_BigInteger();
+
+ $a->value = $d->value = $g->value = array(1);
+ $b->value = $c->value = array();
+
+ while ( !empty($u->value) ) {
+ while ( !($u->value[0] & 1) ) {
+ $u->_rshift(1);
+ if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) {
+ $a = $a->add($y);
+ $b = $b->subtract($x);
+ }
+ $a->_rshift(1);
+ $b->_rshift(1);
+ }
+
+ while ( !($v->value[0] & 1) ) {
+ $v->_rshift(1);
+ if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) {
+ $c = $c->add($y);
+ $d = $d->subtract($x);
+ }
+ $c->_rshift(1);
+ $d->_rshift(1);
+ }
+
+ if ($u->compare($v) >= 0) {
+ $u = $u->subtract($v);
+ $a = $a->subtract($c);
+ $b = $b->subtract($d);
+ } else {
+ $v = $v->subtract($u);
+ $c = $c->subtract($a);
+ $d = $d->subtract($b);
+ }
+ }
+
+ return array(
+ 'gcd' => $this->_normalize($g->multiply($v)),
+ 'x' => $this->_normalize($c),
+ 'y' => $this->_normalize($d)
+ );
+ }
+
+ /**
+ * Calculates the greatest common divisor
+ *
+ * Say you have 693 and 609. The GCD is 21.
+ *
+ * Here's an example:
+ * <code>
+ * <?php
+ * include('Math/BigInteger.php');
+ *
+ * $a = new Math_BigInteger(693);
+ * $b = new Math_BigInteger(609);
+ *
+ * $gcd = a->extendedGCD($b);
+ *
+ * echo $gcd->toString() . "\r\n"; // outputs 21
+ * ?>
+ * </code>
+ *
+ * @param Math_BigInteger $n
+ * @return Math_BigInteger
+ * @access public
+ */
+ function gcd($n)
+ {
+ extract($this->extendedGCD($n));
+ return $gcd;
+ }
+
+ /**
+ * Absolute value.
+ *
+ * @return Math_BigInteger
+ * @access public
+ */
+ function abs()
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp->value = gmp_abs($this->value);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value;
+ break;
+ default:
+ $temp->value = $this->value;
+ }
+
+ return $temp;
+ }
+
+ /**
+ * Compares two numbers.
+ *
+ * Although one might think !$x->compare($y) means $x != $y, it, in fact, means the opposite. The reason for this is
+ * demonstrated thusly:
+ *
+ * $x > $y: $x->compare($y) > 0
+ * $x < $y: $x->compare($y) < 0
+ * $x == $y: $x->compare($y) == 0
+ *
+ * Note how the same comparison operator is used. If you want to test for equality, use $x->equals($y).
+ *
+ * @param Math_BigInteger $x
+ * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal.
+ * @access public
+ * @see equals()
+ * @internal Could return $this->subtract($x), but that's not as fast as what we do do.
+ */
+ function compare($y)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_cmp($this->value, $y->value);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ return bccomp($this->value, $y->value, 0);
+ }
+
+ return $this->_compare($this->value, $this->is_negative, $y->value, $y->is_negative);
+ }
+
+ /**
+ * Compares two numbers.
+ *
+ * @param Array $x_value
+ * @param Boolean $x_negative
+ * @param Array $y_value
+ * @param Boolean $y_negative
+ * @return Integer
+ * @see compare()
+ * @access private
+ */
+ function _compare($x_value, $x_negative, $y_value, $y_negative)
+ {
+ if ( $x_negative != $y_negative ) {
+ return ( !$x_negative && $y_negative ) ? 1 : -1;
+ }
+
+ $result = $x_negative ? -1 : 1;
+
+ if ( count($x_value) != count($y_value) ) {
+ return ( count($x_value) > count($y_value) ) ? $result : -$result;
+ }
+ $size = max(count($x_value), count($y_value));
+
+ $x_value = array_pad($x_value, $size, 0);
+ $y_value = array_pad($y_value, $size, 0);
+
+ for ($i = count($x_value) - 1; $i >= 0; --$i) {
+ if ($x_value[$i] != $y_value[$i]) {
+ return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result;
+ }
+ }
+
+ return 0;
+ }
+
+ /**
+ * Tests the equality of two numbers.
+ *
+ * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare()
+ *
+ * @param Math_BigInteger $x
+ * @return Boolean
+ * @access public
+ * @see compare()
+ */
+ function equals($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_cmp($this->value, $x->value) == 0;
+ default:
+ return $this->value === $x->value && $this->is_negative == $x->is_negative;
+ }
+ }
+
+ /**
+ * Set Precision
+ *
+ * Some bitwise operations give different results depending on the precision being used. Examples include left
+ * shift, not, and rotates.
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @return Math_BigInteger
+ */
+ function setPrecision($bits)
+ {
+ $this->precision = $bits;
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) {
+ $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
+ } else {
+ $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0));
+ }
+
+ $temp = $this->_normalize($this);
+ $this->value = $temp->value;
+ }
+
+ /**
+ * Logical And
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_and($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_and($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left & $right, 256));
+ }
+
+ $result = $this->copy();
+
+ $length = min(count($x->value), count($this->value));
+
+ $result->value = array_slice($result->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $result->value[$i] & $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Or
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_or($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_or($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left | $right, 256));
+ }
+
+ $length = max(count($this->value), count($x->value));
+ $result = $this->copy();
+ $result->value = array_pad($result->value, 0, $length);
+ $x->value = array_pad($x->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $this->value[$i] | $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Exclusive-Or
+ *
+ * @param Math_BigInteger $x
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_xor($x)
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ $temp = new Math_BigInteger();
+ $temp->value = gmp_xor($this->value, $x->value);
+
+ return $this->_normalize($temp);
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $left = $this->toBytes();
+ $right = $x->toBytes();
+
+ $length = max(strlen($left), strlen($right));
+
+ $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
+ $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($left ^ $right, 256));
+ }
+
+ $length = max(count($this->value), count($x->value));
+ $result = $this->copy();
+ $result->value = array_pad($result->value, 0, $length);
+ $x->value = array_pad($x->value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $result->value[$i] = $this->value[$i] ^ $x->value[$i];
+ }
+
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Not
+ *
+ * @access public
+ * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
+ * @return Math_BigInteger
+ */
+ function bitwise_not()
+ {
+ // calculuate "not" without regard to $this->precision
+ // (will always result in a smaller number. ie. ~1 isn't 1111 1110 - it's 0)
+ $temp = $this->toBytes();
+ $pre_msb = decbin(ord($temp[0]));
+ $temp = ~$temp;
+ $msb = decbin(ord($temp[0]));
+ if (strlen($msb) == 8) {
+ $msb = substr($msb, strpos($msb, '0'));
+ }
+ $temp[0] = chr(bindec($msb));
+
+ // see if we need to add extra leading 1's
+ $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;
+ $new_bits = $this->precision - $current_bits;
+ if ($new_bits <= 0) {
+ return $this->_normalize(new Math_BigInteger($temp, 256));
+ }
+
+ // generate as many leading 1's as we need to.
+ $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);
+ $this->_base256_lshift($leading_ones, $current_bits);
+
+ $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT);
+
+ return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256));
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ * @internal The only version that yields any speed increases is the internal version.
+ */
+ function bitwise_rightShift($shift)
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ static $two;
+
+ if (!isset($two)) {
+ $two = gmp_init('2');
+ }
+
+ $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift));
+
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);
+
+ break;
+ default: // could just replace _lshift with this, but then all _lshift() calls would need to be rewritten
+ // and I don't want to do that...
+ $temp->value = $this->value;
+ $temp->_rshift($shift);
+ }
+
+ return $this->_normalize($temp);
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ * @internal The only version that yields any speed increases is the internal version.
+ */
+ function bitwise_leftShift($shift)
+ {
+ $temp = new Math_BigInteger();
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ static $two;
+
+ if (!isset($two)) {
+ $two = gmp_init('2');
+ }
+
+ $temp->value = gmp_mul($this->value, gmp_pow($two, $shift));
+
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);
+
+ break;
+ default: // could just replace _rshift with this, but then all _lshift() calls would need to be rewritten
+ // and I don't want to do that...
+ $temp->value = $this->value;
+ $temp->_lshift($shift);
+ }
+
+ return $this->_normalize($temp);
+ }
+
+ /**
+ * Logical Left Rotate
+ *
+ * Instead of the top x bits being dropped they're appended to the shifted bit string.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ */
+ function bitwise_leftRotate($shift)
+ {
+ $bits = $this->toBytes();
+
+ if ($this->precision > 0) {
+ $precision = $this->precision;
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+ $mask = $this->bitmask->subtract(new Math_BigInteger(1));
+ $mask = $mask->toBytes();
+ } else {
+ $mask = $this->bitmask->toBytes();
+ }
+ } else {
+ $temp = ord($bits[0]);
+ for ($i = 0; $temp >> $i; ++$i);
+ $precision = 8 * strlen($bits) - 8 + $i;
+ $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);
+ }
+
+ if ($shift < 0) {
+ $shift+= $precision;
+ }
+ $shift%= $precision;
+
+ if (!$shift) {
+ return $this->copy();
+ }
+
+ $left = $this->bitwise_leftShift($shift);
+ $left = $left->bitwise_and(new Math_BigInteger($mask, 256));
+ $right = $this->bitwise_rightShift($precision - $shift);
+ $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right);
+ return $this->_normalize($result);
+ }
+
+ /**
+ * Logical Right Rotate
+ *
+ * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
+ *
+ * @param Integer $shift
+ * @return Math_BigInteger
+ * @access public
+ */
+ function bitwise_rightRotate($shift)
+ {
+ return $this->bitwise_leftRotate(-$shift);
+ }
+
+ /**
+ * Set random number generator function
+ *
+ * $generator should be the name of a random generating function whose first parameter is the minimum
+ * value and whose second parameter is the maximum value. If this function needs to be seeded, it should
+ * be seeded prior to calling Math_BigInteger::random() or Math_BigInteger::randomPrime()
+ *
+ * If the random generating function is not explicitly set, it'll be assumed to be mt_rand().
+ *
+ * @see random()
+ * @see randomPrime()
+ * @param optional String $generator
+ * @access public
+ */
+ function setRandomGenerator($generator)
+ {
+ $this->generator = $generator;
+ }
+
+ /**
+ * Generate a random number
+ *
+ * @param optional Integer $min
+ * @param optional Integer $max
+ * @return Math_BigInteger
+ * @access public
+ */
+ function random($min = false, $max = false)
+ {
+ if ($min === false) {
+ $min = new Math_BigInteger(0);
+ }
+
+ if ($max === false) {
+ $max = new Math_BigInteger(0x7FFFFFFF);
+ }
+
+ $compare = $max->compare($min);
+
+ if (!$compare) {
+ return $this->_normalize($min);
+ } else if ($compare < 0) {
+ // if $min is bigger then $max, swap $min and $max
+ $temp = $max;
+ $max = $min;
+ $min = $temp;
+ }
+
+ $generator = $this->generator;
+
+ $max = $max->subtract($min);
+ $max = ltrim($max->toBytes(), chr(0));
+ $size = strlen($max) - 1;
+ $random = '';
+
+ $bytes = $size & 1;
+ for ($i = 0; $i < $bytes; ++$i) {
+ $random.= chr($generator(0, 255));
+ }
+
+ $blocks = $size >> 1;
+ for ($i = 0; $i < $blocks; ++$i) {
+ // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems
+ $random.= pack('n', $generator(0, 0xFFFF));
+ }
+
+ $temp = new Math_BigInteger($random, 256);
+ if ($temp->compare(new Math_BigInteger(substr($max, 1), 256)) > 0) {
+ $random = chr($generator(0, ord($max[0]) - 1)) . $random;
+ } else {
+ $random = chr($generator(0, ord($max[0]) )) . $random;
+ }
+
+ $random = new Math_BigInteger($random, 256);
+
+ return $this->_normalize($random->add($min));
+ }
+
+ /**
+ * Generate a random prime number.
+ *
+ * If there's not a prime within the given range, false will be returned. If more than $timeout seconds have elapsed,
+ * give up and return false.
+ *
+ * @param optional Integer $min
+ * @param optional Integer $max
+ * @param optional Integer $timeout
+ * @return Math_BigInteger
+ * @access public
+ * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}.
+ */
+ function randomPrime($min = false, $max = false, $timeout = false)
+ {
+ $compare = $max->compare($min);
+
+ if (!$compare) {
+ return $min;
+ } else if ($compare < 0) {
+ // if $min is bigger then $max, swap $min and $max
+ $temp = $max;
+ $max = $min;
+ $min = $temp;
+ }
+
+ // gmp_nextprime() requires PHP 5 >= 5.2.0 per <http://php.net/gmp-nextprime>.
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) {
+ // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function
+ // does its own checks on $max / $min when gmp_nextprime() is used. When gmp_nextprime() is not used, however,
+ // the same $max / $min checks are not performed.
+ if ($min === false) {
+ $min = new Math_BigInteger(0);
+ }
+
+ if ($max === false) {
+ $max = new Math_BigInteger(0x7FFFFFFF);
+ }
+
+ $x = $this->random($min, $max);
+
+ $x->value = gmp_nextprime($x->value);
+
+ if ($x->compare($max) <= 0) {
+ return $x;
+ }
+
+ $x->value = gmp_nextprime($min->value);
+
+ if ($x->compare($max) <= 0) {
+ return $x;
+ }
+
+ return false;
+ }
+
+ static $one, $two;
+ if (!isset($one)) {
+ $one = new Math_BigInteger(1);
+ $two = new Math_BigInteger(2);
+ }
+
+ $start = time();
+
+ $x = $this->random($min, $max);
+ if ($x->equals($two)) {
+ return $x;
+ }
+
+ $x->_make_odd();
+ if ($x->compare($max) > 0) {
+ // if $x > $max then $max is even and if $min == $max then no prime number exists between the specified range
+ if ($min->equals($max)) {
+ return false;
+ }
+ $x = $min->copy();
+ $x->_make_odd();
+ }
+
+ $initial_x = $x->copy();
+
+ while (true) {
+ if ($timeout !== false && time() - $start > $timeout) {
+ return false;
+ }
+
+ if ($x->isPrime()) {
+ return $x;
+ }
+
+ $x = $x->add($two);
+
+ if ($x->compare($max) > 0) {
+ $x = $min->copy();
+ if ($x->equals($two)) {
+ return $x;
+ }
+ $x->_make_odd();
+ }
+
+ if ($x->equals($initial_x)) {
+ return false;
+ }
+ }
+ }
+
+ /**
+ * Make the current number odd
+ *
+ * If the current number is odd it'll be unchanged. If it's even, one will be added to it.
+ *
+ * @see randomPrime()
+ * @access private
+ */
+ function _make_odd()
+ {
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ gmp_setbit($this->value, 0);
+ break;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+ $this->value = bcadd($this->value, '1');
+ }
+ break;
+ default:
+ $this->value[0] |= 1;
+ }
+ }
+
+ /**
+ * Checks a numer to see if it's prime
+ *
+ * Assuming the $t parameter is not set, this function has an error rate of 2**-80. The main motivation for the
+ * $t parameter is distributability. Math_BigInteger::randomPrime() can be distributed accross multiple pageloads
+ * on a website instead of just one.
+ *
+ * @param optional Integer $t
+ * @return Boolean
+ * @access public
+ * @internal Uses the
+ * {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}. See
+ * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}.
+ */
+ function isPrime($t = false)
+ {
+ $length = strlen($this->toBytes());
+
+ if (!$t) {
+ // see HAC 4.49 "Note (controlling the error probability)"
+ if ($length >= 163) { $t = 2; } // floor(1300 / 8)
+ else if ($length >= 106) { $t = 3; } // floor( 850 / 8)
+ else if ($length >= 81 ) { $t = 4; } // floor( 650 / 8)
+ else if ($length >= 68 ) { $t = 5; } // floor( 550 / 8)
+ else if ($length >= 56 ) { $t = 6; } // floor( 450 / 8)
+ else if ($length >= 50 ) { $t = 7; } // floor( 400 / 8)
+ else if ($length >= 43 ) { $t = 8; } // floor( 350 / 8)
+ else if ($length >= 37 ) { $t = 9; } // floor( 300 / 8)
+ else if ($length >= 31 ) { $t = 12; } // floor( 250 / 8)
+ else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)
+ else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)
+ else { $t = 27; }
+ }
+
+ // ie. gmp_testbit($this, 0)
+ // ie. isEven() or !isOdd()
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ return gmp_prob_prime($this->value, $t) != 0;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if ($this->value === '2') {
+ return true;
+ }
+ if ($this->value[strlen($this->value) - 1] % 2 == 0) {
+ return false;
+ }
+ break;
+ default:
+ if ($this->value == array(2)) {
+ return true;
+ }
+ if (~$this->value[0] & 1) {
+ return false;
+ }
+ }
+
+ static $primes, $zero, $one, $two;
+
+ if (!isset($primes)) {
+ $primes = array(
+ 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59,
+ 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137,
+ 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227,
+ 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,
+ 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
+ 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509,
+ 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617,
+ 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727,
+ 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829,
+ 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947,
+ 953, 967, 971, 977, 983, 991, 997
+ );
+
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+ for ($i = 0; $i < count($primes); ++$i) {
+ $primes[$i] = new Math_BigInteger($primes[$i]);
+ }
+ }
+
+ $zero = new Math_BigInteger();
+ $one = new Math_BigInteger(1);
+ $two = new Math_BigInteger(2);
+ }
+
+ if ($this->equals($one)) {
+ return false;
+ }
+
+ // see HAC 4.4.1 "Random search for probable primes"
+ if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+ foreach ($primes as $prime) {
+ list(, $r) = $this->divide($prime);
+ if ($r->equals($zero)) {
+ return $this->equals($prime);
+ }
+ }
+ } else {
+ $value = $this->value;
+ foreach ($primes as $prime) {
+ list(, $r) = $this->_divide_digit($value, $prime);
+ if (!$r) {
+ return count($value) == 1 && $value[0] == $prime;
+ }
+ }
+ }
+
+ $n = $this->copy();
+ $n_1 = $n->subtract($one);
+ $n_2 = $n->subtract($two);
+
+ $r = $n_1->copy();
+ $r_value = $r->value;
+ // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
+ if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+ $s = 0;
+ // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier
+ while ($r->value[strlen($r->value) - 1] % 2 == 0) {
+ $r->value = bcdiv($r->value, '2', 0);
+ ++$s;
+ }
+ } else {
+ for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {
+ $temp = ~$r_value[$i] & 0xFFFFFF;
+ for ($j = 1; ($temp >> $j) & 1; ++$j);
+ if ($j != 25) {
+ break;
+ }
+ }
+ $s = 26 * $i + $j - 1;
+ $r->_rshift($s);
+ }
+
+ for ($i = 0; $i < $t; ++$i) {
+ $a = $this->random($two, $n_2);
+ $y = $a->modPow($r, $n);
+
+ if (!$y->equals($one) && !$y->equals($n_1)) {
+ for ($j = 1; $j < $s && !$y->equals($n_1); ++$j) {
+ $y = $y->modPow($two, $n);
+ if ($y->equals($one)) {
+ return false;
+ }
+ }
+
+ if (!$y->equals($n_1)) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts BigInteger's by $shift bits.
+ *
+ * @param Integer $shift
+ * @access private
+ */
+ function _lshift($shift)
+ {
+ if ( $shift == 0 ) {
+ return;
+ }
+
+ $num_digits = (int) ($shift / 26);
+ $shift %= 26;
+ $shift = 1 << $shift;
+
+ $carry = 0;
+
+ for ($i = 0; $i < count($this->value); ++$i) {
+ $temp = $this->value[$i] * $shift + $carry;
+ $carry = (int) ($temp / 0x4000000);
+ $this->value[$i] = (int) ($temp - $carry * 0x4000000);
+ }
+
+ if ( $carry ) {
+ $this->value[] = $carry;
+ }
+
+ while ($num_digits--) {
+ array_unshift($this->value, 0);
+ }
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts BigInteger's by $shift bits.
+ *
+ * @param Integer $shift
+ * @access private
+ */
+ function _rshift($shift)
+ {
+ if ($shift == 0) {
+ return;
+ }
+
+ $num_digits = (int) ($shift / 26);
+ $shift %= 26;
+ $carry_shift = 26 - $shift;
+ $carry_mask = (1 << $shift) - 1;
+
+ if ( $num_digits ) {
+ $this->value = array_slice($this->value, $num_digits);
+ }
+
+ $carry = 0;
+
+ for ($i = count($this->value) - 1; $i >= 0; --$i) {
+ $temp = $this->value[$i] >> $shift | $carry;
+ $carry = ($this->value[$i] & $carry_mask) << $carry_shift;
+ $this->value[$i] = $temp;
+ }
+
+ $this->value = $this->_trim($this->value);
+ }
+
+ /**
+ * Normalize
+ *
+ * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
+ *
+ * @param Math_BigInteger
+ * @return Math_BigInteger
+ * @see _trim()
+ * @access private
+ */
+ function _normalize($result)
+ {
+ $result->precision = $this->precision;
+ $result->bitmask = $this->bitmask;
+
+ switch ( MATH_BIGINTEGER_MODE ) {
+ case MATH_BIGINTEGER_MODE_GMP:
+ if (!empty($result->bitmask->value)) {
+ $result->value = gmp_and($result->value, $result->bitmask->value);
+ }
+
+ return $result;
+ case MATH_BIGINTEGER_MODE_BCMATH:
+ if (!empty($result->bitmask->value)) {
+ $result->value = bcmod($result->value, $result->bitmask->value);
+ }
+
+ return $result;
+ }
+
+ $value = &$result->value;
+
+ if ( !count($value) ) {
+ return $result;
+ }
+
+ $value = $this->_trim($value);
+
+ if (!empty($result->bitmask->value)) {
+ $length = min(count($value), count($this->bitmask->value));
+ $value = array_slice($value, 0, $length);
+
+ for ($i = 0; $i < $length; ++$i) {
+ $value[$i] = $value[$i] & $this->bitmask->value[$i];
+ }
+ }
+
+ return $result;
+ }
+
+ /**
+ * Trim
+ *
+ * Removes leading zeros
+ *
+ * @return Math_BigInteger
+ * @access private
+ */
+ function _trim($value)
+ {
+ for ($i = count($value) - 1; $i >= 0; --$i) {
+ if ( $value[$i] ) {
+ break;
+ }
+ unset($value[$i]);
+ }
+
+ return $value;
+ }
+
+ /**
+ * Array Repeat
+ *
+ * @param $input Array
+ * @param $multiplier mixed
+ * @return Array
+ * @access private
+ */
+ function _array_repeat($input, $multiplier)
+ {
+ return ($multiplier) ? array_fill(0, $multiplier, $input) : array();
+ }
+
+ /**
+ * Logical Left Shift
+ *
+ * Shifts binary strings $shift bits, essentially multiplying by 2**$shift.
+ *
+ * @param $x String
+ * @param $shift Integer
+ * @return String
+ * @access private
+ */
+ function _base256_lshift(&$x, $shift)
+ {
+ if ($shift == 0) {
+ return;
+ }
+
+ $num_bytes = $shift >> 3; // eg. floor($shift/8)
+ $shift &= 7; // eg. $shift % 8
+
+ $carry = 0;
+ for ($i = strlen($x) - 1; $i >= 0; --$i) {
+ $temp = ord($x[$i]) << $shift | $carry;
+ $x[$i] = chr($temp);
+ $carry = $temp >> 8;
+ }
+ $carry = ($carry != 0) ? chr($carry) : '';
+ $x = $carry . $x . str_repeat(chr(0), $num_bytes);
+ }
+
+ /**
+ * Logical Right Shift
+ *
+ * Shifts binary strings $shift bits, essentially dividing by 2**$shift and returning the remainder.
+ *
+ * @param $x String
+ * @param $shift Integer
+ * @return String
+ * @access private
+ */
+ function _base256_rshift(&$x, $shift)
+ {
+ if ($shift == 0) {
+ $x = ltrim($x, chr(0));
+ return '';
+ }
+
+ $num_bytes = $shift >> 3; // eg. floor($shift/8)
+ $shift &= 7; // eg. $shift % 8
+
+ $remainder = '';
+ if ($num_bytes) {
+ $start = $num_bytes > strlen($x) ? -strlen($x) : -$num_bytes;
+ $remainder = substr($x, $start);
+ $x = substr($x, 0, -$num_bytes);
+ }
+
+ $carry = 0;
+ $carry_shift = 8 - $shift;
+ for ($i = 0; $i < strlen($x); ++$i) {
+ $temp = (ord($x[$i]) >> $shift) | $carry;
+ $carry = (ord($x[$i]) << $carry_shift) & 0xFF;
+ $x[$i] = chr($temp);
+ }
+ $x = ltrim($x, chr(0));
+
+ $remainder = chr($carry >> $carry_shift) . $remainder;
+
+ return ltrim($remainder, chr(0));
+ }
+
+ // one quirk about how the following functions are implemented is that PHP defines N to be an unsigned long
+ // at 32-bits, while java's longs are 64-bits.
+
+ /**
+ * Converts 32-bit integers to bytes.
+ *
+ * @param Integer $x
+ * @return String
+ * @access private
+ */
+ function _int2bytes($x)
+ {
+ return ltrim(pack('N', $x), chr(0));
+ }
+
+ /**
+ * Converts bytes to 32-bit integers
+ *
+ * @param String $x
+ * @return Integer
+ * @access private
+ */
+ function _bytes2int($x)
+ {
+ $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT));
+ return $temp['int'];
+ }
+} \ No newline at end of file
diff --git a/plugins/OStatus/extlib/hkit/hcard.profile.php b/plugins/OStatus/extlib/hkit/hcard.profile.php
deleted file mode 100644
index 6ec0dc890..000000000
--- a/plugins/OStatus/extlib/hkit/hcard.profile.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
- // hcard profile for hkit
-
- $this->root_class = 'vcard';
-
- $this->classes = array(
- 'fn', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
- 'n', array('honorific-prefix', 'given-name', 'additional-name', 'family-name', 'honorific-suffix'),
- 'adr', array('post-office-box', 'extended-address', 'street-address', 'postal-code', 'country-name', 'type', 'region', 'locality'),
- 'label', 'bday', 'agent', 'nickname', 'photo', 'class',
- 'email', array('type', 'value'),
- 'category', 'key', 'logo', 'mailer', 'note',
- 'org', array('organization-name', 'organization-unit'),
- 'tel', array('type', 'value'),
- 'geo', array('latitude', 'longitude'),
- 'tz', 'uid', 'url', 'rev', 'role', 'sort-string', 'sound', 'title'
- );
-
- // classes that must only appear once per card
- $this->singles = array(
- 'fn'
- );
-
- // classes that are required (not strictly enforced - give at least one!)
- $this->required = array(
- 'fn'
- );
-
- $this->att_map = array(
- 'fn' => array('IMG|alt'),
- 'url' => array('A|href', 'IMG|src', 'AREA|href'),
- 'photo' => array('IMG|src'),
- 'bday' => array('ABBR|title'),
- 'logo' => array('IMG|src'),
- 'email' => array('A|href'),
- 'geo' => array('ABBR|title')
- );
-
-
- $this->callbacks = array(
- 'url' => array($this, 'resolvePath'),
- 'photo' => array($this, 'resolvePath'),
- 'logo' => array($this, 'resolvePath'),
- 'email' => array($this, 'resolveEmail')
- );
-
-
-
- function hKit_hcard_post($a)
- {
-
- foreach ($a as &$vcard){
-
- hKit_implied_n_optimization($vcard);
- hKit_implied_n_from_fn($vcard);
-
- }
-
- return $a;
-
- }
-
-
- function hKit_implied_n_optimization(&$vcard)
- {
- if (array_key_exists('fn', $vcard) && !is_array($vcard['fn']) &&
- !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){
-
- if (sizeof(explode(' ', $vcard['fn'])) == 2){
- $patterns = array();
- $patterns[] = array('/^(\S+),\s*(\S{1})$/', 2, 1); // Lastname, Initial
- $patterns[] = array('/^(\S+)\s*(\S{1})\.*$/', 2, 1); // Lastname Initial(.)
- $patterns[] = array('/^(\S+),\s*(\S+)$/', 2, 1); // Lastname, Firstname
- $patterns[] = array('/^(\S+)\s*(\S+)$/', 1, 2); // Firstname Lastname
-
- foreach ($patterns as $pattern){
- if (preg_match($pattern[0], $vcard['fn'], $matches) === 1){
- $n = array();
- $n['given-name'] = $matches[$pattern[1]];
- $n['family-name'] = $matches[$pattern[2]];
- $vcard['n'] = $n;
-
-
- break;
- }
- }
- }
- }
- }
-
-
- function hKit_implied_n_from_fn(&$vcard)
- {
- if (array_key_exists('fn', $vcard) && is_array($vcard['fn'])
- && !array_key_exists('n', $vcard) && (!array_key_exists('org', $vcard) || $vcard['fn'] != $vcard['org'])){
-
- $vcard['n'] = $vcard['fn'];
- }
-
- if (array_key_exists('fn', $vcard) && is_array($vcard['fn'])){
- $vcard['fn'] = $vcard['fn']['text'];
- }
- }
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/extlib/hkit/hkit.class.php b/plugins/OStatus/extlib/hkit/hkit.class.php
deleted file mode 100644
index c3a54cff6..000000000
--- a/plugins/OStatus/extlib/hkit/hkit.class.php
+++ /dev/null
@@ -1,475 +0,0 @@
-<?php
-
- /*
-
- hKit Library for PHP5 - a generic library for parsing Microformats
- Copyright (C) 2006 Drew McLellan
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
- Author
- Drew McLellan - http://allinthehead.com/
-
- Contributors:
- Scott Reynen - http://www.randomchaos.com/
-
- Version 0.5, 22-Jul-2006
- fixed by-ref issue cropping up in PHP 5.0.5
- fixed a bug with a@title
- added support for new fn=n optimisation
- added support for new a.include include-pattern
- Version 0.4, 23-Jun-2006
- prevented nested includes from causing infinite loops
- returns false if URL can't be fetched
- added pre-flight check for base support level
- added deduping of once-only classnames
- prevented accumulation of multiple 'value' values
- tuned whitespace handling and treatment of DEL elements
- Version 0.3, 21-Jun-2006
- added post-processor callback method into profiles
- fixed minor problems raised by hcard testsuite
- added support for include-pattern
- added support for td@headers pattern
- added implied-n optimization into default hcard profile
- Version 0.2, 20-Jun-2006
- added class callback mechanism
- added resolvePath & resolveEmail
- added basic BASE support
- Version 0.1.1, 19-Jun-2006 (different timezone, no time machine)
- added external Tidy option
- Version 0.1, 20-Jun-2006
- initial release
-
-
-
-
- */
-
- class hKit
- {
-
- public $tidy_mode = 'proxy'; // 'proxy', 'exec', 'php' or 'none'
- public $tidy_proxy = 'http://cgi.w3.org/cgi-bin/tidy?forceXML=on&docAddr='; // required only for tidy_mode=proxy
- public $tmp_dir = '/path/to/writable/dir/'; // required only for tidy_mode=exec
-
- private $root_class = '';
- private $classes = '';
- private $singles = '';
- private $required = '';
- private $att_map = '';
- private $callbacks = '';
- private $processor = '';
-
- private $url = '';
- private $base = '';
- private $doc = '';
-
-
- public function hKit()
- {
- // pre-flight checks
- $pass = true;
- $required = array('dom_import_simplexml', 'file_get_contents', 'simplexml_load_string');
- $missing = array();
-
- foreach ($required as $f){
- if (!function_exists($f)){
- $pass = false;
- $missing[] = $f . '()';
- }
- }
-
- if (!$pass)
- die('hKit error: these required functions are not available: <strong>' . implode(', ', $missing) . '</strong>');
-
- }
-
-
- public function getByURL($profile='', $url='')
- {
-
- if ($profile=='' || $url == '') return false;
-
- $this->loadProfile($profile);
-
- $source = $this->loadURL($url);
-
- if ($source){
- $tidy_xhtml = $this->tidyThis($source);
-
- $fragment = false;
-
- if (strrchr($url, '#'))
- $fragment = array_pop(explode('#', $url));
-
- $doc = $this->loadDoc($tidy_xhtml, $fragment);
- $s = $this->processNodes($doc, $this->classes);
- $s = $this->postProcess($profile, $s);
-
- return $s;
- }else{
- return false;
- }
- }
-
- public function getByString($profile='', $input_xml='')
- {
- if ($profile=='' || $input_xml == '') return false;
-
- $this->loadProfile($profile);
-
- $doc = $this->loadDoc($input_xml);
- $s = $this->processNodes($doc, $this->classes);
- $s = $this->postProcess($profile, $s);
-
- return $s;
-
- }
-
- private function processNodes($items, $classes, $allow_includes=true){
-
- $out = array();
-
- foreach($items as $item){
- $data = array();
-
- for ($i=0; $i<sizeof($classes); $i++){
-
- if (!is_array($classes[$i])){
-
- $xpath = ".//*[contains(concat(' ',normalize-space(@class),' '),' " . $classes[$i] . " ')]";
- $results = $item->xpath($xpath);
-
- if ($results){
- foreach ($results as $result){
- if (isset($classes[$i+1]) && is_array($classes[$i+1])){
- $nodes = $this->processNodes($results, $classes[$i+1]);
- if (sizeof($nodes) > 0){
- $nodes = array_merge(array('text'=>$this->getNodeValue($result, $classes[$i])), $nodes);
- $data[$classes[$i]] = $nodes;
- }else{
- $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]);
- }
-
- }else{
- if (isset($data[$classes[$i]])){
- if (is_array($data[$classes[$i]])){
- // is already an array - append
- $data[$classes[$i]][] = $this->getNodeValue($result, $classes[$i]);
-
- }else{
- // make it an array
- if ($classes[$i] == 'value'){ // unless it's the 'value' of a type/value pattern
- $data[$classes[$i]] .= $this->getNodeValue($result, $classes[$i]);
- }else{
- $old_val = $data[$classes[$i]];
- $data[$classes[$i]] = array($old_val, $this->getNodeValue($result, $classes[$i]));
- $old_val = false;
- }
- }
- }else{
- // set as normal value
- $data[$classes[$i]] = $this->getNodeValue($result, $classes[$i]);
-
- }
- }
-
- // td@headers pattern
- if (strtoupper(dom_import_simplexml($result)->tagName)== "TD" && $result['headers']){
- $include_ids = explode(' ', $result['headers']);
- $doc = $this->doc;
- foreach ($include_ids as $id){
- $xpath = "//*[@id='$id']/..";
- $includes = $doc->xpath($xpath);
- foreach ($includes as $include){
- $tmp = $this->processNodes($include, $this->classes);
- if (is_array($tmp)) $data = array_merge($data, $tmp);
- }
- }
- }
- }
- }
- }
- $result = false;
- }
-
- // include-pattern
- if ($allow_includes){
- $xpath = ".//*[contains(concat(' ',normalize-space(@class),' '),' include ')]";
- $results = $item->xpath($xpath);
-
- if ($results){
- foreach ($results as $result){
- $tagName = strtoupper(dom_import_simplexml($result)->tagName);
- if ((($tagName == "OBJECT" && $result['data']) || ($tagName == "A" && $result['href']))
- && preg_match('/\binclude\b/', $result['class'])){
- $att = ($tagName == "OBJECT" ? 'data' : 'href');
- $id = str_replace('#', '', $result[$att]);
- $doc = $this->doc;
- $xpath = "//*[@id='$id']";
- $includes = $doc->xpath($xpath);
- foreach ($includes as $include){
- $include = simplexml_load_string('<root1><root2>'.$include->asXML().'</root2></root1>'); // don't ask.
- $tmp = $this->processNodes($include, $this->classes, false);
- if (is_array($tmp)) $data = array_merge($data, $tmp);
- }
- }
- }
- }
- }
- $out[] = $data;
- }
-
- if (sizeof($out) > 1){
- return $out;
- }else if (isset($data)){
- return $data;
- }else{
- return array();
- }
- }
-
-
- private function getNodeValue($node, $className)
- {
-
- $tag_name = strtoupper(dom_import_simplexml($node)->tagName);
- $s = false;
-
- // ignore DEL tags
- if ($tag_name == 'DEL') return $s;
-
- // look up att map values
- if (array_key_exists($className, $this->att_map)){
-
- foreach ($this->att_map[$className] as $map){
- if (preg_match("/$tag_name\|/", $map)){
- $s = ''.$node[array_pop($foo = explode('|', $map))];
- }
- }
- }
-
- // if nothing and OBJ, try data.
- if (!$s && $tag_name=='OBJECT' && $node['data']) $s = ''.$node['data'];
-
- // if nothing and IMG, try alt.
- if (!$s && $tag_name=='IMG' && $node['alt']) $s = ''.$node['alt'];
-
- // if nothing and AREA, try alt.
- if (!$s && $tag_name=='AREA' && $node['alt']) $s = ''.$node['alt'];
-
- //if nothing and not A, try title.
- if (!$s && $tag_name!='A' && $node['title']) $s = ''.$node['title'];
-
-
- // if nothing found, go with node text
- $s = ($s ? $s : implode(array_filter($node->xpath('child::node()'), array(&$this, "filterBlankValues")), ' '));
-
- // callbacks
- if (array_key_exists($className, $this->callbacks)){
- $s = preg_replace_callback('/.*/', $this->callbacks[$className], $s, 1);
- }
-
- // trim and remove line breaks
- if ($tag_name != 'PRE'){
- $s = trim(preg_replace('/[\r\n\t]+/', '', $s));
- $s = trim(preg_replace('/(\s{2})+/', ' ', $s));
- }
-
- return $s;
- }
-
- private function filterBlankValues($s){
- return preg_match("/\w+/", $s);
- }
-
-
- private function tidyThis($source)
- {
- switch ( $this->tidy_mode )
- {
- case 'exec':
- $tmp_file = $this->tmp_dir.md5($source).'.txt';
- file_put_contents($tmp_file, $source);
- exec("tidy -utf8 -indent -asxhtml -numeric -bare -quiet $tmp_file", $tidy);
- unlink($tmp_file);
- return implode("\n", $tidy);
- break;
-
- case 'php':
- $tidy = tidy_parse_string($source);
- return tidy_clean_repair($tidy);
- break;
-
- default:
- return $source;
- break;
- }
-
- }
-
-
- private function loadProfile($profile)
- {
- require_once("$profile.profile.php");
- }
-
-
- private function loadDoc($input_xml, $fragment=false)
- {
- $xml = simplexml_load_string($input_xml);
-
- $this->doc = $xml;
-
- if ($fragment){
- $doc = $xml->xpath("//*[@id='$fragment']");
- $xml = simplexml_load_string($doc[0]->asXML());
- $doc = null;
- }
-
- // base tag
- if ($xml->head->base['href']) $this->base = $xml->head->base['href'];
-
- // xml:base attribute - PITA with SimpleXML
- preg_match('/xml:base="(.*)"/', $xml->asXML(), $matches);
- if (is_array($matches) && sizeof($matches)>1) $this->base = $matches[1];
-
- return $xml->xpath("//*[contains(concat(' ',normalize-space(@class),' '),' $this->root_class ')]");
-
- }
-
-
- private function loadURL($url)
- {
- $this->url = $url;
-
- if ($this->tidy_mode == 'proxy' && $this->tidy_proxy != ''){
- $url = $this->tidy_proxy . $url;
- }
-
- return @file_get_contents($url);
-
- }
-
-
- private function postProcess($profile, $s)
- {
- $required = $this->required;
-
- if (is_array($s) && array_key_exists($required[0], $s)){
- $s = array($s);
- }
-
- $s = $this->dedupeSingles($s);
-
- if (function_exists('hKit_'.$profile.'_post')){
- $s = call_user_func('hKit_'.$profile.'_post', $s);
- }
-
- $s = $this->removeTextVals($s);
-
- return $s;
- }
-
-
- private function resolvePath($filepath)
- { // ugly code ahoy: needs a serious tidy up
-
- $filepath = $filepath[0];
-
- $base = $this->base;
- $url = $this->url;
-
- if ($base != '' && strpos($base, '://') !== false)
- $url = $base;
-
- $r = parse_url($url);
- $domain = $r['scheme'] . '://' . $r['host'];
-
- if (!isset($r['path'])) $r['path'] = '/';
- $path = explode('/', $r['path']);
- $file = explode('/', $filepath);
- $new = array('');
-
- if (strpos($filepath, '://') !== false || strpos($filepath, 'data:') !== false){
- return $filepath;
- }
-
- if ($file[0] == ''){
- // absolute path
- return ''.$domain . implode('/', $file);
- }else{
- // relative path
- if ($path[sizeof($path)-1] == '') array_pop($path);
- if (strpos($path[sizeof($path)-1], '.') !== false) array_pop($path);
-
- foreach ($file as $segment){
- if ($segment == '..'){
- array_pop($path);
- }else{
- $new[] = $segment;
- }
- }
- return ''.$domain . implode('/', $path) . implode('/', $new);
- }
- }
-
- private function resolveEmail($v)
- {
- $parts = parse_url($v[0]);
- return ($parts['path']);
- }
-
-
- private function dedupeSingles($s)
- {
- $singles = $this->singles;
-
- foreach ($s as &$item){
- foreach ($singles as $classname){
- if (array_key_exists($classname, $item) && is_array($item[$classname])){
- if (isset($item[$classname][0])) $item[$classname] = $item[$classname][0];
- }
- }
- }
-
- return $s;
- }
-
- private function removeTextVals($s)
- {
- foreach ($s as $key => &$val){
- if ($key){
- $k = $key;
- }else{
- $k = '';
- }
-
- if (is_array($val)){
- $val = $this->removeTextVals($val);
- }else{
- if ($k == 'text'){
- $val = '';
- }
- }
- }
-
- return array_filter($s);
- }
-
- }
-
-
-?> \ No newline at end of file
diff --git a/plugins/OStatus/lib/discovery.php b/plugins/OStatus/lib/discovery.php
index f8449b309..7187c1f3e 100644
--- a/plugins/OStatus/lib/discovery.php
+++ b/plugins/OStatus/lib/discovery.php
@@ -40,7 +40,7 @@ class Discovery
const PROFILEPAGE = 'http://webfinger.net/rel/profile-page';
const UPDATESFROM = 'http://schemas.google.com/g/2010#updates-from';
const HCARD = 'http://microformats.org/profile/hcard';
-
+
public $methods = array();
public function __construct()
@@ -50,12 +50,11 @@ class Discovery
$this->registerMethod('Discovery_LRDD_Link_HTML');
}
-
public function registerMethod($class)
{
$this->methods[] = $class;
}
-
+
/**
* Given a "user id" make sure it's normalized to either a webfinger
* acct: uri or a profile HTTP URL.
@@ -78,7 +77,7 @@ class Discovery
public static function isWebfinger($user_id)
{
$uri = Discovery::normalize($user_id);
-
+
return (substr($uri, 0, 5) == 'acct:');
}
@@ -99,7 +98,7 @@ class Discovery
} else {
$xrd_uri = $link['href'];
}
-
+
$xrd = $this->fetchXrd($xrd_uri);
if ($xrd) {
return $xrd;
@@ -114,14 +113,13 @@ class Discovery
if (!is_array($links)) {
return false;
}
-
+
foreach ($links as $link) {
if ($link['rel'] == $service) {
return $link;
}
}
}
-
public static function applyTemplate($template, $id)
{
@@ -130,7 +128,6 @@ class Discovery
return $template;
}
-
public static function fetchXrd($url)
{
try {
@@ -157,12 +154,13 @@ class Discovery_LRDD_Host_Meta implements Discovery_LRDD
{
public function discover($uri)
{
- if (!Discovery::isWebfinger($uri)) {
- return false;
+ if (Discovery::isWebfinger($uri)) {
+ // We have a webfinger acct: - start with host-meta
+ list($name, $domain) = explode('@', $uri);
+ } else {
+ $domain = parse_url($uri, PHP_URL_HOST);
}
-
- // We have a webfinger acct: - start with host-meta
- list($name, $domain) = explode('@', $uri);
+
$url = 'http://'. $domain .'/.well-known/host-meta';
$xrd = Discovery::fetchXrd($url);
@@ -171,7 +169,7 @@ class Discovery_LRDD_Host_Meta implements Discovery_LRDD
if ($xrd->host != $domain) {
return false;
}
-
+
return $xrd->links;
}
}
@@ -187,7 +185,7 @@ class Discovery_LRDD_Link_Header implements Discovery_LRDD
} catch (HTTP_Request2_Exception $e) {
return false;
}
-
+
if ($response->getStatus() != 200) {
return false;
}
@@ -196,51 +194,17 @@ class Discovery_LRDD_Link_Header implements Discovery_LRDD
if (!$link_header) {
// return false;
}
-
- return Discovery_LRDD_Link_Header::parseHeader($link_header);
+
+ return array(Discovery_LRDD_Link_Header::parseHeader($link_header));
}
protected static function parseHeader($header)
{
- preg_match('/^<[^>]+>/', $header, $uri_reference);
- //if (empty($uri_reference)) return;
-
- $links = array();
-
- $link_uri = trim($uri_reference[0], '<>');
- $link_rel = array();
- $link_type = null;
-
- // remove uri-reference from header
- $header = substr($header, strlen($uri_reference[0]));
-
- // parse link-params
- $params = explode(';', $header);
-
- foreach ($params as $param) {
- if (empty($param)) continue;
- list($param_name, $param_value) = explode('=', $param, 2);
- $param_name = trim($param_name);
- $param_value = preg_replace('(^"|"$)', '', trim($param_value));
-
- // for now we only care about 'rel' and 'type' link params
- // TODO do something with the other links-params
- switch ($param_name) {
- case 'rel':
- $link_rel = trim($param_value);
- break;
-
- case 'type':
- $link_type = trim($param_value);
- }
- }
-
- $links[] = array(
- 'href' => $link_uri,
- 'rel' => $link_rel,
- 'type' => $link_type);
+ $lh = new LinkHeader($header);
- return $links;
+ return array('href' => $lh->href,
+ 'rel' => $lh->rel,
+ 'type' => $lh->type);
}
}
@@ -262,49 +226,48 @@ class Discovery_LRDD_Link_HTML implements Discovery_LRDD
return Discovery_LRDD_Link_HTML::parse($response->getBody());
}
-
public function parse($html)
{
$links = array();
-
+
preg_match('/<head(\s[^>]*)?>(.*?)<\/head>/is', $html, $head_matches);
$head_html = $head_matches[2];
-
+
preg_match_all('/<link\s[^>]*>/i', $head_html, $link_matches);
-
+
foreach ($link_matches[0] as $link_html) {
$link_url = null;
$link_rel = null;
$link_type = null;
-
+
preg_match('/\srel=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $rel_matches);
if ( isset($rel_matches[3]) ) {
$link_rel = $rel_matches[3];
} else if ( isset($rel_matches[1]) ) {
$link_rel = $rel_matches[1];
}
-
+
preg_match('/\shref=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $href_matches);
if ( isset($href_matches[3]) ) {
$link_uri = $href_matches[3];
} else if ( isset($href_matches[1]) ) {
$link_uri = $href_matches[1];
}
-
+
preg_match('/\stype=(("|\')([^\\2]*?)\\2|[^"\'\s]+)/i', $link_html, $type_matches);
if ( isset($type_matches[3]) ) {
$link_type = $type_matches[3];
} else if ( isset($type_matches[1]) ) {
$link_type = $type_matches[1];
}
-
+
$links[] = array(
'href' => $link_url,
'rel' => $link_rel,
'type' => $link_type,
);
}
-
+
return $links;
}
}
diff --git a/plugins/OStatus/lib/discoveryhints.php b/plugins/OStatus/lib/discoveryhints.php
new file mode 100644
index 000000000..80cfbbf15
--- /dev/null
+++ b/plugins/OStatus/lib/discoveryhints.php
@@ -0,0 +1,252 @@
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * Some utilities for generating hint data
+ *
+ * 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/>.
+ */
+
+class DiscoveryHints {
+
+ static function fromXRD($xrd)
+ {
+ $hints = array();
+
+ foreach ($xrd->links as $link) {
+ switch ($link['rel']) {
+ case Discovery::PROFILEPAGE:
+ $hints['profileurl'] = $link['href'];
+ break;
+ case Salmon::NS_REPLIES:
+ $hints['salmon'] = $link['href'];
+ break;
+ case Discovery::UPDATESFROM:
+ $hints['feedurl'] = $link['href'];
+ break;
+ case Discovery::HCARD:
+ $hints['hcardurl'] = $link['href'];
+ break;
+ default:
+ break;
+ }
+ }
+
+ return $hints;
+ }
+
+ static function fromHcardUrl($url)
+ {
+ $client = new HTTPClient();
+ $client->setHeader('Accept', 'text/html,application/xhtml+xml');
+ $response = $client->get($url);
+
+ if (!$response->isOk()) {
+ return null;
+ }
+
+ return self::hcardHints($response->getBody(),
+ $response->getUrl());
+ }
+
+ static function hcardHints($body, $url)
+ {
+ $hcard = self::_hcard($body, $url);
+
+ if (empty($hcard)) {
+ return array();
+ }
+
+ $hints = array();
+
+ // XXX: don't copy stuff into an array and then copy it again
+
+ if (array_key_exists('nickname', $hcard)) {
+ $hints['nickname'] = $hcard['nickname'];
+ }
+
+ if (array_key_exists('fn', $hcard)) {
+ $hints['fullname'] = $hcard['fn'];
+ } else if (array_key_exists('n', $hcard)) {
+ $hints['fullname'] = implode(' ', $hcard['n']);
+ }
+
+ if (array_key_exists('photo', $hcard)) {
+ $hints['avatar'] = $hcard['photo'][0];
+ }
+
+ if (array_key_exists('note', $hcard)) {
+ $hints['bio'] = $hcard['note'];
+ }
+
+ if (array_key_exists('adr', $hcard)) {
+ if (is_string($hcard['adr'])) {
+ $hints['location'] = $hcard['adr'];
+ } else if (is_array($hcard['adr'])) {
+ $hints['location'] = implode(' ', $hcard['adr']);
+ }
+ }
+
+ if (array_key_exists('url', $hcard)) {
+ if (is_string($hcard['url'])) {
+ $hints['homepage'] = $hcard['url'];
+ } else if (is_array($hcard['url']) && !empty($hcard['url'])) {
+ // HACK get the last one; that's how our hcards look
+ $hints['homepage'] = $hcard['url'][count($hcard['url'])-1];
+ }
+ }
+
+ return $hints;
+ }
+
+ static function _hcard($body, $url)
+ {
+ // DOMDocument::loadHTML may throw warnings on unrecognized elements.
+
+ $old = error_reporting(error_reporting() & ~E_WARNING);
+
+ $doc = new DOMDocument();
+ $doc->loadHTML($body);
+
+ error_reporting($old);
+
+ $xp = new DOMXPath($doc);
+
+ $hcardNodes = self::_getChildrenByClass($doc->documentElement, 'vcard', $xp);
+
+ $hcards = array();
+
+ for ($i = 0; $i < $hcardNodes->length; $i++) {
+
+ $hcardNode = $hcardNodes->item($i);
+
+ $hcard = self::_hcardFromNode($hcardNode, $xp, $url);
+
+ $hcards[] = $hcard;
+ }
+
+ $repr = null;
+
+ foreach ($hcards as $hcard) {
+ if (in_array($url, $hcard['url'])) {
+ $repr = $hcard;
+ break;
+ }
+ }
+
+ if (!is_null($repr)) {
+ return $repr;
+ } else if (count($hcards) > 0) {
+ return $hcards[0];
+ } else {
+ return null;
+ }
+ }
+
+ function _getChildrenByClass($el, $cls, $xp)
+ {
+ // borrowed from hkit. Thanks dudes!
+
+ $qry = ".//*[contains(concat(' ',normalize-space(@class),' '),' $cls ')]";
+
+ $nodes = $xp->query($qry, $el);
+
+ return $nodes;
+ }
+
+ function _hcardFromNode($hcardNode, $xp, $base)
+ {
+ $hcard = array();
+
+ $hcard['url'] = array();
+
+ $urlNodes = self::_getChildrenByClass($hcardNode, 'url', $xp);
+
+ for ($j = 0; $j < $urlNodes->length; $j++) {
+
+ $urlNode = $urlNodes->item($j);
+
+ if ($urlNode->hasAttribute('href')) {
+ $url = $urlNode->getAttribute('href');
+ } else {
+ $url = $urlNode->textContent;
+ }
+
+ $hcard['url'][] = self::_rel2abs($url, $base);
+ }
+
+ $hcard['photo'] = array();
+
+ $photoNodes = self::_getChildrenByClass($hcardNode, 'photo', $xp);
+
+ for ($j = 0; $j < $photoNodes->length; $j++) {
+ $photoNode = $photoNodes->item($j);
+ if ($photoNode->hasAttribute('src')) {
+ $url = $photoNode->getAttribute('src');
+ } else if ($photoNode->hasAttribute('href')) {
+ $url = $photoNode->getAttribute('href');
+ } else {
+ $url = $photoNode->textContent;
+ }
+ $hcard['photo'][] = self::_rel2abs($url, $base);
+ }
+
+ $singles = array('nickname', 'note', 'fn', 'n', 'adr');
+
+ foreach ($singles as $single) {
+
+ $nodes = self::_getChildrenByClass($hcardNode, $single, $xp);
+
+ if ($nodes->length > 0) {
+ $node = $nodes->item(0);
+ $hcard[$single] = $node->textContent;
+ }
+ }
+
+ return $hcard;
+ }
+
+ // XXX: this is a first pass; we probably need
+ // to handle things like ../ and ./ and so on
+
+ static function _rel2abs($rel, $wrt)
+ {
+ $parts = parse_url($rel);
+
+ if ($parts === false) {
+ return false;
+ }
+
+ // If it's got a scheme, use it
+
+ if (!empty($parts['scheme'])) {
+ return $rel;
+ }
+
+ $w = parse_url($wrt);
+
+ $base = $w['scheme'].'://'.$w['host'];
+
+ if ($rel[0] == '/') {
+ return $base.$rel;
+ }
+
+ $wp = explode('/', $w['path']);
+
+ array_pop($wp);
+
+ return $base.implode('/', $wp).'/'.$rel;
+ }
+}
diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
index 7afb71bdc..4809f9d35 100644
--- a/plugins/OStatus/lib/feeddiscovery.php
+++ b/plugins/OStatus/lib/feeddiscovery.php
@@ -73,6 +73,7 @@ class FeedDiscovery
public $uri;
public $type;
public $feed;
+ public $root;
/** Post-initialize query helper... */
public function getLink($rel, $type=null)
@@ -83,7 +84,7 @@ class FeedDiscovery
public function getAtomLink($rel, $type=null)
{
- return ActivityUtils::getLink($this->feed->documentElement, $rel, $type);
+ return ActivityUtils::getLink($this->root, $rel, $type);
}
/**
@@ -117,7 +118,7 @@ class FeedDiscovery
return $this->discoverFromURL($target, false);
}
}
-
+
return $this->initFromResponse($response);
}
@@ -129,7 +130,7 @@ class FeedDiscovery
function initFromResponse($response)
{
if (!$response->isOk()) {
- throw new FeedSubBadResponseException($response->getCode());
+ throw new FeedSubBadResponseException($response->getStatus());
}
$sourceurl = $response->getUrl();
@@ -154,9 +155,27 @@ class FeedDiscovery
$this->uri = $sourceurl;
$this->type = $type;
$this->feed = $feed;
+
+ $el = $this->feed->documentElement;
+
+ // Looking for the "root" element: RSS channel or Atom feed
+
+ if ($el->tagName == 'rss') {
+ $channels = $el->getElementsByTagName('channel');
+ if ($channels->length > 0) {
+ $this->root = $channels->item(0);
+ } else {
+ throw new FeedSubBadXmlException($sourceurl);
+ }
+ } else if ($el->tagName == 'feed') {
+ $this->root = $el;
+ } else {
+ throw new FeedSubBadXmlException($sourceurl);
+ }
+
return $this->uri;
} else {
- throw new FeedSubBadXmlException($url);
+ throw new FeedSubBadXmlException($sourceurl);
}
}
@@ -202,7 +221,7 @@ class FeedDiscovery
'application/atom+xml' => false,
'application/rss+xml' => false,
);
-
+
$nodes = $dom->getElementsByTagName('link');
for ($i = 0; $i < $nodes->length; $i++) {
$node = $nodes->item($i);
@@ -211,11 +230,11 @@ class FeedDiscovery
$type = $node->attributes->getNamedItem('type');
$href = $node->attributes->getNamedItem('href');
if ($rel && $type && $href) {
- $rel = trim($rel->value);
+ $rel = array_filter(explode(" ", $rel->value));
$type = trim($type->value);
$href = trim($href->value);
- if (trim($rel) == 'alternate' && array_key_exists($type, $feeds) && empty($feeds[$type])) {
+ if (in_array('alternate', $rel) && array_key_exists($type, $feeds) && empty($feeds[$type])) {
// Save the first feed found of each type...
$feeds[$type] = $this->resolveURI($href, $base);
}
diff --git a/plugins/OStatus/lib/linkheader.php b/plugins/OStatus/lib/linkheader.php
new file mode 100644
index 000000000..cd78d31ce
--- /dev/null
+++ b/plugins/OStatus/lib/linkheader.php
@@ -0,0 +1,63 @@
+<?php
+
+class LinkHeader
+{
+ var $href;
+ var $rel;
+ var $type;
+
+ function __construct($str)
+ {
+ preg_match('/^<[^>]+>/', $str, $uri_reference);
+ //if (empty($uri_reference)) return;
+
+ $this->href = trim($uri_reference[0], '<>');
+ $this->rel = array();
+ $this->type = null;
+
+ // remove uri-reference from header
+ $str = substr($str, strlen($uri_reference[0]));
+
+ // parse link-params
+ $params = explode(';', $str);
+
+ foreach ($params as $param) {
+ if (empty($param)) continue;
+ list($param_name, $param_value) = explode('=', $param, 2);
+ $param_name = trim($param_name);
+ $param_value = preg_replace('(^"|"$)', '', trim($param_value));
+
+ // for now we only care about 'rel' and 'type' link params
+ // TODO do something with the other links-params
+ switch ($param_name) {
+ case 'rel':
+ $this->rel = trim($param_value);
+ break;
+
+ case 'type':
+ $this->type = trim($param_value);
+ }
+ }
+ }
+
+ static function getLink($response, $rel=null, $type=null)
+ {
+ $headers = $response->getHeader('Link');
+ if ($headers) {
+ // Can get an array or string, so try to simplify the path
+ if (!is_array($headers)) {
+ $headers = array($headers);
+ }
+
+ foreach ($headers as $header) {
+ $lh = new LinkHeader($header);
+
+ if ((is_null($rel) || $lh->rel == $rel) &&
+ (is_null($type) || $lh->type == $type)) {
+ return $lh->href;
+ }
+ }
+ }
+ return null;
+ }
+}
diff --git a/plugins/OStatus/lib/magicenvelope.php b/plugins/OStatus/lib/magicenvelope.php
index fb8c57c71..9266cab5c 100644
--- a/plugins/OStatus/lib/magicenvelope.php
+++ b/plugins/OStatus/lib/magicenvelope.php
@@ -59,7 +59,11 @@ class MagicEnvelope
}
if ($xrd->links) {
if ($link = Discovery::getService($xrd->links, Magicsig::PUBLICKEYREL)) {
- list($type, $keypair) = explode(';', $link['href']);
+ list($type, $keypair) = explode(',', $link['href']);
+ if (empty($keypair)) {
+ // Backwards compatibility check for separator bug in 0.9.0
+ list($type, $keypair) = explode(';', $link['href']);
+ }
return $keypair;
}
}
@@ -70,7 +74,7 @@ class MagicEnvelope
public function signMessage($text, $mimetype, $keypair)
{
$signature_alg = Magicsig::fromString($keypair);
- $armored_text = base64_encode($text);
+ $armored_text = base64_url_encode($text);
return array(
'data' => $armored_text,
@@ -108,7 +112,7 @@ class MagicEnvelope
public function unfold($env)
{
$dom = new DOMDocument();
- $dom->loadXML(base64_decode($env['data']));
+ $dom->loadXML(base64_url_decode($env['data']));
if ($dom->documentElement->tagName != 'entry') {
return false;
@@ -165,7 +169,7 @@ class MagicEnvelope
return false;
}
- $text = base64_decode($env['data']);
+ $text = base64_url_decode($env['data']);
$signer_uri = $this->getAuthor($text);
try {
@@ -193,11 +197,12 @@ class MagicEnvelope
public function fromDom($dom)
{
- if ($dom->documentElement->tagName == 'entry') {
+ $env_element = $dom->getElementsByTagNameNS(MagicEnvelope::NS, 'env')->item(0);
+ if (!$env_element) {
$env_element = $dom->getElementsByTagNameNS(MagicEnvelope::NS, 'provenance')->item(0);
- } else if ($dom->documentElement->tagName == 'me:env') {
- $env_element = $dom->documentElement;
- } else {
+ }
+
+ if (!$env_element) {
return false;
}
diff --git a/plugins/OStatus/lib/safecrypt_rsa.php b/plugins/OStatus/lib/safecrypt_rsa.php
new file mode 100644
index 000000000..f3aa2c928
--- /dev/null
+++ b/plugins/OStatus/lib/safecrypt_rsa.php
@@ -0,0 +1,18 @@
+<?php
+
+require_once 'Crypt/RSA.php';
+
+/**
+ * Crypt_RSA stores a Math_BigInteger with value 0, which triggers a bug
+ * in Math_BigInteger's wakeup function which spews notices to log or output.
+ * This wrapper replaces it with a version that survives serialization.
+ */
+class SafeCrypt_RSA extends Crypt_RSA
+{
+ function __construct()
+ {
+ parent::__construct();
+ $this->zero = new SafeMath_BigInteger();
+ }
+}
+
diff --git a/plugins/OStatus/lib/safemath_biginteger.php b/plugins/OStatus/lib/safemath_biginteger.php
new file mode 100644
index 000000000..c05e24d1e
--- /dev/null
+++ b/plugins/OStatus/lib/safemath_biginteger.php
@@ -0,0 +1,20 @@
+<?php
+
+require_once 'Math/BigInteger.php';
+
+/**
+ * Crypt_RSA stores a Math_BigInteger with value 0, which triggers a bug
+ * in Math_BigInteger's wakeup function which spews notices to log or output.
+ * This wrapper replaces it with a version that survives serialization.
+ */
+class SafeMath_BigInteger extends Math_BigInteger
+{
+ function __wakeup()
+ {
+ if ($this->hex == '') {
+ $this->hex = '0';
+ }
+ parent::__wakeup();
+ }
+}
+
diff --git a/plugins/OStatus/lib/xrdaction.php b/plugins/OStatus/lib/xrdaction.php
index 6881292ad..f1a56e0a8 100644
--- a/plugins/OStatus/lib/xrdaction.php
+++ b/plugins/OStatus/lib/xrdaction.php
@@ -46,10 +46,10 @@ class XrdAction extends Action
if (empty($xrd->subject)) {
$xrd->subject = Discovery::normalize($this->uri);
}
- $xrd->alias[] = common_profile_url($nick);
+ $xrd->alias[] = $this->user->uri;
$xrd->links[] = array('rel' => Discovery::PROFILEPAGE,
'type' => 'text/html',
- 'href' => common_profile_url($nick));
+ 'href' => $this->user->uri);
$xrd->links[] = array('rel' => Discovery::UPDATESFROM,
'href' => common_local_url('ApiTimelineUser',
@@ -65,7 +65,7 @@ class XrdAction extends Action
// XFN
$xrd->links[] = array('rel' => 'http://gmpg.org/xfn/11',
'type' => 'text/html',
- 'href' => common_profile_url($nick));
+ 'href' => $this->user->uri);
// FOAF
$xrd->links[] = array('rel' => 'describedby',
'type' => 'application/rdf+xml',
@@ -91,7 +91,7 @@ class XrdAction extends Action
}
$xrd->links[] = array('rel' => Magicsig::PUBLICKEYREL,
- 'href' => 'data:application/magic-public-key;'. $magickey->toString(false));
+ 'href' => 'data:application/magic-public-key,'. $magickey->toString(false));
// TODO - finalize where the redirect should go on the publisher
$url = common_local_url('ostatussub') . '?profile={uri}';
diff --git a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
index f17dfa50a..0956d2f9b 100644
--- a/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
+++ b/plugins/OStatus/locale/fr/LC_MESSAGES/OStatus.po
@@ -104,3 +104,6 @@ msgstr ""
#: actions/feedsubsettings.php:231
msgid "Previewing feed:"
msgstr ""
+
+msgid "Confirm"
+msgstr "Confirmer"
diff --git a/plugins/OStatus/scripts/fixup-shadow.php b/plugins/OStatus/scripts/fixup-shadow.php
new file mode 100644
index 000000000..ec014c787
--- /dev/null
+++ b/plugins/OStatus/scripts/fixup-shadow.php
@@ -0,0 +1,69 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+
+$longoptions = array('dry-run');
+
+$helptext = <<<END_OF_USERROLE_HELP
+fixup_shadow.php [options]
+Patches up stray ostatus_profile entries with corrupted shadow entries
+for local users and groups.
+
+ --dry-run look but don't touch
+
+END_OF_USERROLE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$dry = have_option('dry-run');
+
+$oprofile = new Ostatus_profile();
+
+$marker = mt_rand(31337, 31337000);
+
+$profileTemplate = common_local_url('userbyid', array('id' => $marker));
+$encProfile = $oprofile->escape($profileTemplate, true);
+$encProfile = str_replace($marker, '%', $encProfile);
+
+$groupTemplate = common_local_url('groupbyid', array('id' => $marker));
+$encGroup = $oprofile->escape($groupTemplate, true);
+$encGroup = str_replace($marker, '%', $encGroup);
+
+$sql = "SELECT * FROM ostatus_profile WHERE uri LIKE '%s' OR uri LIKE '%s'";
+$oprofile->query(sprintf($sql, $encProfile, $encGroup));
+
+echo "Found $oprofile->N bogus ostatus_profile entries for local users and groups:\n";
+
+while ($oprofile->fetch()) {
+ echo "$oprofile->uri";
+
+ if ($dry) {
+ echo " (unchanged)\n";
+ } else {
+ echo " removing bogus ostatus_profile entry...";
+ $evil = clone($oprofile);
+ $evil->delete();
+ echo " ok\n";
+ }
+}
+
+echo "done.\n";
+
diff --git a/plugins/OStatus/scripts/testfeed.php b/plugins/OStatus/scripts/testfeed.php
new file mode 100644
index 000000000..5e3ccd433
--- /dev/null
+++ b/plugins/OStatus/scripts/testfeed.php
@@ -0,0 +1,89 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2010, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/../../..'));
+
+$longoptions = array('skip=', 'count=');
+
+$helptext = <<<END_OF_HELP
+testfeed.php [options] http://example.com/atom-feed-url
+Pull an Atom feed and run items in it as though they were live PuSH updates.
+Mainly intended for testing funky feed formats.
+
+ --skip=N Ignore the first N items in the feed.
+ --count=N Only process up to N items from the feed, after skipping.
+
+
+END_OF_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+if (empty($args[0]) || !Validate::uri($args[0])) {
+ print "$helptext";
+ exit(1);
+}
+
+$feedurl = $args[0];
+$skip = have_option('skip') ? intval(get_option_value('skip')) : 0;
+$count = have_option('count') ? intval(get_option_value('count')) : 0;
+
+
+$sub = FeedSub::staticGet('topic', $feedurl);
+if (!$sub) {
+ print "Feed $feedurl is not subscribed.\n";
+ exit(1);
+}
+
+$xml = file_get_contents($feedurl);
+if ($xml === false) {
+ print "Bad fetch.\n";
+ exit(1);
+}
+
+$feed = new DOMDocument();
+if (!$feed->loadXML($xml)) {
+ print "Bad XML.\n";
+ exit(1);
+}
+
+if ($skip || $count) {
+ $entries = $feed->getElementsByTagNameNS(ActivityUtils::ATOM, 'entry');
+ $remove = array();
+ for ($i = 0; $i < $skip && $i < $entries->length; $i++) {
+ $item = $entries->item($i);
+ if ($item) {
+ $remove[] = $item;
+ }
+ }
+ if ($count) {
+ for ($i = $skip + $count; $i < $entries->length; $i++) {
+ $item = $entries->item($i);
+ if ($item) {
+ $remove[] = $item;
+ }
+ }
+ }
+ foreach ($remove as $item) {
+ $item->parentNode->removeChild($item);
+ }
+}
+
+Event::handle('StartFeedSubReceive', array($sub, $feed));
+
diff --git a/plugins/OStatus/scripts/updateostatus.php b/plugins/OStatus/scripts/updateostatus.php
index d553a7d62..622ded56a 100644
--- a/plugins/OStatus/scripts/updateostatus.php
+++ b/plugins/OStatus/scripts/updateostatus.php
@@ -56,7 +56,12 @@ try {
$user = new User();
if ($user->find()) {
while ($user->fetch()) {
- updateOStatus($user);
+ try {
+ updateOStatus($user);
+ } catch (Exception $e) {
+ common_log(LOG_NOTICE, "Couldn't convert OMB subscriptions ".
+ "for {$user->nickname} to OStatus: " . $e->getMessage());
+ }
}
}
} else {
@@ -98,7 +103,7 @@ function updateOStatus($user)
echo "Checking {$rp->nickname}...";
}
- $op = Ostatus_profile::ensureProfile($rp->profileurl);
+ $op = Ostatus_profile::ensureProfileURL($rp->profileurl);
if (empty($op)) {
echo "can't convert.\n";
@@ -107,8 +112,8 @@ function updateOStatus($user)
if (!have_option('q', 'quiet')) {
echo "Converting...";
}
- Subscription::cancel($up, $rp);
Subscription::start($up, $op->localProfile());
+ Subscription::cancel($up, $rp);
if (!have_option('q', 'quiet')) {
echo "done.\n";
}
@@ -118,8 +123,7 @@ function updateOStatus($user)
if (!have_option('q', 'quiet')) {
echo "fail.\n";
}
- continue;
- common_log(LOG_WARNING, "Couldn't convert OMB subscription (" . $up->nickname . ", " . $rp->nickname .
+ common_log(LOG_NOTICE, "Couldn't convert OMB subscription (" . $up->nickname . ", " . $rp->nickname .
") to OStatus: " . $e->getMessage());
continue;
}
diff --git a/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php b/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php
new file mode 100644
index 000000000..6756f1993
--- /dev/null
+++ b/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Opens links with rel=external on a new window or tab
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Action
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@status.net>
+ * @copyright 2010 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+/**
+ * Opens links with rel=external on a new window or tab
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Sarven Capadisli <csarven@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 OpenExternalLinkTargetPlugin extends Plugin
+{
+ function onEndShowScripts($action)
+ {
+ $action->inlineScript('$("a[rel~=external]:not([class~=attachment])").live("click", function(){ window.open(this.href); return false; });');
+
+ return true;
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'OpenExternalLinkTarget',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Sarven Capadisli',
+ 'homepage' => 'http://status.net/wiki/Plugin:OpenExternalLinkTarget',
+ 'rawdescription' =>
+ _m('Opens external links (i.e., with rel=external) on a new window or tab'));
+ return true;
+ }
+}
+
diff --git a/plugins/OpenID/User_openid.php b/plugins/OpenID/User_openid.php
index 5ef05b4c7..1beff9ea3 100644
--- a/plugins/OpenID/User_openid.php
+++ b/plugins/OpenID/User_openid.php
@@ -45,6 +45,11 @@ class User_openid extends Memcached_DataObject
*/
function keys()
{
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
return array('canonical' => 'K', 'display' => 'U', 'user_id' => 'U');
}
diff --git a/plugins/OpenID/User_openid_trustroot.php b/plugins/OpenID/User_openid_trustroot.php
index 0b411b8f7..17c03afb0 100644
--- a/plugins/OpenID/User_openid_trustroot.php
+++ b/plugins/OpenID/User_openid_trustroot.php
@@ -43,6 +43,11 @@ class User_openid_trustroot extends Memcached_DataObject
function keys()
{
+ return array_keys($this->keyTypes());
+ }
+
+ function keyTypes()
+ {
return array('trustroot' => 'K', 'user_id' => 'K');
}
diff --git a/plugins/OpenID/openid.php b/plugins/OpenID/openid.php
index 8f949c9c5..9e02c7a88 100644
--- a/plugins/OpenID/openid.php
+++ b/plugins/OpenID/openid.php
@@ -225,11 +225,11 @@ function oid_update_user(&$user, &$sreg)
$orig_profile = clone($profile);
- if ($sreg['fullname'] && strlen($sreg['fullname']) <= 255) {
+ if (!empty($sreg['fullname']) && strlen($sreg['fullname']) <= 255) {
$profile->fullname = $sreg['fullname'];
}
- if ($sreg['country']) {
+ if (!empty($sreg['country'])) {
if ($sreg['postcode']) {
# XXX: use postcode to get city and region
# XXX: also, store postcode somewhere -- it's valuable!
@@ -249,7 +249,7 @@ function oid_update_user(&$user, &$sreg)
$orig_user = clone($user);
- if ($sreg['email'] && Validate::email($sreg['email'], common_config('email', 'check_domain'))) {
+ if (!empty($sreg['email']) && Validate::email($sreg['email'], common_config('email', 'check_domain'))) {
$user->email = $sreg['email'];
}
diff --git a/plugins/OpenID/openidsettings.php b/plugins/OpenID/openidsettings.php
index 3fc3d6128..16142cf48 100644
--- a/plugins/OpenID/openidsettings.php
+++ b/plugins/OpenID/openidsettings.php
@@ -176,6 +176,43 @@ class OpenidsettingsAction extends AccountSettingsAction
}
}
}
+
+ $this->elementStart('form', array('method' => 'post',
+ 'id' => 'form_settings_openid_trustroots',
+ 'class' => 'form_settings',
+ 'action' =>
+ common_local_url('openidsettings')));
+ $this->elementStart('fieldset', array('id' => 'settings_openid_trustroots'));
+ $this->element('legend', null, _m('OpenID Trusted Sites'));
+ $this->hidden('token', common_session_token());
+ $this->element('p', 'form_guide',
+ _m('The following sites are allowed to access your ' .
+ 'identity and log you in. You can remove a site from ' .
+ 'this list to deny it access to your OpenID.'));
+ $this->elementStart('ul', 'form_data');
+ $user_openid_trustroot = new User_openid_trustroot();
+ $user_openid_trustroot->user_id=$user->id;
+ if($user_openid_trustroot->find()) {
+ while($user_openid_trustroot->fetch()) {
+ $this->elementStart('li');
+ $this->element('input', array('name' => 'openid_trustroot[]',
+ 'type' => 'checkbox',
+ 'class' => 'checkbox',
+ 'value' => $user_openid_trustroot->trustroot,
+ 'id' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot)));
+ $this->element('label', array('class'=>'checkbox', 'for' => 'openid_trustroot_' . crc32($user_openid_trustroot->trustroot)),
+ $user_openid_trustroot->trustroot);
+ $this->elementEnd('li');
+ }
+ }
+ $this->elementEnd('ul');
+ $this->element('input', array('type' => 'submit',
+ 'id' => 'settings_openid_trustroots_action-submit',
+ 'name' => 'remove_trustroots',
+ 'class' => 'submit',
+ 'value' => _m('Remove')));
+ $this->elementEnd('fieldset');
+ $this->elementEnd('form');
}
/**
@@ -204,12 +241,45 @@ class OpenidsettingsAction extends AccountSettingsAction
}
} else if ($this->arg('remove')) {
$this->removeOpenid();
+ } else if($this->arg('remove_trustroots')) {
+ $this->removeTrustroots();
} else {
$this->showForm(_m('Something weird happened.'));
}
}
/**
+ * Handles a request to remove OpenID trustroots from the user's account
+ *
+ * Validates input and, if everything is OK, deletes the trustroots.
+ * Reloads the form with a success or error notification.
+ *
+ * @return void
+ */
+
+ function removeTrustroots()
+ {
+ $user = common_current_user();
+ $trustroots = $this->arg('openid_trustroot');
+ if($trustroots) {
+ foreach($trustroots as $trustroot) {
+ $user_openid_trustroot = User_openid_trustroot::pkeyGet(
+ array('user_id'=>$user->id, 'trustroot'=>$trustroot));
+ if($user_openid_trustroot) {
+ $user_openid_trustroot->delete();
+ } else {
+ $this->showForm(_m('No such OpenID trustroot.'));
+ return;
+ }
+ }
+ $this->showForm(_m('Trustroots removed'), true);
+ } else {
+ $this->showForm();
+ }
+ return;
+ }
+
+ /**
* Handles a request to remove an OpenID from the user's account
*
* Validates input and, if everything is OK, deletes the OpenID.
diff --git a/plugins/RSSCloud/RSSCloudNotifier.php b/plugins/RSSCloud/RSSCloudNotifier.php
index d454691c8..9e7b53680 100644
--- a/plugins/RSSCloud/RSSCloudNotifier.php
+++ b/plugins/RSSCloud/RSSCloudNotifier.php
@@ -152,7 +152,7 @@ class RSSCloudNotifier
function notify($profile)
{
$feed = common_path('api/statuses/user_timeline/') .
- $profile->nickname . '.rss';
+ $profile->id . '.rss';
$cloudSub = new RSSCloudSubscription();
diff --git a/plugins/RSSCloud/RSSCloudRequestNotify.php b/plugins/RSSCloud/RSSCloudRequestNotify.php
index d76c08d37..030529534 100644
--- a/plugins/RSSCloud/RSSCloudRequestNotify.php
+++ b/plugins/RSSCloud/RSSCloudRequestNotify.php
@@ -270,13 +270,14 @@ class RSSCloudRequestNotifyAction extends Action
function userFromFeed($feed)
{
- // We only do profile feeds
+ // We only do canonical RSS2 profile feeds (specified by ID), e.g.:
+ // http://www.example.com/api/statuses/user_timeline/2.rss
$path = common_path('api/statuses/user_timeline/');
- $valid = '%^' . $path . '(?<nickname>.*)\.rss$%';
+ $valid = '%^' . $path . '(?<id>.*)\.rss$%';
if (preg_match($valid, $feed, $matches)) {
- $user = User::staticGet('nickname', $matches['nickname']);
+ $user = User::staticGet('id', $matches['id']);
if (!empty($user)) {
return $user;
}
diff --git a/plugins/RequireValidatedEmail/README b/plugins/RequireValidatedEmail/README
index ccd94d271..46ee24d5f 100644
--- a/plugins/RequireValidatedEmail/README
+++ b/plugins/RequireValidatedEmail/README
@@ -14,8 +14,6 @@ registered prior to that timestamp.
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 3581f1de9..ccefa14f6 100644
--- a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
+++ b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php
@@ -54,13 +54,34 @@ class RequireValidatedEmailPlugin extends Plugin
$user = User::staticGet('id', $notice->profile_id);
if (!empty($user)) { // it's a remote notice
if (!$this->validated($user)) {
- throw new ClientException(_("You must validate your email address before posting."));
+ throw new ClientException(_m("You must validate your email address before posting."));
}
}
return true;
}
/**
+ * Event handler for registration attempts; rejects the registration
+ * if email field is missing.
+ *
+ * @param RegisterAction $action
+ * @return bool hook result code
+ */
+ function onStartRegistrationTry($action)
+ {
+ $email = $action->trimmed('email');
+
+ if (empty($email)) {
+ $action->showForm(_m('You must provide an email address to register.'));
+ return false;
+ }
+
+ // Default form will run address format validation and reject if bad.
+
+ return true;
+ }
+
+ /**
* Check if a user has a validated email address or has been
* otherwise grandfathered in.
*
diff --git a/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po b/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po
new file mode 100644
index 000000000..49ac4f6f4
--- /dev/null
+++ b/plugins/RequireValidatedEmail/locale/RequireValidatedEmail.po
@@ -0,0 +1,31 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-10 10:05-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"
+
+#: RequireValidatedEmailPlugin.php:57
+msgid "You must validate your email address before posting."
+msgstr ""
+
+#: RequireValidatedEmailPlugin.php:75
+msgid "You must provide an email address to register."
+msgstr ""
+
+#: RequireValidatedEmailPlugin.php:128
+msgid ""
+"The Require Validated Email plugin disables posting for accounts that do not "
+"have a validated email address."
+msgstr ""
diff --git a/plugins/TwitterBridge/README b/plugins/TwitterBridge/README
index d0d34b7ef..d7dfe20de 100644
--- a/plugins/TwitterBridge/README
+++ b/plugins/TwitterBridge/README
@@ -59,8 +59,8 @@ unless you configure it with a consumer key and secret.)
secret. The Twitter bridge will fall back on the global key pair if
it can't find a local pair, e.g.:
- $config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY'
- $config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET'
+ $config['twitter']['global_consumer_key'] = 'YOUR_CONSUMER_KEY';
+ $config['twitter']['global_consumer_secret'] = 'YOUR_CONSUMER_SECRET';
Administration panel
--------------------
diff --git a/scripts/command.php b/scripts/command.php
new file mode 100755
index 000000000..6041b02eb
--- /dev/null
+++ b/scripts/command.php
@@ -0,0 +1,80 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'i:n:';
+$longoptions = array('id=', 'nickname=');
+
+$helptext = <<<END_OF_USERROLE_HELP
+command.php [options] [command line]
+Perform commands on behalf of a user, such as sub, unsub, join, drop
+
+ -i --id ID of the user
+ -n --nickname nickname of the user
+
+END_OF_USERROLE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+
+
+function interpretCommand($user, $body)
+{
+ $inter = new CommandInterpreter();
+ $chan = new CLIChannel();
+ $cmd = $inter->handle_command($user, $body);
+ if ($cmd) {
+ $cmd->execute($chan);
+ return true;
+ } else {
+ $chan->error($user, "Not a valid command. Try 'help'?");
+ return false;
+ }
+}
+
+
+
+if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $user = User::staticGet('id', $id);
+ if (empty($user)) {
+ print "Can't find user with ID $id\n";
+ exit(1);
+ }
+} else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $user = User::staticGet('nickname', $nickname);
+ if (empty($user)) {
+ print "Can't find user with nickname '$nickname'\n";
+ exit(1);
+ }
+} else {
+ print "You must provide either an ID or a nickname.\n\n";
+ print $helptext;
+ exit(1);
+}
+
+// @todo refactor the interactive console in console.php and use
+// that to optionally make an interactive test console here too.
+// Would be good to help people test commands when XMPP or email
+// isn't available locally.
+interpretCommand($user, implode(' ', $args));
+
diff --git a/scripts/docgen.php b/scripts/docgen.php
new file mode 100755
index 000000000..78bbe37d8
--- /dev/null
+++ b/scripts/docgen.php
@@ -0,0 +1,84 @@
+#!/usr/bin/env php
+<?php
+
+$shortoptions = '';
+$longoptions = array('plugin=');
+
+
+$helptext = <<<ENDOFHELP
+Build HTML documentation from doc comments in source.
+
+Usage: docgen.php [options] output-directory
+Options:
+
+ --plugin=... build docs for given plugin instead of core
+
+
+ENDOFHELP;
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$pattern = "*.php *.inc";
+$exclude = 'config.php */extlib/* */local/* */plugins/* */scripts/*';
+
+if (isset($args[0])) {
+ $outdir = $args[0];
+ if (!is_dir($outdir)) {
+ echo "Output directory $outdir is not a directory.\n";
+ exit(1);
+ }
+} else {
+ print $helptext;
+ exit(1);
+}
+
+if (have_option('p', 'plugin')) {
+ $plugin = get_option_value('plugin');
+ $exclude = "*/extlib/*";
+ $indir = INSTALLDIR . "/plugins/" . $plugin;
+ if (!is_dir($indir)) {
+ $indir = INSTALLDIR . "/plugins";
+ $filename = "{$plugin}Plugin.php";
+ if (!file_exists("$indir/$filename")) {
+ echo "Can't find plugin $plugin.\n";
+ exit(1);
+ } else {
+ $pattern = $filename;
+ }
+ }
+} else {
+ $indir = INSTALLDIR;
+}
+
+$replacements = array(
+ '%%version%%' => STATUSNET_VERSION,
+ '%%indir%%' => $indir,
+ '%%pattern%%' => $pattern,
+ '%%outdir%%' => $outdir,
+ '%%htmlout%%' => $outdir,
+ '%%exclude%%' => $exclude,
+);
+
+var_dump($replacements);
+
+$template = file_get_contents(dirname(__FILE__) . '/doxygen.tmpl');
+$template = strtr($template, $replacements);
+
+$templateFile = tempnam(sys_get_temp_dir(), 'statusnet-doxygen');
+file_put_contents($templateFile, $template);
+
+$cmd = "doxygen " . escapeshellarg($templateFile);
+
+$retval = 0;
+passthru($cmd, $retval);
+
+if ($retval == 0) {
+ echo "Done!\n";
+ unlink($templateFile);
+ exit(0);
+} else {
+ echo "Failed! Doxygen config left in $templateFile\n";
+ exit($retval);
+}
+
diff --git a/scripts/doxygen.tmpl b/scripts/doxygen.tmpl
new file mode 100644
index 000000000..15d03e3bb
--- /dev/null
+++ b/scripts/doxygen.tmpl
@@ -0,0 +1,1516 @@
+# Doxyfile 1.6.1
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project
+#
+# All text after a hash (#) is considered a comment and will be ignored
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ")
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
+# by quotes) that should identify the project.
+
+PROJECT_NAME = StatusNet
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER = %%version%%
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = %%outdir%%
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian,
+# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak,
+# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip.
+
+STRIP_FROM_PATH = %%indir%%
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful is your file systems
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 8
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = NO
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it parses.
+# With this tag you can assign which parser to use for a given extension.
+# Doxygen has a built-in mapping, but you can override or extend it using this tag.
+# The format is ext=language, where ext is a file extension, and language is one of
+# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP,
+# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat
+# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also make the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate getter
+# and setter methods for a property. Setting this option to YES (the default)
+# will make doxygen to replace the get and set methods by a property in the
+# documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to
+# determine which symbols to keep in memory and which to flush to disk.
+# When the cache is full, less often used symbols will be written to disk.
+# For small to medium size projects (<1000 input files) the default value is
+# probably good enough. For larger projects a too small cache size can cause
+# doxygen to be busy swapping symbols to and from disk most of the time
+# causing a significant performance penality.
+# If the system has enough physical memory increasing the cache will improve the
+# performance by keeping more symbols in memory. Note that the value works on
+# a logarithmic scale so increasing the size by one will rougly double the
+# memory usage. The cache size is given by this formula:
+# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0,
+# corresponding to a cache size of 2^16 = 65536 symbols
+
+SYMBOL_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = NO
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespace are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if sectionname ... \endif.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or define consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and defines in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# If the sources in your project are distributed over multiple directories
+# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
+# in the documentation. The default is NO.
+
+SHOW_DIRECTORIES = NO
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by
+# doxygen. The layout file controls the global structure of the generated output files
+# in an output format independent way. The create the layout file that represents
+# doxygen's defaults, run doxygen with the -l option. You can optionally specify a
+# file name after the option, if omitted DoxygenLayout.xml will be used as the name
+# of the layout file.
+
+LAYOUT_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# This WARN_NO_PARAMDOC option can be abled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = %%indir%%
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
+# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
+
+FILE_PATTERNS = %%pattern%%
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+
+# fixme for some reason this doesn't work?
+
+EXCLUDE = config.php extlib local plugins scripts
+
+# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
+# directories that are symbolic links (a Unix filesystem feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS = %%exclude%%
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be
+# ignored.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
+# is applied to all files.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = YES
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C and C++ comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = NO
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = %%htmlout%%
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header.
+
+HTML_HEADER =
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If the tag is left blank doxygen
+# will generate a default style sheet. Note that doxygen will try to copy
+# the style sheet file to the HTML output directory, so don't put your own
+# stylesheet in the HTML output directory as well, or it will be erased!
+
+HTML_STYLESHEET =
+
+# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
+# files or namespaces will be aligned in HTML using tables. If set to
+# NO a bullet list will be used.
+
+HTML_ALIGN_MEMBERS = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded. For this to work a browser that supports
+# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
+# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER
+# are set, an additional index file will be generated that can be used as input for
+# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated
+# HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE =
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add.
+# For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
+# top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it.
+
+DISABLE_INDEX = NO
+
+# This tag can be used to set the number of enum values (range [1..20])
+# that doxygen will group on one line in the generated HTML documentation.
+
+ENUM_VALUES_PER_LINE = 4
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+
+GENERATE_TREEVIEW = NO
+
+# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories,
+# and Class Hierarchy pages using a tree view instead of an ordered list.
+
+USE_INLINE_TREES = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# When the SEARCHENGINE tag is enable doxygen will generate a search box for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP) or Qt help (GENERATE_QHP)
+# there is already a search function so this one should typically
+# be disabled.
+
+SEARCHENGINE = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, a4wide, letter, legal and
+# executive. If left blank a4wide will be used.
+
+PAPER_TYPE = a4wide
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include source code with syntax highlighting in the LaTeX output. Note that which sources are shown also depends on other settings such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load stylesheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = NO
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# in the INCLUDE_PATH (see below) will be search if a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all function-like macros that are alone
+# on a line, have an all uppercase name, and do not end with a semicolon. Such
+# function macros are typically used for boiler-plate code, and will confuse
+# the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles.
+# Optionally an initial location of the external documentation
+# can be added for each tagfile. The format of a tag file without
+# this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths or
+# URLs. If a location is present for each tag, the installdox tool
+# does not have to be run to correct the links.
+# Note that each tag file must have a unique name
+# (where the name does NOT include the path)
+# If a tag file is not located in the directory in which doxygen
+# is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option is superseded by the HAVE_DOT option below. This is only a
+# fallback. It is recommended to install and use dot, since it yields more
+# powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# By default doxygen will write a font called FreeSans.ttf to the output
+# directory and reference it in all dot files that doxygen generates. This
+# font does not include all possible unicode characters however, so when you need
+# these (or just want a differently looking font) you can specify the font name
+# using DOT_FONTNAME. You need need to make sure dot is able to find the font,
+# which can be done by putting it in a standard location or by setting the
+# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory
+# containing the font.
+
+DOT_FONTNAME = FreeSans
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the output directory to look for the
+# FreeSans.ttf font (which doxygen will put there itself). If you specify a
+# different font using DOT_FONTNAME you can set the path where dot
+# can find it using this tag.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# the CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are png, jpg, or gif
+# If left blank png will be used.
+
+DOT_IMAGE_FORMAT = png
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/scripts/fixup_files.php b/scripts/fixup_files.php
new file mode 100755
index 000000000..18feaf221
--- /dev/null
+++ b/scripts/fixup_files.php
@@ -0,0 +1,77 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$longoptions = array('dry-run');
+
+$helptext = <<<END_OF_USERROLE_HELP
+fixup_files.php [options]
+Patches up file entries with corrupted types and titles (the "h bug").
+
+ --dry-run look but don't touch
+
+END_OF_USERROLE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$dry = have_option('dry-run');
+
+$f = new File();
+$f->title = 'h';
+$f->mimetype = 'h';
+$f->size = 0;
+$f->protected = 0;
+$f->find();
+echo "Found $f->N bad items:\n";
+
+while ($f->fetch()) {
+ echo "$f->id $f->url";
+
+ $data = File_redirection::lookupWhere($f->url);
+ if ($dry) {
+ if (is_array($data)) {
+ echo " (unchanged)\n";
+ } else {
+ echo " (unchanged, but embedding lookup failed)\n";
+ }
+ } else {
+ // NULL out the mime/title/size/protected fields
+ $sql = sprintf("UPDATE file " .
+ "SET mimetype=null,title=null,size=null,protected=null " .
+ "WHERE id=%d",
+ $f->id);
+ $f->query($sql);
+ $f->decache();
+
+ if (is_array($data)) {
+ if ($f->saveOembed($data, $f->url)) {
+ echo " (ok)\n";
+ } else {
+ echo " (ok, no embedding data)\n";
+ }
+ } else {
+ echo " (ok, but embedding lookup failed)\n";
+ }
+ }
+}
+
+echo "done.\n";
+
diff --git a/scripts/flushsite.php b/scripts/flushsite.php
new file mode 100644
index 000000000..b7f385ac4
--- /dev/null
+++ b/scripts/flushsite.php
@@ -0,0 +1,45 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - a distributed open-source microblogging tool
+ * Copyright (C) 2008, 2009, StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'd';
+$longoptions = array('delete');
+
+$helptext = <<<END_OF_FLUSHSITE_HELP
+flushsite.php -s<sitename>
+Flush the site with the given name from memcached.
+
+END_OF_FLUSHSITE_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+
+$nickname = common_config('site', 'nickname');
+
+$sn = Status_network::memGet('nickname', $nickname);
+
+if (empty($sn)) {
+ print "No such site.\n";
+ exit(-1);
+}
+
+print "Flushing cache for {$nickname}...";
+$sn->decache();
+print "OK.\n"; \ No newline at end of file
diff --git a/scripts/imdaemon.php b/scripts/imdaemon.php
index 4a2c94223..0ce74667c 100755
--- a/scripts/imdaemon.php
+++ b/scripts/imdaemon.php
@@ -53,7 +53,7 @@ class ImDaemon extends SpawningDaemon
{
common_log(LOG_INFO, 'Waiting to listen to IM connections and queues');
- $master = new ImMaster($this->get_id());
+ $master = new ImMaster($this->get_id(), $this->processManager());
$master->init($this->allsites);
$master->service();
@@ -66,6 +66,14 @@ class ImDaemon extends SpawningDaemon
class ImMaster extends IoMaster
{
+ protected $processManager;
+
+ function __construct($id, $processManager)
+ {
+ parent::__construct($id);
+ $this->processManager = $processManager;
+ }
+
/**
* Initialize IoManagers for the currently configured site
* which are appropriate to this instance.
@@ -77,6 +85,7 @@ class ImMaster extends IoMaster
$qm = QueueManager::get();
$qm->setActiveGroup('im');
$classes[] = $qm;
+ $classes[] = $this->processManager;
}
Event::handle('EndImDaemonIoManagers', array(&$classes));
foreach ($classes as $class) {
@@ -85,6 +94,14 @@ class ImMaster extends IoMaster
}
}
+if (version_compare(PHP_VERSION, '5.2.6', '<')) {
+ $arch = php_uname('m');
+ if ($arch == 'x86_64' || $arch == 'amd64') {
+ print "Aborting daemon - 64-bit PHP prior to 5.2.6 has known bugs in stream_select; you are running " . PHP_VERSION . " on $arch.\n";
+ exit(1);
+ }
+}
+
if (have_option('i', 'id')) {
$id = get_option_value('i', 'id');
} else if (count($args) > 0) {
diff --git a/scripts/importtwitteratom.php b/scripts/importtwitteratom.php
new file mode 100644
index 000000000..7316f2108
--- /dev/null
+++ b/scripts/importtwitteratom.php
@@ -0,0 +1,192 @@
+#!/usr/bin/env php
+<?php
+/*
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2010 StatusNet, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..'));
+
+$shortoptions = 'i:n:f:';
+$longoptions = array('id=', 'nickname=', 'file=');
+
+$helptext = <<<END_OF_IMPORTTWITTERATOM_HELP
+importtwitteratom.php [options]
+import an Atom feed from Twitter as notices by a user
+
+ -i --id ID of user to update
+ -n --nickname nickname of the user to update
+ -f --file file to import (Atom-only for now)
+
+END_OF_IMPORTTWITTERATOM_HELP;
+
+require_once INSTALLDIR.'/scripts/commandline.inc';
+require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+
+function getUser()
+{
+ $user = null;
+
+ if (have_option('i', 'id')) {
+ $id = get_option_value('i', 'id');
+ $user = User::staticGet('id', $id);
+ if (empty($user)) {
+ throw new Exception("Can't find user with id '$id'.");
+ }
+ } else if (have_option('n', 'nickname')) {
+ $nickname = get_option_value('n', 'nickname');
+ $user = User::staticGet('nickname', $nickname);
+ if (empty($user)) {
+ throw new Exception("Can't find user with nickname '$nickname'");
+ }
+ } else {
+ show_help();
+ exit(1);
+ }
+
+ return $user;
+}
+
+function getAtomFeedDocument()
+{
+ $filename = get_option_value('f', 'file');
+
+ if (empty($filename)) {
+ show_help();
+ exit(1);
+ }
+
+ if (!file_exists($filename)) {
+ throw new Exception("No such file '$filename'.");
+ }
+
+ if (!is_file($filename)) {
+ throw new Exception("Not a regular file: '$filename'.");
+ }
+
+ if (!is_readable($filename)) {
+ throw new Exception("File '$filename' not readable.");
+ }
+
+ $xml = file_get_contents($filename);
+
+ $dom = DOMDocument::loadXML($xml);
+
+ if ($dom->documentElement->namespaceURI != Activity::ATOM ||
+ $dom->documentElement->localName != 'feed') {
+ throw new Exception("'$filename' is not an Atom feed.");
+ }
+
+ return $dom;
+}
+
+function importActivityStream($user, $doc)
+{
+ $feed = $doc->documentElement;
+
+ $entries = $feed->getElementsByTagNameNS(Activity::ATOM, 'entry');
+
+ for ($i = $entries->length - 1; $i >= 0; $i--) {
+ $entry = $entries->item($i);
+ $activity = new Activity($entry, $feed);
+ $object = $activity->object;
+ if (!have_option('q', 'quiet')) {
+ print $activity->content . "\n";
+ }
+ $html = getTweetHtml($object->link);
+
+ $config = array('safe' => 1,
+ 'deny_attribute' => 'class,rel,id,style,on*');
+
+ $html = htmLawed($html, $config);
+
+ $content = html_entity_decode(strip_tags($html));
+
+ $notice = Notice::saveNew($user->id,
+ $content,
+ 'importtwitter',
+ array('uri' => $object->id,
+ 'url' => $object->link,
+ 'rendered' => $html,
+ 'created' => common_sql_date($activity->time),
+ 'replies' => array(),
+ 'groups' => array()));
+ }
+}
+
+function getTweetHtml($url)
+{
+ try {
+ $client = new HTTPClient();
+ $response = $client->get($url);
+ } catch (HTTP_Request2_Exception $e) {
+ print "ERROR: HTTP response " . $e->getMessage() . "\n";
+ return false;
+ }
+
+ if (!$response->isOk()) {
+ print "ERROR: HTTP response " . $response->getCode() . "\n";
+ return false;
+ }
+
+ $body = $response->getBody();
+
+ return tweetHtmlFromBody($body);
+}
+
+function tweetHtmlFromBody($body)
+{
+ $doc = DOMDocument::loadHTML($body);
+ $xpath = new DOMXPath($doc);
+
+ $spans = $xpath->query('//span[@class="entry-content"]');
+
+ if ($spans->length == 0) {
+ print "ERROR: No content in tweet page.\n";
+ return '';
+ }
+
+ $span = $spans->item(0);
+
+ $children = $span->childNodes;
+
+ $text = '';
+
+ for ($i = 0; $i < $children->length; $i++) {
+ $child = $children->item($i);
+ if ($child instanceof DOMElement &&
+ $child->tagName == 'a' &&
+ !preg_match('#^https?://#', $child->getAttribute('href'))) {
+ $child->setAttribute('href', 'http://twitter.com' . $child->getAttribute('href'));
+ }
+ $text .= $doc->saveXML($child);
+ }
+
+ return $text;
+}
+
+try {
+
+ $doc = getAtomFeedDocument();
+ $user = getUser();
+
+ importActivityStream($user, $doc);
+
+} catch (Exception $e) {
+ print $e->getMessage()."\n";
+ exit(1);
+}
+
diff --git a/scripts/queuedaemon.php b/scripts/queuedaemon.php
index 6dba16f95..582a3dd88 100755
--- a/scripts/queuedaemon.php
+++ b/scripts/queuedaemon.php
@@ -105,7 +105,7 @@ class QueueDaemon extends SpawningDaemon
{
$this->log(LOG_INFO, 'checking for queued notices');
- $master = new QueueMaster($this->get_id());
+ $master = new QueueMaster($this->get_id(), $this->processManager());
$master->init($this->allsites);
try {
$master->service();
@@ -125,6 +125,14 @@ class QueueDaemon extends SpawningDaemon
class QueueMaster extends IoMaster
{
+ protected $processManager;
+
+ function __construct($id, $processManager)
+ {
+ parent::__construct($id);
+ $this->processManager = $processManager;
+ }
+
/**
* Initialize IoManagers which are appropriate to this instance.
*/
@@ -135,6 +143,7 @@ class QueueMaster extends IoMaster
$qm = QueueManager::get();
$qm->setActiveGroup('main');
$managers[] = $qm;
+ $managers[] = $this->processManager;
}
Event::handle('EndQueueDaemonIoManagers', array(&$managers));
diff --git a/tests/ActivityParseTests.php b/tests/ActivityParseTests.php
index 7bf9cec7c..9d8fd47af 100644
--- a/tests/ActivityParseTests.php
+++ b/tests/ActivityParseTests.php
@@ -138,9 +138,83 @@ class ActivityParseTests extends PHPUnit_Framework_TestCase
$this->assertEquals($poco->urls[0]->value, 'http://example.com/blog.html');
$this->assertEquals($poco->urls[0]->primary, 'true');
$this->assertEquals($act->actor->geopoint, '37.7749295 -122.4194155');
+ }
+
+ public function testExample6()
+ {
+ global $_example6;
+
+ $dom = DOMDocument::loadXML($_example6);
+
+ $rss = $dom->documentElement;
+
+ $channels = $dom->getElementsByTagName('channel');
+
+ $channel = $channels->item(0);
+
+ $items = $channel->getElementsByTagName('item');
+ $item = $items->item(0);
+
+ $act = new Activity($item, $channel);
+
+ $this->assertEquals($act->verb, ActivityVerb::POST);
+
+ $this->assertEquals($act->id, 'http://en.blog.wordpress.com/?p=3857');
+ $this->assertEquals($act->link, 'http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/');
+ $this->assertEquals($act->title, 'Rub-a-Dub-Dub in the PubSubHubbub');
+ $this->assertEquals($act->time, 1267634892);
+
+ $actor = $act->actor;
+
+ $this->assertFalse(empty($actor));
+ $this->assertEquals($actor->title, "Joseph Scott");
}
+ public function testExample7()
+ {
+ global $_example7;
+
+ $dom = DOMDocument::loadXML($_example7);
+
+ $rss = $dom->documentElement;
+
+ $channels = $dom->getElementsByTagName('channel');
+
+ $channel = $channels->item(0);
+
+ $items = $channel->getElementsByTagName('item');
+
+ $item = $items->item(0);
+
+ $act = new Activity($item, $channel);
+
+ $this->assertEquals(ActivityVerb::POST, $act->verb);
+ $this->assertEquals('http://evanpro.posterous.com/checking-out-captain-bones', $act->link);
+ $this->assertEquals('http://evanpro.posterous.com/checking-out-captain-bones', $act->id);
+ $this->assertEquals('Checking out captain bones', $act->title);
+ $this->assertEquals(1269095551, $act->time);
+
+ $actor = $act->actor;
+
+ $this->assertEquals(ActivityObject::PERSON, $actor->type);
+ $this->assertEquals('http://posterous.com/people/3sDslhaepotz', $actor->id);
+ $this->assertEquals('Evan Prodromou', $actor->title);
+ $this->assertNull($actor->summary);
+ $this->assertNull($actor->content);
+ $this->assertEquals('http://posterous.com/people/3sDslhaepotz', $actor->link);
+ $this->assertNull($actor->source);
+ $this->assertTrue(is_array($actor->avatarLinks));
+ $this->assertEquals(1, count($actor->avatarLinks));
+ $this->assertEquals('http://files.posterous.com/user_profile_pics/480326/2009-08-05-142447.jpg',
+ $actor->avatarLinks[0]);
+ $this->assertNotNull($actor->poco);
+ $this->assertEquals('evanpro', $actor->poco->preferredUsername);
+ $this->assertEquals('Evan Prodromou', $actor->poco->displayName);
+ $this->assertNull($actor->poco->note);
+ $this->assertNull($actor->poco->address);
+ $this->assertEquals(0, count($actor->poco->urls));
+ }
}
$_example1 = <<<EXAMPLE1
@@ -330,3 +404,107 @@ $_example5 = <<<EXAMPLE5
</entry>
</feed>
EXAMPLE5;
+
+$_example6 = <<<EXAMPLE6
+<?xml version="1.0" encoding="UTF-8"?>
+<rss version="2.0"
+ xmlns:content="http://purl.org/rss/1.0/modules/content/"
+ xmlns:wfw="http://wellformedweb.org/CommentAPI/"
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:atom="http://www.w3.org/2005/Atom"
+ xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
+ xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
+ xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
+ >
+
+ <channel>
+ <title>WordPress.com News</title>
+ <atom:link href="http://en.blog.wordpress.com/feed/" rel="self" type="application/rss+xml" />
+ <link>http://en.blog.wordpress.com</link>
+ <description>The latest news on WordPress.com and the WordPress community.</description>
+ <lastBuildDate>Thu, 18 Mar 2010 23:25:35 +0000</lastBuildDate>
+
+ <generator>http://wordpress.com/</generator>
+ <language>en</language>
+ <sy:updatePeriod>hourly</sy:updatePeriod>
+ <sy:updateFrequency>1</sy:updateFrequency>
+ <cloud domain='en.blog.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
+ <image>
+ <url>http://www.gravatar.com/blavatar/e6392390e3bcfadff3671c5a5653d95b?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
+ <title>WordPress.com News</title>
+ <link>http://en.blog.wordpress.com</link>
+ </image>
+ <atom:link rel="search" type="application/opensearchdescription+xml" href="http://en.blog.wordpress.com/osd.xml" title="WordPress.com News" />
+ <atom:link rel='hub' href='http://en.blog.wordpress.com/?pushpress=hub'/>
+
+ <item>
+ <title>Rub-a-Dub-Dub in the PubSubHubbub</title>
+ <link>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/</link>
+ <comments>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/#comments</comments>
+ <pubDate>Wed, 03 Mar 2010 16:48:12 +0000</pubDate>
+ <dc:creator>Joseph Scott</dc:creator>
+
+ <category><![CDATA[Feeds]]></category>
+ <category><![CDATA[atom]]></category>
+ <category><![CDATA[pubsubhubbub]]></category>
+ <category><![CDATA[rss]]></category>
+
+ <guid isPermaLink="false">http://en.blog.wordpress.com/?p=3857</guid>
+ <description><![CDATA[From the tongue twisting name department we welcome PubSubHubbub, or as some people have shortened it to: PuSH. Like rssCloud, PuSH is a way for services that subscribe to updates from your blog (think Google Reader, Bloglines or Netvibes) to get updates even faster. In a nutshell, instead of having to periodically ask [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=en.blog.wordpress.com&blog=3584907&post=3857&subd=en.blog&ref=&feed=1" />]]></description>
+ <content:encoded><![CDATA[<p>From the tongue twisting name department we welcome <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub</a>, or as some people have shortened it to: PuSH. Like <a href="http://en.blog.wordpress.com/2009/09/07/rss-in-the-clouds/">rssCloud</a>, PuSH is a way for services that subscribe to updates from your blog (think Google Reader, Bloglines or Netvibes) to get updates even faster. In a nutshell, instead of having to periodically ask your blog if there are any updates they can now register to automatically receive updates each time you publish new content. In most cases these updates are sent out within a second or two of when you hit the publish button.</p>
+ <p>Today we&#8217;ve turned on PuSH support for the more than 10.5 million blogs on WordPress.com. There&#8217;s nothing to configure, it&#8217;s working right now behind the scenes to help others keep up to date with your posts.</p>
+ <p>For those using the WordPress.org software we are releasing a new PuSH plugin: <a href="http://wordpress.org/extend/plugins/pushpress/">PuSHPress</a>. This plugin differs from the current PuSH related plugins by including a built-in hub.</p>
+ <p>For more PuSH related reading check out the <a href="http://code.google.com/p/pubsubhubbub/">PubSubHubbub project site</a> and <a href="http://groups.google.com/group/pubsubhubbub?pli=1">Google Group</a>. And if you really want to geek out there&#8217;s always the <a href="http://pubsubhubbub.googlecode.com/svn/trunk/pubsubhubbub-core-0.3.html">PubSubHubbub Spec</a> <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
+ <br /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/en.blog.wordpress.com/3857/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/en.blog.wordpress.com/3857/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/en.blog.wordpress.com/3857/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=en.blog.wordpress.com&blog=3584907&post=3857&subd=en.blog&ref=&feed=1" />]]></content:encoded>
+ <wfw:commentRss>http://en.blog.wordpress.com/2010/03/03/rub-a-dub-dub-in-the-pubsubhubbub/feed/</wfw:commentRss>
+
+ <slash:comments>96</slash:comments>
+
+ <media:content url="http://1.gravatar.com/avatar/582b66ad5ae1b69c7601a990cb9a661a?s=96&#38;d=identicon" medium="image">
+ <media:title type="html">josephscott</media:title>
+ </media:content>
+ </item>
+ </channel>
+</rss>
+EXAMPLE6;
+
+$_example7 = <<<EXAMPLE7
+<?xml version="1.0" encoding="UTF-8"?>
+ <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:posterous="http://posterous.com/help/rss/1.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
+ <channel>
+ <title>evanpro's posterous</title>
+ <link>http://evanpro.posterous.com</link>
+ <description>Most recent posts at evanpro's posterous</description>
+ <generator>posterous.com</generator>
+ <link type="application/json" xmlns="http://www.w3.org/2005/Atom" rel="http://api.friendfeed.com/2008/03#sup" href="http://posterous.com/api/sup_update#56bcc5eb7"/>
+ <atom:link rel="self" href="http://evanpro.posterous.com/rss.xml"/>
+ <atom:link rel="hub" href="http://posterous.superfeedr.com"/>
+ <item>
+ <pubDate>Sat, 20 Mar 2010 07:32:31 -0700</pubDate>
+ <title>Checking out captain bones</title>
+ <link>http://evanpro.posterous.com/checking-out-captain-bones</link>
+ <guid>http://evanpro.posterous.com/checking-out-captain-bones</guid>
+ <description>
+ <![CDATA[<p>
+ <p>Bones!</p>
+
+ </p>
+
+ <p><a href="http://evanpro.posterous.com/checking-out-captain-bones">Permalink</a>
+
+ | <a href="http://evanpro.posterous.com/checking-out-captain-bones#comment">Leave a comment&nbsp;&nbsp;&raquo;</a>
+
+ </p>]]>
+ </description>
+ <posterous:author>
+ <posterous:userImage>http://files.posterous.com/user_profile_pics/480326/2009-08-05-142447.jpg</posterous:userImage>
+ <posterous:profileUrl>http://posterous.com/people/3sDslhaepotz</posterous:profileUrl>
+ <posterous:firstName>Evan</posterous:firstName>
+ <posterous:lastnNme>Prodromou</posterous:lastnNme>
+ <posterous:nickName>evanpro</posterous:nickName>
+ <posterous:displayName>Evan Prodromou</posterous:displayName>
+ </posterous:author>
+ </item>
+ </channel>
+</rss>
+EXAMPLE7;
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 0246065a7..d58684efb 100644
--- a/theme/base/css/display.css
+++ b/theme/base/css/display.css
@@ -1,8 +1,8 @@
/** theme: base
*
* @package StatusNet
- * @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @author Sarven Capadisli <csarven@status.net>
+ * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -1284,7 +1284,18 @@ height:16px;
position:relative;
padding-left:16px;
}
-#attachments .attachment {
+.notice .attachment.more {
+text-indent:-9999px;
+width:16px;
+height:16px;
+display:inline-block;
+overflow:hidden;
+vertical-align:middle;
+margin-left:4px;
+}
+
+#attachments .attachment,
+.notice .attachment.more {
padding-left:0;
}
.notice .attachment img {
@@ -1326,7 +1337,7 @@ margin-bottom:0;
padding:11px;
min-height:auto;
}
-#jOverlayContent .external span {
+#jOverlayContent .entry-title {
display:block;
margin-bottom:11px;
}
diff --git a/theme/base/css/thickbox.css b/theme/base/css/thickbox.css
deleted file mode 100644
index d24b9bedf..000000000
--- a/theme/base/css/thickbox.css
+++ /dev/null
@@ -1,163 +0,0 @@
-/* ----------------------------------------------------------------------------------------------------------------*/
-/* ---------->>> global settings needed for thickbox <<<-----------------------------------------------------------*/
-/* ----------------------------------------------------------------------------------------------------------------*/
-*{padding: 0; margin: 0;}
-
-/* ----------------------------------------------------------------------------------------------------------------*/
-/* ---------->>> thickbox specific link and font settings <<<------------------------------------------------------*/
-/* ----------------------------------------------------------------------------------------------------------------*/
-#TB_window {
- font: 12px Arial, Helvetica, sans-serif;
- color: #333333;
-}
-
-#TB_secondLine {
- font: 10px Arial, Helvetica, sans-serif;
- color:#666666;
-}
-
-#TB_window a:link {color: #666666;}
-#TB_window a:visited {color: #666666;}
-#TB_window a:hover {color: #000;}
-#TB_window a:active {color: #666666;}
-#TB_window a:focus{color: #666666;}
-
-/* ----------------------------------------------------------------------------------------------------------------*/
-/* ---------->>> thickbox settings <<<-----------------------------------------------------------------------------*/
-/* ----------------------------------------------------------------------------------------------------------------*/
-#TB_overlay {
- position: fixed;
- z-index:100;
- top: 0px;
- left: 0px;
- height:100%;
- width:100%;
-}
-
-.TB_overlayMacFFBGHack {background: url(macFFBgHack.png) repeat;}
-.TB_overlayBG {
- background-color:#000;
- filter:alpha(opacity=75);
- -moz-opacity: 0.75;
- opacity: 0.75;
-}
-
-* html #TB_overlay { /* ie6 hack */
- position: absolute;
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
-}
-
-#TB_window {
- position: fixed;
- background: #ffffff;
- z-index: 102;
- color:#000000;
- display:none;
- border: 4px solid #525252;
- text-align:left;
- top:50%;
- left:50%;
-}
-
-* html #TB_window { /* ie6 hack */
-position: absolute;
-margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
-}
-
-#TB_window img#TB_Image {
- display:block;
- margin: 15px 0 0 15px;
- border-right: 1px solid #ccc;
- border-bottom: 1px solid #ccc;
- border-top: 1px solid #666;
- border-left: 1px solid #666;
-}
-
-#TB_caption{
- height:25px;
- padding:7px 30px 10px 25px;
- float:left;
-}
-
-#TB_closeWindow{
- height:25px;
- padding:11px 25px 10px 0;
- float:right;
-}
-
-#TB_closeAjaxWindow{
- padding:7px 10px 5px 0;
- margin-bottom:1px;
- text-align:right;
- float:right;
-}
-
-#TB_ajaxWindowTitle{
- float:left;
- padding:7px 0 5px 10px;
- margin-bottom:1px;
-}
-
-#TB_title{
- background-color:#e8e8e8;
- height:27px;
-}
-
-#TB_ajaxContent{
- clear:both;
- padding:2px 15px 15px 15px;
- overflow:auto;
- text-align:left;
- line-height:1.4em;
-}
-
-#TB_ajaxContent.TB_modal{
- padding:15px;
-}
-
-#TB_ajaxContent p{
- padding:5px 0px 5px 0px;
-}
-
-#TB_load{
- position: fixed;
- display:none;
- height:13px;
- width:208px;
- z-index:103;
- top: 50%;
- left: 50%;
- margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
-}
-
-* html #TB_load { /* ie6 hack */
-position: absolute;
-margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
-}
-
-#TB_HideSelect{
- z-index:99;
- position:fixed;
- top: 0;
- left: 0;
- background-color:#fff;
- border:none;
- filter:alpha(opacity=0);
- -moz-opacity: 0;
- opacity: 0;
- height:100%;
- width:100%;
-}
-
-* html #TB_HideSelect { /* ie6 hack */
- position: absolute;
- height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
-}
-
-#TB_iframeContent{
- clear:both;
- border:none;
- margin-bottom:-1px;
- margin-top:1px;
- _margin-bottom:1px;
-}
diff --git a/theme/base/images/icons/icons-01.gif b/theme/base/images/icons/icons-01.gif
index bf0f1230e..e0850aa88 100644
--- a/theme/base/images/icons/icons-01.gif
+++ b/theme/base/images/icons/icons-01.gif
Binary files differ
diff --git a/theme/biz/css/display.css b/theme/biz/css/display.css
index f133ac30b..3e97444f1 100644
--- a/theme/biz/css/display.css
+++ b/theme/biz/css/display.css
@@ -22,7 +22,7 @@ background:#144A6E url(../images/illustrations/illu_pattern-01.png) repeat-x;
}
address {
-margin-right:7.18%;
+margin-right:5.7%;
}
input, textarea, select {
diff --git a/theme/biz/logo.png b/theme/biz/logo.png
index 550d373fe..cf1839194 100644
--- a/theme/biz/logo.png
+++ b/theme/biz/logo.png
Binary files differ
diff --git a/theme/cloudy/css/display.css b/theme/cloudy/css/display.css
index 285c2ad83..5bc32e6d9 100644
--- a/theme/cloudy/css/display.css
+++ b/theme/cloudy/css/display.css
@@ -1554,7 +1554,8 @@ display:none;
}
#public #core,
-#showstream #core {
+#showstream #core,
+#showgroup #core {
margin-top:10em;
}
#public.user_in #core,
diff --git a/theme/cloudy/logo.png b/theme/cloudy/logo.png
index 550d373fe..cf1839194 100644
--- a/theme/cloudy/logo.png
+++ b/theme/cloudy/logo.png
Binary files differ
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index be341813a..d7f15cc46 100644
--- a/theme/default/css/display.css
+++ b/theme/default/css/display.css
@@ -2,7 +2,7 @@
*
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -213,7 +213,7 @@ background-color:transparent;
}
#wrap form.processing input.submit,
-.entity_actions a.processing,
+#content a.processing,
.dialogbox.processing .submit_dialogbox {
background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
}
@@ -410,6 +410,9 @@ background-position: 0 -1714px;
.notice .attachment {
background-position:0 -394px;
}
+.notice .attachment.more {
+background-position:0 -2770px;
+}
#attachments .attachment {
background:none;
}
@@ -432,10 +435,12 @@ background-position:0 -1582px;
background-position:0 -1648px;
}
+.notices .attachment.more,
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
}
+.notices li:hover .attachment.more,
.notices li:hover div.entry-content,
.notices li:hover div.notice-options {
opacity:1;
@@ -443,6 +448,7 @@ opacity:1;
.opaque {
opacity:1 !important;
}
+.attachment.more,
.notice-options a,
.notice-options input {
font-family:sans-serif;
@@ -450,6 +456,12 @@ box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
+.attachment.more:focus {
+box-shadow:none;
+-moz-box-shadow:none;
+-webkit-box-shadow:none;
+outline:none;
+}
#content .notices li:hover,
#content .applications li:hover,
#content tbody tr:hover {
diff --git a/theme/h4ck3r/logo.png b/theme/h4ck3r/logo.png
index 550d373fe..cf1839194 100644
--- a/theme/h4ck3r/logo.png
+++ b/theme/h4ck3r/logo.png
Binary files differ
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index db85408eb..d9f39e780 100644
--- a/theme/identica/css/display.css
+++ b/theme/identica/css/display.css
@@ -2,7 +2,7 @@
*
* @package StatusNet
* @author Sarven Capadisli <csarven@status.net>
- * @copyright 2009 StatusNet, Inc.
+ * @copyright 2009-2010 StatusNet, Inc.
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -214,7 +214,7 @@ background-color:transparent;
}
#wrap form.processing input.submit,
-.entity_actions a.processing,
+#content a.processing,
.dialogbox.processing .submit_dialogbox {
background:#FFFFFF url(../../base/images/icons/icon_processing.gif) no-repeat 47% 47%;
}
@@ -409,6 +409,9 @@ background-position: 0 -1714px;
.notice .attachment {
background-position:0 -394px;
}
+.notice .attachment.more {
+background-position:0 -2770px;
+}
#attachments .attachment {
background:none;
}
@@ -431,10 +434,12 @@ background-position:0 -1582px;
background-position:0 -1648px;
}
+.notices .attachment.more,
.notices div.entry-content,
.notices div.notice-options {
opacity:0.4;
}
+.notices li:hover .attachment.more,
.notices li:hover div.entry-content,
.notices li:hover div.notice-options {
opacity:1;
@@ -442,6 +447,7 @@ opacity:1;
.opaque {
opacity:1 !important;
}
+.attachment.more,
.notice-options a,
.notice-options input {
font-family:sans-serif;
@@ -449,6 +455,12 @@ box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-moz-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
-webkit-box-shadow:3px 3px 3px rgba(194, 194, 194, 0.3);
}
+.attachment.more:focus {
+box-shadow:none;
+-moz-box-shadow:none;
+-webkit-box-shadow:none;
+outline:none;
+}
#content .notices li:hover,
#content .applications li:hover,
#content tbody tr:hover {