summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README2
-rw-r--r--actions/accessadminpanel.php24
-rw-r--r--actions/all.php10
-rw-r--r--actions/apiaccountupdateprofile.php4
-rw-r--r--actions/apigroupshow.php29
-rw-r--r--actions/apimediaupload.php141
-rw-r--r--actions/apioauthauthorize.php4
-rw-r--r--actions/apistatusnetconfig.php24
-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/confirmaddress.php2
-rw-r--r--actions/deleteuser.php10
-rw-r--r--actions/foaf.php4
-rw-r--r--actions/foafgroup.php6
-rw-r--r--actions/invite.php3
-rw-r--r--actions/othersettings.php2
-rw-r--r--actions/public.php1
-rw-r--r--actions/recoverpassword.php29
-rw-r--r--actions/replies.php1
-rw-r--r--actions/showfavorites.php1
-rw-r--r--actions/shownotice.php20
-rw-r--r--actions/tag.php1
-rw-r--r--actions/useradminpanel.php3
-rw-r--r--actions/version.php3
-rw-r--r--classes/File.php8
-rw-r--r--classes/Group_alias.php2
-rw-r--r--classes/Notice.php26
-rw-r--r--classes/Profile.php3
-rw-r--r--classes/Profile_role.php1
-rw-r--r--classes/Safe_DataObject.php19
-rw-r--r--classes/User.php1
-rw-r--r--classes/User_group.php19
-rw-r--r--classes/User_username.php2
-rw-r--r--config.php.sample4
-rw-r--r--htaccess.sample5
-rw-r--r--lib/action.php53
-rw-r--r--lib/activity.php52
-rw-r--r--lib/adminpanelaction.php51
-rw-r--r--lib/apiaction.php71
-rw-r--r--lib/apiauth.php14
-rw-r--r--lib/atom10feed.php2
-rw-r--r--lib/authenticationplugin.php68
-rw-r--r--lib/authorizationplugin.php2
-rw-r--r--lib/command.php29
-rw-r--r--lib/commandinterpreter.php11
-rw-r--r--lib/default.php1
-rw-r--r--lib/deluserqueuehandler.php95
-rw-r--r--lib/htmloutputter.php55
-rw-r--r--lib/imagefile.php155
-rw-r--r--lib/iomaster.php2
-rw-r--r--lib/language.php1
-rw-r--r--lib/mail.php67
-rw-r--r--lib/mediafile.php2
-rw-r--r--lib/messageform.php2
-rw-r--r--lib/mysqlschema.php236
-rw-r--r--lib/noticeform.php2
-rw-r--r--lib/noticelist.php12
-rw-r--r--lib/pgsqlschema.php38
-rw-r--r--lib/queuemanager.php9
-rw-r--r--lib/router.php6
-rw-r--r--lib/schema.php6
-rw-r--r--lib/subs.php2
-rw-r--r--lib/userprofile.php11
-rw-r--r--lib/util.php10
-rw-r--r--locale/ar/LC_MESSAGES/statusnet.po762
-rw-r--r--locale/arz/LC_MESSAGES/statusnet.po642
-rw-r--r--locale/bg/LC_MESSAGES/statusnet.po636
-rw-r--r--locale/br/LC_MESSAGES/statusnet.po6102
-rw-r--r--locale/ca/LC_MESSAGES/statusnet.po643
-rw-r--r--locale/cs/LC_MESSAGES/statusnet.po626
-rw-r--r--locale/de/LC_MESSAGES/statusnet.po1324
-rw-r--r--locale/el/LC_MESSAGES/statusnet.po622
-rw-r--r--locale/en_GB/LC_MESSAGES/statusnet.po638
-rw-r--r--locale/es/LC_MESSAGES/statusnet.po643
-rw-r--r--locale/fa/LC_MESSAGES/statusnet.po641
-rw-r--r--locale/fi/LC_MESSAGES/statusnet.po635
-rw-r--r--locale/fr/LC_MESSAGES/statusnet.po671
-rw-r--r--locale/ga/LC_MESSAGES/statusnet.po630
-rw-r--r--locale/he/LC_MESSAGES/statusnet.po630
-rw-r--r--locale/hsb/LC_MESSAGES/statusnet.po644
-rw-r--r--locale/ia/LC_MESSAGES/statusnet.po645
-rw-r--r--locale/is/LC_MESSAGES/statusnet.po630
-rw-r--r--locale/it/LC_MESSAGES/statusnet.po656
-rw-r--r--locale/ja/LC_MESSAGES/statusnet.po643
-rw-r--r--locale/ko/LC_MESSAGES/statusnet.po631
-rw-r--r--locale/mk/LC_MESSAGES/statusnet.po670
-rw-r--r--locale/nb/LC_MESSAGES/statusnet.po1044
-rw-r--r--locale/nl/LC_MESSAGES/statusnet.po671
-rw-r--r--locale/nn/LC_MESSAGES/statusnet.po631
-rw-r--r--locale/pl/LC_MESSAGES/statusnet.po661
-rw-r--r--locale/pt/LC_MESSAGES/statusnet.po645
-rw-r--r--locale/pt_BR/LC_MESSAGES/statusnet.po645
-rw-r--r--locale/ru/LC_MESSAGES/statusnet.po661
-rw-r--r--locale/statusnet.po593
-rw-r--r--locale/sv/LC_MESSAGES/statusnet.po666
-rw-r--r--locale/te/LC_MESSAGES/statusnet.po641
-rw-r--r--locale/tr/LC_MESSAGES/statusnet.po626
-rw-r--r--locale/uk/LC_MESSAGES/statusnet.po694
-rw-r--r--locale/vi/LC_MESSAGES/statusnet.po629
-rw-r--r--locale/zh_CN/LC_MESSAGES/statusnet.po631
-rw-r--r--locale/zh_TW/LC_MESSAGES/statusnet.po624
-rw-r--r--plugins/Autocomplete/jquery-autocomplete/indicator.gifbin0 -> 673 bytes
-rw-r--r--plugins/CasAuthentication/CasAuthenticationPlugin.php1
-rw-r--r--plugins/CasAuthentication/caslogin.php15
-rw-r--r--plugins/CasAuthentication/extlib/CAS.php3086
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php378
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php496
-rw-r--r--plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php374
-rw-r--r--plugins/CasAuthentication/extlib/CAS/client.php552
-rw-r--r--plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php277
-rw-r--r--plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php499
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/catalan.php54
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/english.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/french.php54
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/german.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/greek.php52
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/japanese.php12
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/languages.php46
-rw-r--r--plugins/CasAuthentication/extlib/CAS/languages/spanish.php54
-rw-r--r--plugins/Comet/CometPlugin.php2
-rw-r--r--plugins/Facebook/FacebookPlugin.php2
-rw-r--r--plugins/Facebook/facebookaction.php2
-rw-r--r--plugins/Imap/ImapPlugin.php2
-rw-r--r--plugins/LdapAuthentication/LdapAuthenticationPlugin.php55
-rw-r--r--plugins/LdapAuthentication/README5
-rw-r--r--plugins/LdapAuthorization/LdapAuthorizationPlugin.php14
-rw-r--r--plugins/LdapAuthorization/README5
-rw-r--r--plugins/MemcachedPlugin.php223
-rw-r--r--plugins/Minify/MinifyPlugin.php6
-rw-r--r--plugins/OStatus/OStatusPlugin.php4
-rw-r--r--plugins/OStatus/actions/ostatussub.php5
-rw-r--r--plugins/OStatus/actions/usersalmon.php3
-rw-r--r--plugins/OStatus/actions/userxrd.php15
-rw-r--r--plugins/OStatus/classes/FeedSub.php3
-rw-r--r--plugins/OStatus/classes/HubSub.php2
-rw-r--r--plugins/OStatus/classes/Magicsig.php114
-rw-r--r--plugins/OStatus/classes/Ostatus_profile.php233
-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/lib/discovery.php89
-rw-r--r--plugins/OStatus/lib/discoveryhints.php182
-rw-r--r--plugins/OStatus/lib/feeddiscovery.php8
-rw-r--r--plugins/OStatus/lib/linkheader.php63
-rw-r--r--plugins/OStatus/lib/magicenvelope.php21
-rw-r--r--plugins/OStatus/lib/xrdaction.php8
-rw-r--r--plugins/OStatus/scripts/testfeed.php89
-rw-r--r--plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php64
-rw-r--r--plugins/OpenID/OpenIDPlugin.php11
-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/Orbited/OrbitedPlugin.php4
-rw-r--r--plugins/README-plugins21
-rw-r--r--plugins/Realtime/RealtimePlugin.php4
-rw-r--r--plugins/Realtime/realtimeupdate.js2
-rw-r--r--plugins/Recaptcha/RecaptchaPlugin.php14
-rw-r--r--plugins/ReverseUsernameAuthentication/README5
-rw-r--r--plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php7
-rw-r--r--plugins/TabFocus/TabFocusPlugin.php57
-rw-r--r--plugins/TabFocus/tabfocus.js7
-rwxr-xr-xplugins/TwitterBridge/daemons/synctwitterfriends.php2
-rw-r--r--plugins/TwitterBridge/twitter.php9
-rwxr-xr-xscripts/fixup_utf8.php2
-rwxr-xr-xscripts/useremail.php25
-rw-r--r--theme/base/css/display.css4
-rw-r--r--theme/base/css/ie6.css10
-rw-r--r--theme/default/css/display.css2
-rw-r--r--theme/identica/css/display.css2
189 files changed, 35965 insertions, 16981 deletions
diff --git a/README b/README
index daa393cbe..45b72e9ac 100644
--- a/README
+++ b/README
@@ -690,7 +690,7 @@ instructions; read to the end first before trying them.
9. Copy htaccess.sample to .htaccess in the new directory. Change the
RewriteBase to use the correct path.
10. Rebuild the database. (You can safely skip this step and go to #12
- if you're upgrading from another 0.8.x version).
+ if you're upgrading from another 0.9.x version).
NOTE: this step is destructive and cannot be
reversed. YOU CAN EASILY DESTROY YOUR SITE WITH THIS STEP. Don't
diff --git a/actions/accessadminpanel.php b/actions/accessadminpanel.php
index 4768e2faf..73354e97a 100644
--- a/actions/accessadminpanel.php
+++ b/actions/accessadminpanel.php
@@ -51,6 +51,7 @@ class AccessadminpanelAction extends AdminPanelAction
function title()
{
+ // TRANS: Page title
return _('Access');
}
@@ -62,6 +63,7 @@ class AccessadminpanelAction extends AdminPanelAction
function getInstructions()
{
+ // TRANS: Page notice
return _('Site access settings');
}
@@ -155,24 +157,34 @@ class AccessAdminPanelForm extends AdminForm
function formData()
{
$this->out->elementStart('fieldset', array('id' => 'settings_admin_access'));
+ // TRANS: Form legend for registration form.
$this->out->element('legend', null, _('Registration'));
$this->out->elementStart('ul', 'form_data');
$this->li();
- $this->out->checkbox('private', _('Private'),
+ // TRANS: Checkbox instructions for admin setting "Private"
+ $instructions = _('Prohibit anonymous users (not logged in) from viewing site?');
+ // TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+ $this->out->checkbox('private', _m('LABEL', 'Private'),
(bool) $this->value('private'),
- _('Prohibit anonymous users (not logged in) from viewing site?'));
+ $instructions);
$this->unli();
$this->li();
+ // TRANS: Checkbox instructions for admin setting "Invite only"
+ $instructions = _('Make registration invitation only.');
+ // TRANS: Checkbox label for configuring site as invite only.
$this->out->checkbox('inviteonly', _('Invite only'),
(bool) $this->value('inviteonly'),
- _('Make registration invitation only.'));
+ $instructions);
$this->unli();
$this->li();
+ // TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+ $instructions = _('Disable new registrations.');
+ // TRANS: Checkbox label for disabling new user registrations.
$this->out->checkbox('closed', _('Closed'),
(bool) $this->value('closed'),
- _('Disable new registrations.'));
+ $instructions);
$this->unli();
$this->out->elementEnd('ul');
$this->out->elementEnd('fieldset');
@@ -186,7 +198,9 @@ class AccessAdminPanelForm extends AdminForm
function formActions()
{
- $this->out->submit('submit', _('Save'), 'submit', null, _('Save access settings'));
+ // TRANS: Title / tooltip for button to save access settings in site admin panel
+ $title = _('Save access settings');
+ $this->out->submit('submit', _m('BUTTON', 'Save'), 'submit', null, $title);
}
}
diff --git a/actions/all.php b/actions/all.php
index 6be0c00e3..8c22e6f5f 100644
--- a/actions/all.php
+++ b/actions/all.php
@@ -60,6 +60,7 @@ class AllAction extends ProfileAction
}
if ($this->page > 1 && $this->notice->N == 0) {
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'), $code = 404);
}
@@ -81,8 +82,10 @@ class AllAction extends ProfileAction
function title()
{
if ($this->page > 1) {
+ // TRANS: Page title. %1$s is user nickname, %2$d is page number
return sprintf(_('%1$s and friends, page %2$d'), $this->user->nickname, $this->page);
} else {
+ // TRANS: Page title. %1$s is user nickname
return sprintf(_("%s and friends"), $this->user->nickname);
}
}
@@ -96,6 +99,7 @@ class AllAction extends ProfileAction
'nickname' =>
$this->user->nickname)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (RSS 1.0)'), $this->user->nickname)),
new Feed(Feed::RSS2,
common_local_url(
@@ -104,6 +108,7 @@ class AllAction extends ProfileAction
'id' => $this->user->nickname
)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (RSS 2.0)'), $this->user->nickname)),
new Feed(Feed::ATOM,
common_local_url(
@@ -112,6 +117,7 @@ class AllAction extends ProfileAction
'id' => $this->user->nickname
)
),
+ // TRANS: %1$s is user nickname
sprintf(_('Feed for friends of %s (Atom)'), $this->user->nickname))
);
}
@@ -124,6 +130,7 @@ class AllAction extends ProfileAction
function showEmptyListMessage()
{
+ // TRANS: %1$s is user nickname
$message = sprintf(_('This is the timeline for %s and friends but no one has posted anything yet.'), $this->user->nickname) . ' ';
if (common_logged_in()) {
@@ -131,6 +138,7 @@ class AllAction extends ProfileAction
if ($this->user->id === $current_user->id) {
$message .= _('Try subscribing to more people, [join a group](%%action.groups%%) or post something yourself.');
} else {
+ // TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
$message .= sprintf(_('You can try to [nudge %1$s](../%2$s) from his profile or [post something to his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s).'), $this->user->nickname, $this->user->nickname, '@' . $this->user->nickname);
}
} else {
@@ -166,8 +174,10 @@ class AllAction extends ProfileAction
{
$user = common_current_user();
if ($user && ($user->id == $this->user->id)) {
+ // TRANS: H1 text
$this->element('h1', null, _("You and friends"));
} else {
+ // TRANS: H1 text. %1$s is user nickname
$this->element('h1', null, sprintf(_('%s and friends'), $this->user->nickname));
}
}
diff --git a/actions/apiaccountupdateprofile.php b/actions/apiaccountupdateprofile.php
index fd4384a25..9b371ea95 100644
--- a/actions/apiaccountupdateprofile.php
+++ b/actions/apiaccountupdateprofile.php
@@ -115,11 +115,11 @@ class ApiAccountUpdateProfileAction extends ApiAuthAction
$original = clone($profile);
- if (empty($this->name)) {
+ if (!empty($this->name)) {
$profile->fullname = $this->name;
}
- if (empty($this->url)) {
+ if (!empty($this->url)) {
$profile->homepage = $this->url;
}
diff --git a/actions/apigroupshow.php b/actions/apigroupshow.php
index 95d6f95af..5745a81f4 100644
--- a/actions/apigroupshow.php
+++ b/actions/apigroupshow.php
@@ -45,6 +45,7 @@ require_once INSTALLDIR . '/lib/apiprivateauth.php';
* @author Evan Prodromou <evan@status.net>
* @author Jeffery To <jeffery.to@gmail.com>
* @author Zach Copley <zach@status.net>
+ * @author Michele <macno@macno.org>
* @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
* @link http://status.net/
*/
@@ -68,6 +69,24 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
$this->group = $this->getTargetGroup($this->arg('id'));
+ if (empty($this->group)) {
+ $alias = Group_alias::staticGet(
+ 'alias',
+ common_canonical_nickname($this->arg('id'))
+ );
+ if (!empty($alias)) {
+ $args = array('id' => $alias->group_id, 'format' => $this->format);
+ common_redirect(common_local_url('ApiGroupShow', $args), 301);
+ } else {
+ $this->clientError(
+ _('Group not found!'),
+ 404,
+ $this->format
+ );
+ }
+ return;
+ }
+
return true;
}
@@ -85,15 +104,6 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
{
parent::handle($args);
- if (empty($this->group)) {
- $this->clientError(
- _('Group not found!'),
- 404,
- $this->format
- );
- return;
- }
-
switch($this->format) {
case 'xml':
$this->showSingleXmlGroup($this->group);
@@ -105,7 +115,6 @@ class ApiGroupShowAction extends ApiPrivateAuthAction
$this->clientError(_('API method not found.'), 404, $this->format);
break;
}
-
}
/**
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/apioauthauthorize.php b/actions/apioauthauthorize.php
index 2caa8d20b..e7c6f3761 100644
--- a/actions/apioauthauthorize.php
+++ b/actions/apioauthauthorize.php
@@ -156,7 +156,7 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
if (!$result) {
common_log_db_error($appUser, 'DELETE', __FILE__);
- throw new ServerException(_('DB error deleting OAuth app user.'));
+ throw new ServerException(_('Database error deleting OAuth application user.'));
return;
}
}
@@ -182,7 +182,7 @@ class ApiOauthAuthorizeAction extends ApiOauthAction
if (!$result) {
common_log_db_error($appUser, 'INSERT', __FILE__);
- throw new ServerException(_('DB error inserting OAuth app user.'));
+ throw new ServerException(_('Database error inserting OAuth application user.'));
return;
}
diff --git a/actions/apistatusnetconfig.php b/actions/apistatusnetconfig.php
index 51400dfc9..66b23c02d 100644
--- a/actions/apistatusnetconfig.php
+++ b/actions/apistatusnetconfig.php
@@ -50,13 +50,17 @@ if (!defined('STATUSNET')) {
class ApiStatusnetConfigAction extends ApiAction
{
var $keys = array(
- 'site' => array('name', 'server', 'theme', 'path', 'fancy', 'language',
- 'email', 'broughtby', 'broughtbyurl', 'closed',
- 'inviteonly', 'private','textlimit'),
- 'license' => array('url', 'title', 'image'),
+ 'site' => array('name', 'server', 'theme', 'path', 'logo', 'fancy', 'language',
+ 'email', 'broughtby', 'broughtbyurl', 'timezone', 'closed',
+ 'inviteonly', 'private', 'textlimit', 'ssl', 'sslserver', 'shorturllength'),
+ 'license' => array('type', 'owner', 'url', 'title', 'image'),
'nickname' => array('featured'),
+ 'profile' => array('biolimit'),
+ 'group' => array('desclimit'),
+ 'notice' => array('contentlimit'),
'throttle' => array('enabled', 'count', 'timespan'),
- 'xmpp' => array('enabled', 'server', 'user')
+ 'xmpp' => array('enabled', 'server', 'port', 'user'),
+ 'integration' => array('source')
);
/**
@@ -93,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) {
@@ -106,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/confirmaddress.php b/actions/confirmaddress.php
index 6fd74f3ff..cc8351d8d 100644
--- a/actions/confirmaddress.php
+++ b/actions/confirmaddress.php
@@ -141,7 +141,7 @@ class ConfirmaddressAction extends Action
function title()
{
- return _('Confirm Address');
+ return _('Confirm address');
}
/**
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/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/invite.php b/actions/invite.php
index d0ed64ec9..54b2de62a 100644
--- a/actions/invite.php
+++ b/actions/invite.php
@@ -194,7 +194,8 @@ class InviteAction extends CurrentUserDesignAction
_('Optionally add a personal message to the invitation.'));
$this->elementEnd('li');
$this->elementEnd('ul');
- $this->submit('send', _('Send'));
+ // TRANS: Send button for inviting friends
+ $this->submit('send', _m('BUTTON', 'Send'));
$this->elementEnd('fieldset');
$this->elementEnd('form');
}
diff --git a/actions/othersettings.php b/actions/othersettings.php
index 0de7cd908..10e9873b3 100644
--- a/actions/othersettings.php
+++ b/actions/othersettings.php
@@ -57,7 +57,7 @@ class OthersettingsAction extends AccountSettingsAction
function title()
{
- return _('Other Settings');
+ return _('Other settings');
}
/**
diff --git a/actions/public.php b/actions/public.php
index 50278bfce..0b3b5fde8 100644
--- a/actions/public.php
+++ b/actions/public.php
@@ -94,6 +94,7 @@ class PublicAction extends Action
}
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/recoverpassword.php b/actions/recoverpassword.php
index dcff35f6e..f9956897f 100644
--- a/actions/recoverpassword.php
+++ b/actions/recoverpassword.php
@@ -21,7 +21,7 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { exit(1); }
# You have 24 hours to claim your password
-define(MAX_RECOVERY_TIME, 24 * 60 * 60);
+define('MAX_RECOVERY_TIME', 24 * 60 * 60);
class RecoverpasswordAction extends Action
{
@@ -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/replies.php b/actions/replies.php
index 164c328db..4ff1b7a8d 100644
--- a/actions/replies.php
+++ b/actions/replies.php
@@ -89,6 +89,7 @@ class RepliesAction extends OwnerDesignAction
NOTICES_PER_PAGE + 1);
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/showfavorites.php b/actions/showfavorites.php
index f2d082293..5b85de683 100644
--- a/actions/showfavorites.php
+++ b/actions/showfavorites.php
@@ -134,6 +134,7 @@ class ShowfavoritesAction extends OwnerDesignAction
}
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/shownotice.php b/actions/shownotice.php
index d09100f67..a23027f7c 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;
@@ -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/tag.php b/actions/tag.php
index e91df6ea9..ee9617b66 100644
--- a/actions/tag.php
+++ b/actions/tag.php
@@ -48,6 +48,7 @@ class TagAction extends Action
$this->notice = Notice_tag::getStream($this->tag, (($this->page-1)*NOTICES_PER_PAGE), NOTICES_PER_PAGE + 1);
if($this->page > 1 && $this->notice->N == 0){
+ // TRANS: Server error when page not found (404)
$this->serverError(_('No such page'),$code=404);
}
diff --git a/actions/useradminpanel.php b/actions/useradminpanel.php
index 6813222f5..ee9c23076 100644
--- a/actions/useradminpanel.php
+++ b/actions/useradminpanel.php
@@ -55,7 +55,8 @@ class UseradminpanelAction extends AdminPanelAction
function title()
{
- return _('User');
+ // TRANS: User admin panel title
+ return _m('TITLE', 'User');
}
/**
diff --git a/actions/version.php b/actions/version.php
index c1f673c45..b6593e5ed 100644
--- a/actions/version.php
+++ b/actions/version.php
@@ -266,5 +266,6 @@ class VersionAction extends Action
'Craig Andrews',
'mEDI',
'Brett Taylor',
- 'Brigitte Schuster');
+ 'Brigitte Schuster',
+ 'Brion Vibber');
}
diff --git a/classes/File.php b/classes/File.php
index ba8332841..33273bbdc 100644
--- a/classes/File.php
+++ b/classes/File.php
@@ -194,7 +194,11 @@ class File extends Memcached_DataObject
{
require_once 'MIME/Type/Extension.php';
$mte = new MIME_Type_Extension();
- $ext = $mte->getExtension($mimetype);
+ try {
+ $ext = $mte->getExtension($mimetype);
+ } catch ( Exception $e) {
+ $ext = strtolower(preg_replace('/\W/', '', $mimetype));
+ }
$nickname = $profile->nickname;
$datestamp = strftime('%Y%m%dT%H%M%S', time());
$random = strtolower(common_confirmation_code(32));
@@ -281,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/Group_alias.php b/classes/Group_alias.php
index be3d0a6c6..c5a1895a1 100644
--- a/classes/Group_alias.php
+++ b/classes/Group_alias.php
@@ -34,7 +34,7 @@ class Group_alias extends Memcached_DataObject
public $modified; // timestamp() not_null default_CURRENT_TIMESTAMP
/* Static get */
- function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('Group_alias',$k,$v); }
+ function staticGet($k,$v=NULL) { return Memcached_DataObject::staticGet('Group_alias',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
diff --git a/classes/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 91f6e4692..eded1ff71 100644
--- a/classes/Profile.php
+++ b/classes/Profile.php
@@ -732,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..08bc6846f 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
diff --git a/classes/User.php b/classes/User.php
index 0b25b71a0..16c256535 100644
--- a/classes/User.php
+++ b/classes/User.php
@@ -213,6 +213,7 @@ class User extends Memcached_DataObject
if(! User::allowed_nickname($nickname)){
common_log(LOG_WARNING, sprintf("Attempted to register a nickname that is not allowed: %s", $profile->nickname),
__FILE__);
+ return false;
}
$profile->profileurl = common_profile_url($nickname);
diff --git a/classes/User_group.php b/classes/User_group.php
index 0460c9870..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;
@@ -483,7 +486,7 @@ class User_group extends Memcached_DataObject
$result = $group->update($orig);
if (!$result) {
common_log_db_error($group, 'UPDATE', __FILE__);
- throw new ServerException(_('Could not set group uri.'));
+ throw new ServerException(_('Could not set group URI.'));
}
}
diff --git a/classes/User_username.php b/classes/User_username.php
index 853fd5cb8..8d99cddd3 100644
--- a/classes/User_username.php
+++ b/classes/User_username.php
@@ -55,7 +55,7 @@ class User_username extends Memcached_DataObject
// now define the keys.
function keys() {
- return array('provider_name', 'username');
+ return array('provider_name' => 'K', 'username' => 'K');
}
}
diff --git a/config.php.sample b/config.php.sample
index 3d2a52bec..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';
@@ -268,6 +268,8 @@ $config['sphinx']['port'] = 3312;
// Support for file uploads (attachments),
// select supported mimetypes and quotas (in bytes)
// $config['attachments']['supported'] = array('image/png', 'application/ogg');
+// $config['attachments']['supported'] = true; //allow all file types to be uploaded
+
// $config['attachments']['file_quota'] = 5000000;
// $config['attachments']['user_quota'] = 50000000;
// $config['attachments']['monthly_quota'] = 15000000;
diff --git a/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/lib/action.php b/lib/action.php
index 9884f529c..491d7d481 100644
--- a/lib/action.php
+++ b/lib/action.php
@@ -426,39 +426,69 @@ class Action extends HTMLOutputter // lawsuit
$this->elementStart('ul', array('class' => 'nav'));
if (Event::handle('StartPrimaryNav', array($this))) {
if ($user) {
+ // TRANS: Tooltip for main menu option "Personal"
+ $tooltip = _m('TOOLTIP', 'Personal profile and friends timeline');
+ // TRANS: Main menu option when logged in for access to personal profile and friends timeline
$this->menuItem(common_local_url('all', array('nickname' => $user->nickname)),
- _('Home'), _('Personal profile and friends timeline'), false, 'nav_home');
+ _m('MENU', 'Personal'), $tooltip, false, 'nav_home');
+ // TRANS: Tooltip for main menu option "Account"
+ $tooltip = _m('TOOLTIP', 'Change your email, avatar, password, profile');
+ // TRANS: Main menu option when logged in for access to user settings
$this->menuItem(common_local_url('profilesettings'),
- _('Account'), _('Change your email, avatar, password, profile'), false, 'nav_account');
+ _('Account'), $tooltip, false, 'nav_account');
+ // TRANS: Tooltip for main menu option "Services"
+ $tooltip = _m('TOOLTIP', 'Connect to services');
+ // TRANS: Main menu option when logged in and connection are possible for access to options to connect to other services
$this->menuItem(common_local_url('oauthconnectionssettings'),
- _('Connect'), _('Connect to services'), false, 'nav_connect');
+ _('Connect'), $tooltip, false, 'nav_connect');
if ($user->hasRight(Right::CONFIGURESITE)) {
+ // TRANS: Tooltip for menu option "Admin"
+ $tooltip = _m('TOOLTIP', 'Change site configuration');
+ // TRANS: Main menu option when logged in and site admin for access to site configuration
$this->menuItem(common_local_url('siteadminpanel'),
- _('Admin'), _('Change site configuration'), false, 'nav_admin');
+ _m('MENU', 'Admin'), $tooltip, false, 'nav_admin');
}
if (common_config('invite', 'enabled')) {
+ // TRANS: Tooltip for main menu option "Invite"
+ $tooltip = _m('TOOLTIP', 'Invite friends and colleagues to join you on %s');
+ // TRANS: Main menu option when logged in and invitations are allowed for inviting new users
$this->menuItem(common_local_url('invite'),
- _('Invite'),
- sprintf(_('Invite friends and colleagues to join you on %s'),
+ _m('MENU', 'Invite'),
+ sprintf($tooltip,
common_config('site', 'name')),
false, 'nav_invitecontact');
}
+ // TRANS: Tooltip for main menu option "Logout"
+ $tooltip = _m('TOOLTIP', 'Logout from the site');
+ // TRANS: Main menu option when logged in to log out the current user
$this->menuItem(common_local_url('logout'),
- _('Logout'), _('Logout from the site'), false, 'nav_logout');
+ _m('MENU', 'Logout'), $tooltip, false, 'nav_logout');
}
else {
if (!common_config('site', 'closed')) {
+ // TRANS: Tooltip for main menu option "Register"
+ $tooltip = _m('TOOLTIP', 'Create an account');
+ // TRANS: Main menu option when not logged in to register a new account
$this->menuItem(common_local_url('register'),
- _('Register'), _('Create an account'), false, 'nav_register');
+ _m('MENU', 'Register'), $tooltip, false, 'nav_register');
}
+ // TRANS: Tooltip for main menu option "Login"
+ $tooltip = _m('TOOLTIP', 'Login to the site');
+ // TRANS: Main menu option when not logged in to log in
$this->menuItem(common_local_url('login'),
- _('Login'), _('Login to the site'), false, 'nav_login');
+ _m('MENU', 'Login'), $tooltip, false, 'nav_login');
}
+ // TRANS: Tooltip for main menu option "Help"
+ $tooltip = _m('TOOLTIP', 'Help me!');
+ // TRANS: Main menu option for help on the StatusNet site
$this->menuItem(common_local_url('doc', array('title' => 'help')),
- _('Help'), _('Help me!'), false, 'nav_help');
+ _m('MENU', 'Help'), $tooltip, false, 'nav_help');
if ($user || !common_config('site', 'private')) {
+ // TRANS: Tooltip for main menu option "Search"
+ $tooltip = _m('TOOLTIP', 'Search for people or text');
+ // TRANS: Main menu option when logged in or when the StatusNet instance is not private
$this->menuItem(common_local_url('peoplesearch'),
- _('Search'), _('Search for people or text'), false, 'nav_search');
+ _m('MENU', 'Search'), $tooltip, false, 'nav_search');
}
Event::handle('EndPrimaryNav', array($this));
}
@@ -479,6 +509,7 @@ class Action extends HTMLOutputter // lawsuit
if ($text) {
$this->elementStart('dl', array('id' => 'site_notice',
'class' => 'system_notice'));
+ // TRANS: DT element for site notice. String is hidden in default CSS.
$this->element('dt', null, _('Site notice'));
$this->elementStart('dd', null);
$this->raw($text);
diff --git a/lib/activity.php b/lib/activity.php
index 2cb80f9e1..d84eabf7c 100644
--- a/lib/activity.php
+++ b/lib/activity.php
@@ -78,7 +78,7 @@ class PoCoAddress
if (!empty($this->formatted)) {
$xs = new XMLStringer(true);
$xs->elementStart('poco:address');
- $xs->element('poco:formatted', null, $this->formatted);
+ $xs->element('poco:formatted', null, common_xml_safe_str($this->formatted));
$xs->elementEnd('poco:address');
return $xs->getString();
}
@@ -279,7 +279,7 @@ class PoCo
);
if (!empty($this->note)) {
- $xs->element('poco:note', null, $this->note);
+ $xs->element('poco:note', null, common_xml_safe_str($this->note));
}
if (!empty($this->address)) {
@@ -457,13 +457,13 @@ class ActivityUtils
// slavishly following http://atompub.org/rfc4287.html#rfc.section.4.1.3.3
- if ($type == 'text') {
+ if (empty($type) || $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');
+ $divEl = ActivityUtils::child($contentEl, 'div', 'http://www.w3.org/1999/xhtml');
if (empty($divEl)) {
return null;
}
@@ -476,7 +476,7 @@ class ActivityUtils
$text .= $doc->saveXML($child);
}
return trim($text);
- } else if (in_array(array('text/xml', 'application/xml'), $type) ||
+ } 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)) {
@@ -681,9 +681,16 @@ class ActivityObject
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);
+ $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);
@@ -805,7 +812,6 @@ class ActivityObject
return $object;
}
-
function asString($tag='activity:object')
{
$xs = new XMLStringer(true);
@@ -817,16 +823,28 @@ class ActivityObject
$xs->element(self::ID, null, $this->id);
if (!empty($this->title)) {
- $xs->element(self::TITLE, null, $this->title);
+ $xs->element(
+ self::TITLE,
+ null,
+ common_xml_safe_str($this->title)
+ );
}
if (!empty($this->summary)) {
- $xs->element(self::SUMMARY, null, $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'), $this->content);
+ $xs->element(
+ ActivityUtils::CONTENT,
+ array('type' => 'html'),
+ common_xml_safe_str($this->content)
+ );
}
if (!empty($this->link)) {
@@ -1065,15 +1083,11 @@ class Activity
$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->feed = $feed;
diff --git a/lib/adminpanelaction.php b/lib/adminpanelaction.php
index d43ea7698..a927e2333 100644
--- a/lib/adminpanelaction.php
+++ b/lib/adminpanelaction.php
@@ -69,6 +69,7 @@ class AdminPanelAction extends Action
// User must be logged in.
if (!common_logged_in()) {
+ // TRANS: Client error message
$this->clientError(_('Not logged in.'));
return false;
}
@@ -93,6 +94,7 @@ class AdminPanelAction extends Action
// User must have the right to change admin settings
if (!$user->hasRight(Right::CONFIGURESITE)) {
+ // TRANS: Client error message
$this->clientError(_('You cannot make changes to this site.'));
return false;
}
@@ -104,6 +106,7 @@ class AdminPanelAction extends Action
$name = mb_substr($name, 0, -10);
if (!self::canAdmin($name)) {
+ // TRANS: Client error message
$this->clientError(_('Changes to that panel are not allowed.'), 403);
return false;
}
@@ -134,6 +137,7 @@ class AdminPanelAction extends Action
Config::loadSettings();
$this->success = true;
+ // TRANS: Message after successful saving of administrative settings.
$this->msg = _('Settings saved.');
} catch (Exception $e) {
$this->success = false;
@@ -221,6 +225,7 @@ class AdminPanelAction extends Action
function showForm()
{
+ // TRANS: Client error message
$this->clientError(_('showForm() not implemented.'));
return;
}
@@ -250,6 +255,7 @@ class AdminPanelAction extends Action
function saveSettings()
{
+ // TRANS: Client error message
$this->clientError(_('saveSettings() not implemented.'));
return;
}
@@ -273,6 +279,7 @@ class AdminPanelAction extends Action
$result = $config->delete();
if (!$result) {
common_log_db_error($config, 'DELETE', __FILE__);
+ // TRANS: Client error message
$this->clientError(_("Unable to delete design setting."));
return null;
}
@@ -337,43 +344,67 @@ class AdminPanelNav extends Widget
if (Event::handle('StartAdminPanelNav', array($this))) {
if (AdminPanelAction::canAdmin('site')) {
- $this->out->menuItem(common_local_url('siteadminpanel'), _('Site'),
- _('Basic site configuration'), $action_name == 'siteadminpanel', 'nav_site_admin_panel');
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Basic site configuration');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('siteadminpanel'), _m('MENU', 'Site'),
+ $menu_title, $action_name == 'siteadminpanel', 'nav_site_admin_panel');
}
if (AdminPanelAction::canAdmin('design')) {
- $this->out->menuItem(common_local_url('designadminpanel'), _('Design'),
- _('Design configuration'), $action_name == 'designadminpanel', 'nav_design_admin_panel');
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Design configuration');
+ // TRANS: Menu item for site administration
+ $this->out->menuItem(common_local_url('designadminpanel'), _m('MENU', 'Design'),
+ $menu_title, $action_name == 'designadminpanel', 'nav_design_admin_panel');
}
if (AdminPanelAction::canAdmin('user')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('User configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('useradminpanel'), _('User'),
- _('User configuration'), $action_name == 'useradminpanel', 'nav_user_admin_panel');
+ $menu_title, $action_name == 'useradminpanel', 'nav_user_admin_panel');
}
if (AdminPanelAction::canAdmin('access')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Access configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('accessadminpanel'), _('Access'),
- _('Access configuration'), $action_name == 'accessadminpanel', 'nav_access_admin_panel');
+ $menu_title, $action_name == 'accessadminpanel', 'nav_access_admin_panel');
}
if (AdminPanelAction::canAdmin('paths')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Paths configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('pathsadminpanel'), _('Paths'),
- _('Paths configuration'), $action_name == 'pathsadminpanel', 'nav_paths_admin_panel');
+ $menu_title, $action_name == 'pathsadminpanel', 'nav_paths_admin_panel');
}
if (AdminPanelAction::canAdmin('sessions')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Sessions configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('sessionsadminpanel'), _('Sessions'),
- _('Sessions configuration'), $action_name == 'sessionsadminpanel', 'nav_sessions_admin_panel');
+ $menu_title, $action_name == 'sessionsadminpanel', 'nav_sessions_admin_panel');
}
if (AdminPanelAction::canAdmin('sitenotice')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Edit site notice');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('sitenoticeadminpanel'), _('Site notice'),
- _('Edit site notice'), $action_name == 'sitenoticeadminpanel', 'nav_sitenotice_admin_panel');
+ $menu_title, $action_name == 'sitenoticeadminpanel', 'nav_sitenotice_admin_panel');
}
if (AdminPanelAction::canAdmin('snapshot')) {
+ // TRANS: Menu item title/tooltip
+ $menu_title = _('Snapshots configuration');
+ // TRANS: Menu item for site administration
$this->out->menuItem(common_local_url('snapshotadminpanel'), _('Snapshots'),
- _('Snapshots configuration'), $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
+ $menu_title, $action_name == 'snapshotadminpanel', 'nav_snapshot_admin_panel');
}
Event::handle('EndAdminPanelNav', array($this));
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 32502399f..17f803a1c 100644
--- a/lib/apiauth.php
+++ b/lib/apiauth.php
@@ -294,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/authenticationplugin.php b/lib/authenticationplugin.php
index de479a576..0a3763e2e 100644
--- a/lib/authenticationplugin.php
+++ b/lib/authenticationplugin.php
@@ -69,13 +69,17 @@ abstract class AuthenticationPlugin extends Plugin
/**
* Automatically register a user when they attempt to login with valid credentials.
* User::register($data) is a very useful method for this implementation
- * @param username
+ * @param username username (that is used to login and find the user in the authentication provider) of the user to be registered
+ * @param nickname nickname of the user in the SN system. If nickname is null, then set nickname = username
* @return mixed instance of User, or false (if user couldn't be created)
*/
- function autoRegister($username)
+ function autoRegister($username, $nickname = null)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$registration_data = array();
- $registration_data['nickname'] = $username ;
+ $registration_data['nickname'] = $nickname;
return User::register($registration_data);
}
@@ -92,6 +96,21 @@ abstract class AuthenticationPlugin extends Plugin
return false;
}
+ /**
+ * Given a username, suggest what the nickname should be
+ * Used during autoregistration
+ * Useful if your usernames are ugly, and you want to suggest
+ * nice looking nicknames when users initially sign on
+ * All nicknames returned by this function should be valid
+ * implementations may want to use common_nicknamize() to ensure validity
+ * @param username
+ * @return string nickname
+ */
+ function suggestNicknameForUsername($username)
+ {
+ return common_nicknamize($username);
+ }
+
//------------Below are the methods that connect StatusNet to the implementing Auth plugin------------\\
function onInitializePlugin(){
if(!isset($this->provider_name)){
@@ -108,10 +127,22 @@ abstract class AuthenticationPlugin extends Plugin
function onAutoRegister($nickname, $provider_name, &$user)
{
if($provider_name == $this->provider_name && $this->autoregistration){
- $user = $this->autoregister($nickname);
- if($user){
- User_username::register($user,$nickname,$this->provider_name);
- return false;
+ $suggested_nickname = $this->suggestNicknameForUsername($nickname);
+ $test_user = User::staticGet('nickname', $suggested_nickname);
+ if($test_user) {
+ //someone already exists with the suggested nickname, so used the passed nickname
+ $suggested_nickname = common_nicknamize($nickname);
+ }
+ $test_user = User::staticGet('nickname', $suggested_nickname);
+ if($test_user) {
+ //someone already exists with the suggested nickname
+ //not much else we can do
+ }else{
+ $user = $this->autoRegister($nickname, $suggested_nickname);
+ if($user){
+ User_username::register($user,$nickname,$this->provider_name);
+ return false;
+ }
}
}
}
@@ -122,23 +153,30 @@ abstract class AuthenticationPlugin extends Plugin
$user_username->username=$nickname;
$user_username->provider_name=$this->provider_name;
if($user_username->find() && $user_username->fetch()){
- $username = $user_username->username;
- $authenticated = $this->checkPassword($username, $password);
+ $authenticated = $this->checkPassword($user_username->username, $password);
if($authenticated){
$authenticatedUser = User::staticGet('id', $user_username->user_id);
return false;
}
}else{
- $user = User::staticGet('nickname', $nickname);
+ //$nickname is the username used to login
+ //$suggested_nickname is the nickname the auth provider suggests for that username
+ $suggested_nickname = $this->suggestNicknameForUsername($nickname);
+ $user = User::staticGet('nickname', $suggested_nickname);
if($user){
- //make sure a different provider isn't handling this nickname
+ //make sure this user isn't claimed
$user_username = new User_username();
- $user_username->username=$nickname;
- if(!$user_username->find()){
- //no other provider claims this username, so it's safe for us to handle it
+ $user_username->user_id=$user->id;
+ $we_can_handle = false;
+ if($user_username->find()){
+ //either this provider, or another one, has already claimed this user
+ //so we cannot. Let another plugin try.
+ return;
+ }else{
+ //no other provider claims this user, so it's safe for us to handle it
$authenticated = $this->checkPassword($nickname, $password);
if($authenticated){
- $authenticatedUser = User::staticGet('nickname', $nickname);
+ $authenticatedUser = $user;
User_username::register($authenticatedUser,$nickname,$this->provider_name);
return false;
}
diff --git a/lib/authorizationplugin.php b/lib/authorizationplugin.php
index 733b0c065..07da9b2d1 100644
--- a/lib/authorizationplugin.php
+++ b/lib/authorizationplugin.php
@@ -85,7 +85,7 @@ abstract class AuthorizationPlugin extends Plugin
}
function onStartSetApiUser(&$user) {
- return $this->onStartSetUser(&$user);
+ return $this->onStartSetUser($user);
}
function onStartHasRole($profile, $name, &$has_role) {
diff --git a/lib/command.php b/lib/command.php
index 9d550550f..f7421269d 100644
--- a/lib/command.php
+++ b/lib/command.php
@@ -711,6 +711,34 @@ class LoginCommand extends Command
}
}
+class LoseCommand extends Command
+{
+
+ var $other = null;
+
+ function __construct($user, $other)
+ {
+ parent::__construct($user);
+ $this->other = $other;
+ }
+
+ function execute($channel)
+ {
+ if(!$this->other) {
+ $channel->error($this->user, _('Specify the name of the user to unsubscribe from'));
+ return;
+ }
+
+ $result = Subscription::cancel($this->getProfile($this->other), $this->user->getProfile());
+
+ if ($result) {
+ $channel->output($this->user, sprintf(_('Unsubscribed %s'), $this->other));
+ } else {
+ $channel->error($this->user, $result);
+ }
+ }
+}
+
class SubscriptionsCommand extends Command
{
function handle($channel)
@@ -793,6 +821,7 @@ class HelpCommand extends Command
"d <nickname> <text> - direct message to user\n".
"get <nickname> - get last notice from user\n".
"whois <nickname> - get profile info on user\n".
+ "lose <nickname> - force user to stop following you\n".
"fav <nickname> - add user's last notice as a 'fave'\n".
"fav #<notice_id> - add notice with the given id as a 'fave'\n".
"repeat #<notice_id> - repeat a notice with a given id\n".
diff --git a/lib/commandinterpreter.php b/lib/commandinterpreter.php
index c2add7299..fbc6174bb 100644
--- a/lib/commandinterpreter.php
+++ b/lib/commandinterpreter.php
@@ -47,6 +47,17 @@ class CommandInterpreter
} else {
return new LoginCommand($user);
}
+ case 'lose':
+ if ($arg) {
+ list($other, $extra) = $this->split_arg($arg);
+ if ($extra) {
+ return null;
+ } else {
+ return new LoseCommand($user, $other);
+ }
+ } else {
+ return null;
+ }
case 'subscribers':
if ($arg) {
return null;
diff --git a/lib/default.php b/lib/default.php
index 46d3d4774..10f3f1a97 100644
--- a/lib/default.php
+++ b/lib/default.php
@@ -282,6 +282,7 @@ $default =
'Mapstraction' => null,
'OStatus' => null,
'WikiHashtags' => null,
+ 'RSSCloud' => null,
'OpenID' => null),
),
'admin' =>
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/htmloutputter.php b/lib/htmloutputter.php
index 7315fe2ad..7786b5941 100644
--- a/lib/htmloutputter.php
+++ b/lib/htmloutputter.php
@@ -356,40 +356,47 @@ class HTMLOutputter extends XMLOutputter
if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
- $path = common_config('javascript', 'path');
+ if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
- if (empty($path)) {
- $path = common_config('site', 'path') . '/js/';
- }
+ $src = common_path($src) . '?version=' . STATUSNET_VERSION;
- if ($path[strlen($path)-1] != '/') {
- $path .= '/';
- }
+ }else{
- if ($path[0] != '/') {
- $path = '/'.$path;
- }
+ $path = common_config('javascript', 'path');
- $server = common_config('javascript', 'server');
+ if (empty($path)) {
+ $path = common_config('site', 'path') . '/js/';
+ }
- if (empty($server)) {
- $server = common_config('site', 'server');
- }
+ if ($path[strlen($path)-1] != '/') {
+ $path .= '/';
+ }
- $ssl = common_config('javascript', 'ssl');
+ if ($path[0] != '/') {
+ $path = '/'.$path;
+ }
+
+ $server = common_config('javascript', 'server');
- if (is_null($ssl)) { // null -> guess
- if (common_config('site', 'ssl') == 'always' &&
- !common_config('javascript', 'server')) {
- $ssl = true;
- } else {
- $ssl = false;
+ if (empty($server)) {
+ $server = common_config('site', 'server');
}
- }
- $protocol = ($ssl) ? 'https' : 'http';
+ $ssl = common_config('javascript', 'ssl');
- $src = $protocol.'://'.$server.$path.$src . '?version=' . STATUSNET_VERSION;
+ if (is_null($ssl)) { // null -> guess
+ if (common_config('site', 'ssl') == 'always' &&
+ !common_config('javascript', 'server')) {
+ $ssl = true;
+ } else {
+ $ssl = false;
+ }
+ }
+
+ $protocol = ($ssl) ? 'https' : 'http';
+
+ $src = $protocol.'://'.$server.$path.$src . '?version=' . STATUSNET_VERSION;
+ }
}
$this->element('script', array('type' => $type,
diff --git a/lib/imagefile.php b/lib/imagefile.php
index 6bc8e599b..2134623b1 100644
--- a/lib/imagefile.php
+++ b/lib/imagefile.php
@@ -60,6 +60,21 @@ 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_XPM && function_exists('imagecreatefromxpm')) ||
+ ($info[2] == IMAGETYPE_PNG && function_exists('imagecreatefrompng')))) {
+
+ @unlink($_FILES[$param]['tmp_name']);
+ 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,15 +112,6 @@ class ImageFile
return;
}
- if ($info[2] !== IMAGETYPE_GIF &&
- $info[2] !== IMAGETYPE_JPEG &&
- $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']);
}
@@ -146,6 +152,18 @@ class ImageFile
case IMAGETYPE_PNG:
$image_src = imagecreatefrompng($this->filepath);
break;
+ case IMAGETYPE_BMP:
+ $image_src = imagecreatefrombmp($this->filepath);
+ break;
+ case IMAGETYPE_WBMP:
+ $image_src = imagecreatefromwbmp($this->filepath);
+ break;
+ case IMAGETYPE_XBM:
+ $image_src = imagecreatefromxbm($this->filepath);
+ break;
+ case IMAGETYPE_XPM:
+ $image_src = imagecreatefromxpm($this->filepath);
+ break;
default:
throw new Exception(_('Unknown file type'));
return;
@@ -153,7 +171,7 @@ class ImageFile
$image_dest = imagecreatetruecolor($size, $size);
- if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG) {
+ if ($this->type == IMAGETYPE_GIF || $this->type == IMAGETYPE_PNG || $this->type == IMAGETYPE_BMP) {
$transparent_idx = imagecolortransparent($image_src);
@@ -176,6 +194,24 @@ class ImageFile
imagecopyresampled($image_dest, $image_src, 0, 0, $x, $y, $size, $size, $w, $h);
+ if($this->type == IMAGETYPE_BMP) {
+ //we don't want to save BMP... it's an inefficient, rare, antiquated format
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_WBMP) {
+ //we don't want to save WBMP... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_XBM) {
+ //we don't want to save XBM... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ } else if($this->type == IMAGETYPE_XPM) {
+ //we don't want to save XPM... it's a rare format that we can't guarantee clients will support
+ //save png instead
+ $this->type = IMAGETYPE_PNG;
+ }
+
$outname = Avatar::filename($this->id,
image_type_to_extension($this->type),
$size,
@@ -245,4 +281,101 @@ class ImageFile
return $num;
}
-} \ No newline at end of file
+}
+
+//PHP doesn't (as of 2/24/2010) have an imagecreatefrombmp so conditionally define one
+if(!function_exists('imagecreatefrombmp')){
+ //taken shamelessly from http://www.php.net/manual/en/function.imagecreatefromwbmp.php#86214
+ function imagecreatefrombmp($p_sFile)
+ {
+ // Load the image into a string
+ $file = fopen($p_sFile,"rb");
+ $read = fread($file,10);
+ while(!feof($file)&&($read<>""))
+ $read .= fread($file,1024);
+
+ $temp = unpack("H*",$read);
+ $hex = $temp[1];
+ $header = substr($hex,0,108);
+
+ // Process the header
+ // Structure: http://www.fastgraph.com/help/bmp_header_format.html
+ if (substr($header,0,4)=="424d")
+ {
+ // Cut it in parts of 2 bytes
+ $header_parts = str_split($header,2);
+
+ // Get the width 4 bytes
+ $width = hexdec($header_parts[19].$header_parts[18]);
+
+ // Get the height 4 bytes
+ $height = hexdec($header_parts[23].$header_parts[22]);
+
+ // Unset the header params
+ unset($header_parts);
+ }
+
+ // Define starting X and Y
+ $x = 0;
+ $y = 1;
+
+ // Create newimage
+ $image = imagecreatetruecolor($width,$height);
+
+ // Grab the body from the image
+ $body = substr($hex,108);
+
+ // Calculate if padding at the end-line is needed
+ // Divided by two to keep overview.
+ // 1 byte = 2 HEX-chars
+ $body_size = (strlen($body)/2);
+ $header_size = ($width*$height);
+
+ // Use end-line padding? Only when needed
+ $usePadding = ($body_size>($header_size*3)+4);
+
+ // Using a for-loop with index-calculation instaid of str_split to avoid large memory consumption
+ // Calculate the next DWORD-position in the body
+ for ($i=0;$i<$body_size;$i+=3)
+ {
+ // Calculate line-ending and padding
+ if ($x>=$width)
+ {
+ // If padding needed, ignore image-padding
+ // Shift i to the ending of the current 32-bit-block
+ if ($usePadding)
+ $i += $width%4;
+
+ // Reset horizontal position
+ $x = 0;
+
+ // Raise the height-position (bottom-up)
+ $y++;
+
+ // Reached the image-height? Break the for-loop
+ if ($y>$height)
+ break;
+ }
+
+ // Calculation of the RGB-pixel (defined as BGR in image-data)
+ // Define $i_pos as absolute position in the body
+ $i_pos = $i*2;
+ $r = hexdec($body[$i_pos+4].$body[$i_pos+5]);
+ $g = hexdec($body[$i_pos+2].$body[$i_pos+3]);
+ $b = hexdec($body[$i_pos].$body[$i_pos+1]);
+
+ // Calculate and draw the pixel
+ $color = imagecolorallocate($image,$r,$g,$b);
+ imagesetpixel($image,$x,$height-$y,$color);
+
+ // Raise the horizontal position
+ $x++;
+ }
+
+ // Unset the body / free the memory
+ unset($body);
+
+ // Return image-object
+ return $image;
+ }
+}
diff --git a/lib/iomaster.php b/lib/iomaster.php
index d20837ba5..7cfb2c9a0 100644
--- a/lib/iomaster.php
+++ b/lib/iomaster.php
@@ -330,7 +330,7 @@ abstract class IoMaster
* for per-queue and per-site records.
*
* @param string $key counter name
- * @param array $owners list of owner keys like 'queue:jabber' or 'site:stat01'
+ * @param array $owners list of owner keys like 'queue:xmpp' or 'site:stat01'
*/
public function stats($key, $owners=array())
{
diff --git a/lib/language.php b/lib/language.php
index f5ee7fac5..64b59e739 100644
--- a/lib/language.php
+++ b/lib/language.php
@@ -289,6 +289,7 @@ function get_all_languages() {
'ar' => array('q' => 0.8, 'lang' => 'ar', 'name' => 'Arabic', 'direction' => 'rtl'),
'arz' => array('q' => 0.8, 'lang' => 'arz', 'name' => 'Egyptian Spoken Arabic', 'direction' => 'rtl'),
'bg' => array('q' => 0.8, 'lang' => 'bg', 'name' => 'Bulgarian', 'direction' => 'ltr'),
+ 'br' => array('q' => 0.8, 'lang' => 'br', 'name' => 'Breton', 'direction' => 'ltr'),
'ca' => array('q' => 0.5, 'lang' => 'ca', 'name' => 'Catalan', 'direction' => 'ltr'),
'cs' => array('q' => 0.5, 'lang' => 'cs', 'name' => 'Czech', 'direction' => 'ltr'),
'de' => array('q' => 0.8, 'lang' => 'de', 'name' => 'German', 'direction' => 'ltr'),
diff --git a/lib/mail.php b/lib/mail.php
index c724764cc..807b6a363 100644
--- a/lib/mail.php
+++ b/lib/mail.php
@@ -133,12 +133,13 @@ function mail_notify_from()
* @param User &$user user to send email to
* @param string $subject subject of the email
* @param string $body body of the email
+ * @param array $headers optional list of email headers
* @param string $address optional specification of email address
*
* @return boolean success flag
*/
-function mail_to_user(&$user, $subject, $body, $address=null)
+function mail_to_user(&$user, $subject, $body, $headers=array(), $address=null)
{
if (!$address) {
$address = $user->email;
@@ -180,7 +181,9 @@ function mail_confirm_address($user, $code, $nickname, $address)
$nickname, common_config('site', 'name'),
common_local_url('confirmaddress', array('code' => $code)),
common_config('site', 'name'));
- return mail_to_user($user, $subject, $body, $address);
+ $headers = array();
+
+ return mail_to_user($user, $subject, $body, $headers, $address);
}
/**
@@ -231,6 +234,7 @@ function mail_subscribe_notify_profile($listenee, $other)
$recipients = $listenee->email;
+ $headers = _mail_prepare_headers('subscribe', $listenee->nickname, $other->nickname);
$headers['From'] = mail_notify_from();
$headers['To'] = $name . ' <' . $listenee->email . '>';
$headers['Subject'] = sprintf(_('%1$s is now listening to '.
@@ -476,7 +480,10 @@ function mail_notify_nudge($from, $to)
common_local_url('all', array('nickname' => $to->nickname)),
common_config('site', 'name'));
common_init_locale();
- return mail_to_user($to, $subject, $body);
+
+ $headers = _mail_prepare_headers('nudge', $to->nickname, $from->nickname);
+
+ return mail_to_user($to, $subject, $body, $headers);
}
/**
@@ -526,8 +533,10 @@ function mail_notify_message($message, $from=null, $to=null)
common_local_url('newmessage', array('to' => $from->id)),
common_config('site', 'name'));
+ $headers = _mail_prepare_headers('message', $to->nickname, $from->nickname);
+
common_init_locale();
- return mail_to_user($to, $subject, $body);
+ return mail_to_user($to, $subject, $body, $headers);
}
/**
@@ -578,8 +587,10 @@ function mail_notify_fave($other, $user, $notice)
common_config('site', 'name'),
$user->nickname);
+ $headers = _mail_prepare_headers('fave', $other->nickname, $user->nickname);
+
common_init_locale();
- mail_to_user($other, $subject, $body);
+ mail_to_user($other, $subject, $body, $headers);
}
/**
@@ -611,19 +622,19 @@ function mail_notify_attn($user, $notice)
common_init_locale($user->language);
- if ($notice->conversation != $notice->id) {
- $conversationEmailText = "The full conversation can be read here:\n\n".
- "\t%5\$s\n\n ";
- $conversationUrl = common_local_url('conversation',
+ if ($notice->conversation != $notice->id) {
+ $conversationEmailText = "The full conversation can be read here:\n\n".
+ "\t%5\$s\n\n ";
+ $conversationUrl = common_local_url('conversation',
array('id' => $notice->conversation)).'#notice-'.$notice->id;
- } else {
- $conversationEmailText = "%5\$s";
- $conversationUrl = null;
- }
+ } else {
+ $conversationEmailText = "%5\$s";
+ $conversationUrl = null;
+ }
$subject = sprintf(_('%s (@%s) sent a notice to your attention'), $bestname, $sender->nickname);
- $body = sprintf(_("%1\$s (@%9\$s) just sent a notice to your attention (an '@-reply') on %2\$s.\n\n".
+ $body = sprintf(_("%1\$s (@%9\$s) just sent a notice to your attention (an '@-reply') on %2\$s.\n\n".
"The notice is here:\n\n".
"\t%3\$s\n\n" .
"It reads:\n\n".
@@ -641,7 +652,7 @@ function mail_notify_attn($user, $notice)
common_local_url('shownotice',
array('notice' => $notice->id)),//%3
$notice->content,//%4
- $conversationUrl,//%5
+ $conversationUrl,//%5
common_local_url('newnotice',
array('replyto' => $sender->nickname, 'inreplyto' => $notice->id)),//%6
common_local_url('replies',
@@ -649,6 +660,30 @@ function mail_notify_attn($user, $notice)
common_local_url('emailsettings'), //%8
$sender->nickname); //%9
+ $headers = _mail_prepare_headers('mention', $user->nickname, $sender->nickname);
+
common_init_locale();
- mail_to_user($user, $subject, $body);
+ mail_to_user($user, $subject, $body, $headers);
}
+
+/**
+ * Prepare the common mail headers used in notification emails
+ *
+ * @param string $msg_type type of message being sent to the user
+ * @param string $to nickname of the receipient
+ * @param string $from nickname of the user triggering the notification
+ *
+ * @return array list of mail headers to include in the message
+ */
+function _mail_prepare_headers($msg_type, $to, $from)
+{
+ $headers = array(
+ 'X-StatusNet-MessageType' => $msg_type,
+ 'X-StatusNet-TargetUser' => $to,
+ 'X-StatusNet-SourceUser' => $from,
+ 'X-StatusNet-Domain' => common_config('site', 'server')
+ );
+
+ return $headers;
+}
+
diff --git a/lib/mediafile.php b/lib/mediafile.php
index e3d5b1dbc..10d90d008 100644
--- a/lib/mediafile.php
+++ b/lib/mediafile.php
@@ -262,7 +262,7 @@ class MediaFile
$filetype = MIME_Type::autoDetect($stream['uri']);
}
- if (in_array($filetype, common_config('attachments', 'supported'))) {
+ if (common_config('attachments', 'supported') === true || in_array($filetype, common_config('attachments', 'supported'))) {
return $filetype;
}
$media = MIME_Type::getMedia($filetype);
diff --git a/lib/messageform.php b/lib/messageform.php
index 0c568e1bd..b116964da 100644
--- a/lib/messageform.php
+++ b/lib/messageform.php
@@ -175,6 +175,6 @@ class MessageForm extends Form
'class' => 'submit',
'name' => 'message_send',
'type' => 'submit',
- 'value' => _('Send')));
+ 'value' => _m('Send button for sending notice', 'Send')));
}
}
diff --git a/lib/mysqlschema.php b/lib/mysqlschema.php
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/noticeform.php b/lib/noticeform.php
index 62df5c941..7278c41a9 100644
--- a/lib/noticeform.php
+++ b/lib/noticeform.php
@@ -233,6 +233,6 @@ class NoticeForm extends Form
'class' => 'submit',
'name' => 'status_submit',
'type' => 'submit',
- 'value' => _('Send')));
+ 'value' => _m('Send button for sending notice', 'Send')));
}
}
diff --git a/lib/noticelist.php b/lib/noticelist.php
index 88a925241..811b7e4f1 100644
--- a/lib/noticelist.php
+++ b/lib/noticelist.php
@@ -442,11 +442,13 @@ 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));
+ $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/queuemanager.php b/lib/queuemanager.php
index 9fdc80110..0829c8a8b 100644
--- a/lib/queuemanager.php
+++ b/lib/queuemanager.php
@@ -213,7 +213,9 @@ abstract class QueueManager extends IoManager
{
if (isset($this->handlers[$queue])) {
$class = $this->handlers[$queue];
- if (class_exists($class)) {
+ if(is_object($class)) {
+ return $class;
+ } else if (class_exists($class)) {
return new $class();
} else {
$this->_log(LOG_ERR, "Nonexistent handler class '$class' for queue '$queue'");
@@ -262,6 +264,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');
@@ -286,7 +291,7 @@ abstract class QueueManager extends IoManager
* Only registered transports will be reliably picked up!
*
* @param string $transport
- * @param string $class
+ * @param string $class class name or object instance
* @param string $group
*/
public function connect($transport, $class, $group='main')
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/subs.php b/lib/subs.php
index 1c240c475..165bbaa8f 100644
--- a/lib/subs.php
+++ b/lib/subs.php
@@ -42,4 +42,4 @@ function subs_unsubscribe_to($user, $other)
} catch (Exception $e) {
return $e->getMessage();
}
-} \ No newline at end of file
+}
diff --git a/lib/userprofile.php b/lib/userprofile.php
index 8464c2446..2c3b1ea45 100644
--- a/lib/userprofile.php
+++ b/lib/userprofile.php
@@ -228,6 +228,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 44ccc0def..a30d69100 100644
--- a/lib/util.php
+++ b/lib/util.php
@@ -1493,7 +1493,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 578f0d250..56029bc82 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:06+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:16+0000\n"
"Language-Team: Arabic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -22,7 +22,8 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "نفاذ"
@@ -43,7 +44,6 @@ msgstr "أأمنع المستخدمين المجهولين (غير الوالج
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "خاص"
@@ -74,10 +74,9 @@ msgid "Save access settings"
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
@@ -103,7 +102,7 @@ msgstr "لا صفحة كهذه"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -119,7 +118,7 @@ msgstr "%1$s والأصدقاء, الصفحة %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -174,7 +173,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "أنت والأصدقاء"
@@ -201,11 +200,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "لم يتم العثور على وسيلة API."
@@ -304,7 +303,7 @@ msgstr "رسالة مباشرة %s"
#: actions/apidirectmessage.php:105
#, php-format
msgid "All the direct messages sent to %s"
-msgstr ""
+msgstr "كل الرسائل المباشرة التي أرسلت إلى %s"
#: actions/apidirectmessagenew.php:126
msgid "No message text!"
@@ -550,7 +549,7 @@ msgstr ""
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
-msgstr ""
+msgstr "اسمح أو امنع الوصول"
#: actions/apioauthauthorize.php:292
#, php-format
@@ -560,7 +559,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "الحساب"
@@ -647,18 +646,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "مسار %s الزمني"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -669,12 +656,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمني العام"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -694,7 +681,7 @@ msgstr "تكرارات %s"
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومة ب%s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -734,7 +721,7 @@ msgstr "بإمكانك رفع أفتارك الشخصي. أقصى حجم للم
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -917,19 +904,17 @@ msgid "Conversation"
msgstr "محادثة"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "الإشعارات"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "يجب أن تكون مسجل الدخول لتعدل تطبيقا."
+msgstr "يجب أن تسجل الدخول لتحذف تطبيقا."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "لم يوجد رمز التأكيد."
+msgstr "لم يوجد التطبيق."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
@@ -938,7 +923,7 @@ msgstr "أنت لست مالك هذا التطبيق."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1125,8 +1110,9 @@ msgstr "ارجع إلى المبدئي"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1242,7 +1228,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعة."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1362,7 +1348,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1436,12 +1422,12 @@ msgstr "ألغِ تفضيل المفضلة"
#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
msgid "Popular notices"
-msgstr "إشعارات مشهورة"
+msgstr "إشعارات محبوبة"
#: actions/favorited.php:67
#, php-format
msgid "Popular notices, page %d"
-msgstr "إشعارات مشهورة، الصفحة %d"
+msgstr "إشعارات محبوبة، الصفحة %d"
#: actions/favorited.php:79
msgid "The most popular notices on the site right now."
@@ -1473,7 +1459,7 @@ msgstr "إشعارات %s المُفضلة"
#: actions/favoritesrss.php:115
#, php-format
msgid "Updates favored by %1$s on %2$s!"
-msgstr ""
+msgstr "الإشعارات التي فضلها %1$s في %2$s!"
#: actions/featured.php:69 lib/featureduserssection.php:87
#: lib/publicgroupnav.php:89
@@ -1546,6 +1532,25 @@ msgstr "لا ملف كهذا."
msgid "Cannot read file."
msgstr "تعذّرت قراءة الملف."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "حجم غير صالح."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "المستخدم مسكت من قبل."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1624,7 +1629,7 @@ msgstr "تعذّر تحديث تصميمك."
#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
msgid "Design preferences saved."
-msgstr ""
+msgstr "حُفظت تفضيلات التصميم."
#: actions/grouplogo.php:142 actions/grouplogo.php:195
msgid "Group logo"
@@ -1676,7 +1681,7 @@ msgstr "امنع"
#: actions/groupmembers.php:450
msgid "Make user an admin of the group"
-msgstr ""
+msgstr "اجعل المستخدم إداريًا في المجموعة"
#: actions/groupmembers.php:482
msgid "Make Admin"
@@ -1686,12 +1691,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "مسار %s الزمني"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "مجموعات"
@@ -1924,7 +1935,6 @@ msgstr ""
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "أرسل"
@@ -2246,8 +2256,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "ليس نسق بيانات مدعوم."
@@ -2343,7 +2353,7 @@ msgstr "كلمة السر القديمة"
#: actions/passwordsettings.php:108 actions/recoverpassword.php:235
msgid "New password"
-msgstr "كلمة سر جديدة"
+msgstr "كلمة السر الجديدة"
#: actions/passwordsettings.php:109
msgid "6 or more characters"
@@ -2386,7 +2396,8 @@ msgstr "تعذّر حفظ كلمة السر الجديدة."
msgid "Password saved."
msgstr "حُفظت كلمة السر."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2506,7 +2517,7 @@ msgstr "دليل الخلفيات"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
@@ -2557,13 +2568,13 @@ msgstr "ليس وسم أشخاص صالح: %s"
#: actions/peopletag.php:144
#, php-format
msgid "Users self-tagged with %1$s - page %2$d"
-msgstr ""
+msgstr "المستخدمون الذين وسموا أنفسهم ب%1$s - الصفحة %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوى إشعار غير صالح"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2640,7 +2651,7 @@ msgid ""
msgstr ""
"سِم نفسك (حروف وأرقام و \"-\" و \".\" و \"_\")، افصلها بفاصلة (',') أو مسافة."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2666,7 +2677,7 @@ msgstr "اشترك تلقائيًا بأي شخص يشترك بي (يفضل أن
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تُختر المنطقة الزمنية."
@@ -2970,7 +2981,7 @@ msgid "Same as password above. Required."
msgstr "نفس كلمة السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -3054,7 +3065,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "اشترك"
@@ -3150,6 +3161,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "المستخدم بدون ملف مطابق."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "ستاتس نت"
@@ -3162,7 +3183,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "الجلسات"
@@ -3187,7 +3210,7 @@ msgstr "تنقيح الجلسة"
msgid "Turn on debugging output for sessions."
msgstr "مكّن تنقيح مُخرجات الجلسة."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "اذف إعدادت الموقع"
@@ -3218,8 +3241,8 @@ msgstr "المنظمة"
msgid "Description"
msgstr "الوصف"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3356,45 +3379,45 @@ msgstr "الكنى"
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3403,8 +3426,13 @@ msgid ""
"their life and interests. [Join now](%%%%action.register%%%%) to become part "
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
+"**%s** مجموعة مستخدمين على %%%%site.name%%%%، خدمة [التدوين المُصغّر](http://"
+"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
+"[انضم الآن](%%%%action.register%%%%) لتصبح عضوًا في هذه المجموعة ومجموعات "
+"أخرى عديدة! ([اقرأ المزيد](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3412,8 +3440,11 @@ msgid ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
msgstr ""
+"**%s** مجموعة مستخدمين على %%%%site.name%%%%، خدمة [التدوين المُصغّر](http://"
+"en.wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3445,9 +3476,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
#, php-format
@@ -3500,6 +3531,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** حساب على %%site.name%%، خدمة [التدوين المُصغّر](http://en."
+"wikipedia.org/wiki/Micro-blogging) المبنية على البرنامج الحر [StatusNet]"
+"(http://status.net/). يتشارك أعضاؤها رسائل قصيرة عن حياتهم واهتماماتهم. "
+"[انضم الآن](%%%%action.register%%%%) لتتابع إشعارت **%s** وغيره! ([اقرأ "
+"المزيد](%%%%doc.help%%%%))"
#: actions/showstream.php:248
#, php-format
@@ -3523,146 +3559,131 @@ msgid "User is already silenced."
msgstr "المستخدم مسكت من قبل."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr "الإعدادات الأساسية لموقع StatusNet هذا."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صفرًا."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "يجب أن تملك عنوان بريد إلكتروني صحيح."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "لغة غير معروفة \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرفًا."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكتروني للاتصال بموقعك"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقة الزمنية المبدئية"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقة الزمنية المبدئية للموقع؛ ت‌ع‌م عادة."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr "لغة الموقع المبدئية"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "في مهمة مُجدولة"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "التكرار"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "اللغة المبدئية"
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحروف في الإشعارات."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "عدّل رسالة الموقع العامة"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "مشكلة أثناء حفظ الإشعار."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "نص إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "نص إشعار عام للموقع (255 حرف كحد أقصى؛ يسمح بHTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "احفظ إشعار الموقع"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "إعدادات الرسائل القصيرة"
@@ -3755,6 +3776,66 @@ msgstr ""
msgid "No code entered"
msgstr "لم تدخل رمزًا"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "غيّر ضبط الموقع"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "في مهمة مُجدولة"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "التكرار"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "بلّغ عن المسار"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "اذف إعدادت الموقع"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -3948,7 +4029,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -3956,7 +4037,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "المستخدم"
@@ -4139,16 +4219,22 @@ msgstr "%1$s أعضاء المجموعة, الصفحة %2$d"
msgid "Search for more groups"
msgstr "ابحث عن المزيد من المجموعات"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s ليس عضوًا في أي مجموعة."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4194,7 +4280,7 @@ msgstr ""
msgid "Plugins"
msgstr "الملحقات"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "النسخة"
@@ -4257,39 +4343,39 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكلة في حفظ الإشعار. طويل جدًا."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكلة في حفظ الإشعار. مستخدم غير معروف."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكلة أثناء حفظ الإشعار."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكلة أثناء حفظ الإشعار."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تي @%1$s %2$s"
@@ -4314,7 +4400,12 @@ msgstr "غير مشترك!"
msgid "Couldn't delete self-subscription."
msgstr "لم يمكن حذف اشتراك ذاتي."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "تعذّر حذف الاشتراك."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "تعذّر حذف الاشتراك."
@@ -4323,20 +4414,20 @@ msgstr "تعذّر حذف الاشتراك."
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم في %1$s يا @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعة."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضوية المجموعة."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضوية المجموعة."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر حفظ الاشتراك."
@@ -4378,194 +4469,171 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صفحة غير مُعنونة"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "الملف الشخصي ومسار الأصدقاء الزمني"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
-msgstr "شخصية"
+msgstr "الصفحة الشخصية"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "غير كلمة سرّك"
-
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "الحساب"
+msgstr "غير بريدك الإلكتروني وكلمة سرّك وأفتارك وملفك الشخصي"
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "اتصالات"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "اتصل"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "إداري"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr "استخدم هذا النموذج لدعوة أصدقائك وزملائك لاستخدام هذه الخدمة."
+msgstr "ادعُ أصدقائك وزملائك للانضمام إليك في %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "ادعُ"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "اخرج"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "أنشئ حسابًا"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "سجّل"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "لُج إلى الموقع"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "لُج"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "مساعدة"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr "ابحث عن أشخاص أو نص"
+msgstr "ابحث عن أشخاص أو نصوص"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "ابحث"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "إشعار الموقع"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصفحة"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "مساعدة"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئلة المكررة"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "الجسر"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "رخصة برنامج StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4574,12 +4642,12 @@ msgstr ""
"**%%site.name%%** خدمة تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4590,60 +4658,60 @@ msgstr ""
"المتوفر تحت [رخصة غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصة محتوى الموقع"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "الرخصة."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
-msgstr ""
+msgstr "لا يمكنك إجراء تغييرات على هذا الموقع."
#. TRANS: Client error message
#: lib/adminpanelaction.php:110
@@ -4651,92 +4719,77 @@ msgid "Changes to that panel are not allowed."
msgstr "التغييرات لهذه اللوحة غير مسموح بها."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "تعذّر حذف إعدادات التصميم."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ضبط الموقع الأساسي"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "الموقع"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ضبط التصميم"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "التصميم"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
-#, fuzzy
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "ضبط المسارات"
+msgstr "ضبط المستخدم"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "المستخدم"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "ضبط الحساب"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "نفاذ"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ضبط المسارات"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "المسارات"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "ضبط الجلسات"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "عدّل إشعار الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "الجلسات"
+msgid "Snapshots configuration"
+msgstr "ضبط المسارات"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -4753,7 +4806,7 @@ msgstr "عدّل التطبيق"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
-msgstr ""
+msgstr "أيقونة لهذا التطبيق"
#: lib/applicationeditform.php:204
#, php-format
@@ -4786,7 +4839,7 @@ msgstr ""
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "متصفح"
#: lib/applicationeditform.php:274
msgid "Desktop"
@@ -4923,12 +4976,12 @@ msgstr "%s ترك المجموعة %s"
msgid "Fullname: %s"
msgstr "الاسم الكامل: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "الموقع: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "الصفحة الرئيسية: %s"
@@ -4988,9 +5041,8 @@ 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 "لا مستخدم كهذا."
+msgstr "لا مستخدم كهذا"
#: lib/command.php:561
#, php-format
@@ -5008,23 +5060,23 @@ msgstr ""
#: lib/command.php:613 lib/command.php:636
msgid "Command not yet implemented."
-msgstr ""
+msgstr "الأمر لم يُجهزّ بعد."
#: lib/command.php:616
msgid "Notification off."
-msgstr ""
+msgstr "الإشعار مُطفأ."
#: lib/command.php:618
msgid "Can't turn off notification."
-msgstr ""
+msgstr "تعذّر إطفاء الإشعارات."
#: lib/command.php:639
msgid "Notification on."
-msgstr ""
+msgstr "الإشعار يعمل."
#: lib/command.php:641
msgid "Can't turn on notification."
-msgstr ""
+msgstr "تعذّر تشغيل الإشعار."
#: lib/command.php:654
msgid "Login command is disabled"
@@ -5233,6 +5285,11 @@ msgstr ""
msgid "Go"
msgstr "اذهب"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5362,17 +5419,17 @@ msgstr "غادر"
#: lib/logingroupnav.php:80
msgid "Login with a username and password"
-msgstr ""
+msgstr "لُج باسم مستخدم وكلمة سر"
#: lib/logingroupnav.php:86
msgid "Sign up for a new account"
-msgstr ""
+msgstr "سجّل حسابًا جديدًا"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "تأكيد عنوان البريد الإلكتروني"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5388,13 +5445,25 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"مرحبًا، %s.\n"
+"\n"
+"لقد أدخل أحدهم قبل لحظات عنوان البريد الإلكتروني هذا على %s.\n"
+"\n"
+"إذا كنت هو، وإذا كنت تريد تأكيد هذه المدخلة، فاستخدم المسار أدناه:\n"
+"\n"
+" %s\n"
+"\n"
+"إذا كان الأمر خلاف ذلك، فتجاهل هذه الرسالة.\n"
+"\n"
+"شكرًا على الوقت الذي أمضيته، \n"
+"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s يستمع الآن إلى إشعاراتك على %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5419,17 +5488,17 @@ msgstr ""
"----\n"
"غيّر خيارات البريد الإلكتروني والإشعار في %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "السيرة: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
-msgstr ""
+msgstr "عنوان بريد إلكتروني جديد للإرسال إلى %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5442,21 +5511,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "حالة %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
-msgstr ""
+msgstr "تأكيد الرسالة القصيرة"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
-msgstr ""
+msgstr "لقد نبهك %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5472,12 +5541,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "رسالة خاصة جديدة من %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5496,12 +5565,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
+msgstr "لقد أضاف %s (@%s) إشعارك إلى مفضلاته"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5522,12 +5591,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "لقد أرسل %s (@%s) إشعارًا إليك"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5642,7 +5711,6 @@ msgid "Available characters"
msgstr "المحارف المتوفرة"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "أرسل"
@@ -5767,10 +5835,6 @@ msgstr "الردود"
msgid "Favorites"
msgstr "المفضلات"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "المستخدم"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق الوارد"
@@ -5796,7 +5860,7 @@ msgstr "وسوم في إشعارات %s"
msgid "Unknown"
msgstr "غير معروفة"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "الاشتراكات"
@@ -5804,23 +5868,23 @@ msgstr "الاشتراكات"
msgid "All subscriptions"
msgstr "جميع الاشتراكات"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "المشتركون"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "جميع المشتركين"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "هوية المستخدم"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو منذ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "كل المجموعات"
@@ -5850,7 +5914,7 @@ msgstr "مُختارون"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr "مشهورة"
+msgstr "محبوبة"
#: lib/repeatform.php:107
msgid "Repeat this notice?"
@@ -5860,7 +5924,12 @@ msgstr "أأكرّر هذا الإشعار؟ّ"
msgid "Repeat this notice"
msgstr "كرّر هذا الإشعار"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "امنع هذا المستخدم من هذه المجموعة"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6014,47 +6083,62 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ملف المستخدم الشخصي"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "إداري"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "مراقب"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقة تقريبًا"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعة تقريبًا"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنة تقريبًا"
diff --git a/locale/arz/LC_MESSAGES/statusnet.po b/locale/arz/LC_MESSAGES/statusnet.po
index 3ce1fbc4e..aaf1d89bd 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:09+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:19+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -23,7 +23,8 @@ msgstr ""
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "نفاذ"
@@ -107,7 +108,7 @@ msgstr "لا صفحه كهذه"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +124,7 @@ msgstr "%1$s و الصحاب, صفحه %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -178,7 +179,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "أنت والأصدقاء"
@@ -205,11 +206,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "الـ API method مش موجوده."
@@ -564,7 +565,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "الحساب"
@@ -651,18 +652,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "مسار %s الزمني"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -673,12 +662,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "مسار %s الزمنى العام"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -698,7 +687,7 @@ msgstr "تكرارات %s"
msgid "Notices tagged with %s"
msgstr "الإشعارات الموسومه ب%s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -738,7 +727,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -921,7 +910,7 @@ msgid "Conversation"
msgstr "محادثة"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "الإشعارات"
@@ -942,7 +931,7 @@ msgstr "انت مش بتملك الapplication دى."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1132,8 +1121,9 @@ msgstr "ارجع إلى المبدئي"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1250,7 +1240,7 @@ msgstr ""
msgid "Could not update group."
msgstr "تعذر تحديث المجموعه."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "تعذّر إنشاء الكنى."
@@ -1370,7 +1360,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "ليس عنوان بريد صالح."
@@ -1554,6 +1544,25 @@ msgstr "لا ملف كهذا."
msgid "Cannot read file."
msgstr "تعذّرت قراءه الملف."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "حجم غير صالح."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "المستخدم مسكت من قبل."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1694,12 +1703,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr "اجعل هذا المستخدم إداريًا"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "مسار %s الزمني"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "مجموعات"
@@ -2252,8 +2267,8 @@ msgstr "نوع المحتوى "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr " مش نظام بيانات مدعوم."
@@ -2392,7 +2407,8 @@ msgstr "تعذّر حفظ كلمه السر الجديده."
msgid "Password saved."
msgstr "حُفظت كلمه السر."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "المسارات"
@@ -2512,7 +2528,7 @@ msgstr "دليل الخلفيات"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "مطلقا"
@@ -2565,11 +2581,11 @@ msgstr "ليس وسم أشخاص صالح: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوى إشعار غير صالح"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2645,7 +2661,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "اللغة"
@@ -2671,7 +2687,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "لم تُختر المنطقه الزمنيه."
@@ -2975,7 +2991,7 @@ msgid "Same as password above. Required."
msgstr "نفس كلمه السر أعلاه. مطلوب."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "البريد الإلكتروني"
@@ -3059,7 +3075,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "اشترك"
@@ -3155,6 +3171,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "لا يمكنك إسكات المستخدمين على هذا الموقع."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "يوزر من-غير پروفايل زيّه."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3167,7 +3193,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "الجلسات"
@@ -3192,7 +3220,7 @@ msgstr "تنقيح الجلسة"
msgid "Turn on debugging output for sessions."
msgstr "مكّن تنقيح مُخرجات الجلسه."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "اذف إعدادت الموقع"
@@ -3223,8 +3251,8 @@ msgstr "المنظمه"
msgid "Description"
msgstr "الوصف"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "إحصاءات"
@@ -3361,45 +3389,45 @@ msgstr "الكنى"
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "الأعضاء"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(لا شيء)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "جميع الأعضاء"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "أنشئ"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3409,7 +3437,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3418,7 +3446,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "الإداريون"
@@ -3528,146 +3556,137 @@ msgid "User is already silenced."
msgstr "المستخدم مسكت من قبل."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "الإعدادات الأساسيه لموقع StatusNet هذا."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "يجب ألا يكون طول اسم الموقع صفرًا."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "لازم يكون عندك عنوان ايميل صالح."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "لغه مش معروفه \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "حد النص الأدنى هو 140 حرفًا."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "عام"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "اسم الموقع"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "اسم موقعك، \"التدوين المصغر لشركتك\" مثلا"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "عنوان البريد الإلكترونى للاتصال بموقعك"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلي"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "المنطقه الزمنيه المبدئية"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "المنطقه الزمنيه المبدئيه للموقع؛ ت‌ع‌م عاده."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "لغه الموقع المبدئية"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "فى مهمه مُجدولة"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "التكرار"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "بلّغ عن المسار"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "الحدود"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "حد النص"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "أقصى عدد للحروف فى الإشعارات."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "رساله جديدة"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "مشكله أثناء حفظ الإشعار."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "إشعار الموقع"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "إشعار الموقع"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "تظبيطات الـSMS"
@@ -3760,6 +3779,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "غيّر ضبط الموقع"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "فى مهمه مُجدولة"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "التكرار"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "بلّغ عن المسار"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "اذف إعدادت الموقع"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -3954,7 +4033,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4145,16 +4224,22 @@ msgstr "%1$s أعضاء المجموعة, الصفحه %2$d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4198,7 +4283,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "النسخه"
@@ -4262,39 +4347,39 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشكله فى حفظ الإشعار. طويل جدًا."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشكله فى حفظ الإشعار. مستخدم غير معروف."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشكله أثناء حفظ الإشعار."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشكله أثناء حفظ الإشعار."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "آر تى @%1$s %2$s"
@@ -4319,7 +4404,12 @@ msgstr "غير مشترك!"
msgid "Couldn't delete self-subscription."
msgstr "ما نفعش يمسح الاشتراك الشخصى."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "تعذّر حذف الاشتراك."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "تعذّر حذف الاشتراك."
@@ -4328,20 +4418,20 @@ msgstr "تعذّر حذف الاشتراك."
msgid "Welcome to %1$s, @%2$s!"
msgstr "أهلا بكم فى %1$s يا @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "تعذّر إنشاء المجموعه."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "تعذّر ضبط عضويه المجموعه."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "تعذّر ضبط عضويه المجموعه."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "تعذّر حفظ الاشتراك."
@@ -4383,194 +4473,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "صفحه غير مُعنونة"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "الملف الشخصى ومسار الأصدقاء الزمني"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "شخصية"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "غير كلمه سرّك"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "الحساب"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "كونيكشونات (Connections)"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "اتصل"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "غيّر ضبط الموقع"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "إداري"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "ادعُ"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "اخرج من الموقع"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "اخرج"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "أنشئ حسابًا"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "سجّل"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "لُج إلى الموقع"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "لُج"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "ساعدني!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "مساعدة"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "ابحث عن أشخاص أو نص"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "ابحث"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "إشعار الموقع"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "المشاهدات المحلية"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "إشعار الصفحة"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "مساعدة"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "عن"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "الأسئله المكررة"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "الشروط"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصية"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "المصدر"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "اتصل"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4579,12 +4662,12 @@ msgstr ""
"**%%site.name%%** خدمه تدوين مصغر يقدمها لك [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4595,53 +4678,53 @@ msgstr ""
"المتوفر تحت [رخصه غنو أفيرو العمومية](http://www.fsf.org/licensing/licenses/"
"agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "رخصه محتوى الموقع"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "الرخصه."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "بعد"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4656,94 +4739,83 @@ msgid "Changes to that panel are not allowed."
msgstr "التغييرات مش مسموحه للـ لوحه دى."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "تعذّر حذف إعدادات التصميم."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ضبط الموقع الأساسي"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "الموقع"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "ضبط التصميم"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "التصميم"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "ضبط المسارات"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "المستخدم"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "ضبط التصميم"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "نفاذ"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "ضبط المسارات"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "المسارات"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "ضبط التصميم"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "الجلسات"
+msgid "Edit site notice"
+msgstr "إشعار الموقع"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "ضبط المسارات"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -4930,12 +5002,12 @@ msgstr "%s ساب الجروپ %s"
msgid "Fullname: %s"
msgstr "الاسم الكامل: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "الموقع: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "الصفحه الرئيسية: %s"
@@ -5240,6 +5312,11 @@ msgstr ""
msgid "Go"
msgstr "اذهب"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5375,11 +5452,11 @@ msgstr ""
msgid "Sign up for a new account"
msgstr ""
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "تأكيد عنوان البريد الإلكتروني"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5396,12 +5473,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr ""
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5416,17 +5493,17 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "عن نفسك: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5439,21 +5516,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "حاله %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5469,12 +5546,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "رساله خاصه جديده من %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5493,12 +5570,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr ""
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5519,12 +5596,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5764,10 +5841,6 @@ msgstr "الردود"
msgid "Favorites"
msgstr "المفضلات"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "المستخدم"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق الوارد"
@@ -5793,7 +5866,7 @@ msgstr ""
msgid "Unknown"
msgstr "مش معروف"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "الاشتراكات"
@@ -5801,23 +5874,23 @@ msgstr "الاشتراكات"
msgid "All subscriptions"
msgstr "جميع الاشتراكات"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "المشتركون"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "جميع المشتركين"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "هويه المستخدم"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو منذ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "كل المجموعات"
@@ -5857,7 +5930,12 @@ msgstr "كرر هذا الإشعار؟"
msgid "Repeat this notice"
msgstr "كرر هذا الإشعار"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "امنع هذا المستخدم من هذه المجموعة"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6011,47 +6089,63 @@ msgstr "رسالة"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ملف المستخدم الشخصي"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "الإداريون"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "قبل لحظات قليلة"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "قبل دقيقه تقريبًا"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "قبل ساعه تقريبًا"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "قبل يوم تقريبا"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "قبل شهر تقريبًا"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "قبل سنه تقريبًا"
diff --git a/locale/bg/LC_MESSAGES/statusnet.po b/locale/bg/LC_MESSAGES/statusnet.po
index abf1998d8..3a6b5b047 100644
--- a/locale/bg/LC_MESSAGES/statusnet.po
+++ b/locale/bg/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:12+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:22+0000\n"
"Language-Team: Bulgarian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: bg\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Достъп"
@@ -102,7 +103,7 @@ msgstr "Няма такака страница."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -118,7 +119,7 @@ msgstr "%1$s и приятели, страница %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -173,7 +174,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Вие и приятелите"
@@ -200,11 +201,11 @@ msgstr "Бележки от %1$s и приятели в %2$s."
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Не е открит методът в API."
@@ -570,7 +571,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Сметка"
@@ -658,18 +659,6 @@ msgstr "%s / Отбелязани като любими от %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s бележки отбелязани като любими от %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Поток на %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Бележки от %1$s в %2$s."
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -680,12 +669,12 @@ msgstr "%1$s / Реплики на %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s реплики на съобщения от %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Общ поток на %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -705,7 +694,7 @@ msgstr "Повторения на %s"
msgid "Notices tagged with %s"
msgstr "Бележки с етикет %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
@@ -747,7 +736,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Потребител без съответстващ профил"
@@ -932,7 +921,7 @@ msgid "Conversation"
msgstr "Разговор"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Бележки"
@@ -954,7 +943,7 @@ msgstr "Не членувате в тази група."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Имаше проблем със сесията ви в сайта."
@@ -1149,8 +1138,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1278,7 +1268,7 @@ msgstr "Описанието е твърде дълго (до %d символа)
msgid "Could not update group."
msgstr "Грешка при обновяване на групата."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Грешка при отбелязване като любима."
@@ -1402,7 +1392,7 @@ msgid "Cannot normalize that email address"
msgstr "Грешка при нормализиране адреса на е-пощата"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Неправилен адрес на е-поща."
@@ -1595,6 +1585,25 @@ msgstr "Няма такъв файл."
msgid "Cannot read file."
msgstr "Грешка при четене на файла."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Неправилен размер."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Не може да изпращате съобщения до този потребител."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Потребителят вече е заглушен."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1744,12 +1753,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Поток на %s"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Бележки от %1$s в %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -2362,8 +2377,8 @@ msgstr "вид съдържание "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Неподдържан формат на данните"
@@ -2509,7 +2524,8 @@ msgstr "Грешка при запазване на новата парола."
msgid "Password saved."
msgstr "Паролата е записана."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пътища"
@@ -2629,7 +2645,7 @@ msgstr "Директория на фона"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Никога"
@@ -2684,11 +2700,11 @@ msgstr "Това не е правилен адрес на е-поща."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Бележки с етикет %s, страница %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Невалидно съдържание на бележка"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2764,7 +2780,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Език"
@@ -2792,7 +2808,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Биографията е твърде дълга (до %d символа)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Не е избран часови пояс"
@@ -3097,7 +3113,7 @@ msgid "Same as password above. Required."
msgstr "Същото като паролата по-горе. Задължително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-поща"
@@ -3202,7 +3218,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Адрес на профила ви в друга, съвместима услуга за микроблогване"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Абониране"
@@ -3300,6 +3316,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Отговори до %1$s в %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Не можете да заглушавате потребители на този сайт."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Потребител без съответстващ профил"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3314,7 +3340,9 @@ msgstr "Не може да изпращате съобщения до този
msgid "User is already sandboxed."
msgstr "Потребителят ви е блокирал."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Сесии"
@@ -3339,7 +3367,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Запазване настройките на сайта"
@@ -3372,8 +3400,8 @@ msgstr "Организация"
msgid "Description"
msgstr "Описание"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Статистики"
@@ -3507,45 +3535,45 @@ msgstr "Псевдоними"
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Емисия с бележки на %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Емисия с бележки на %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Емисия с бележки на %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Изходяща кутия за %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Членове"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Всички членове"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Създадена на"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3555,7 +3583,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3564,7 +3592,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Администратори"
@@ -3674,147 +3702,138 @@ msgid "User is already silenced."
msgstr "Потребителят вече е заглушен."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Основни настройки на тази инсталация на StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Името на сайта е задължително."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Адресът на е-поща за контакт е задължителен"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Непознат език \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничение на текста е 140 знака."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Общи"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на сайта"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Адрес на е-поща за контакт със сайта"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Местоположение"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Часови пояс по подразбиране"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Часови пояс по подразбиране за сайта (обикновено UTC)."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Език по подразбиране за сайта"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Ограничения"
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Честота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Нова бележка"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ново съобщение"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr "Ограничения"
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Грешка при записване настройките за Twitter"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Нова бележка"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Нова бележка"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3917,6 +3936,66 @@ msgstr ""
msgid "No code entered"
msgstr "Не е въведен код."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Промяна настройките на сайта"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Честота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Запазване настройките на сайта"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Не сте абонирани за този профил"
@@ -4119,7 +4198,7 @@ msgstr "Сървърът не е върнал адрес на профила."
msgid "Unsubscribed"
msgstr "Отписване"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4325,16 +4404,22 @@ msgstr "Членове на групата %s, страница %d"
msgid "Search for more groups"
msgstr "Търсене на още групи"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не членува в никоя група."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Бележки от %1$s в %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4378,7 +4463,7 @@ msgstr ""
msgid "Plugins"
msgstr "Приставки"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Версия"
@@ -4446,23 +4531,23 @@ msgstr "Грешка при обновяване на бележката с но
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Проблем при записване на бележката."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Грешка при записване на бележката. Непознат потребител."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново след няколко минути."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4471,20 +4556,20 @@ msgstr ""
"Твърде много бележки за кратко време. Спрете, поемете дъх и публикувайте "
"отново след няколко минути."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забранено ви е да публикувате бележки в този сайт."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем при записване на бележката."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Проблем при записване на бележката."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4512,7 +4597,12 @@ msgstr "Не сте абонирани!"
msgid "Couldn't delete self-subscription."
msgstr "Грешка при изтриване на абонамента."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Грешка при изтриване на абонамента."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Грешка при изтриване на абонамента."
@@ -4521,21 +4611,21 @@ msgstr "Грешка при изтриване на абонамента."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добре дошли в %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Грешка при създаване на групата."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Грешка при създаване на нов абонамент."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Грешка при създаване на нов абонамент."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Грешка при създаване на нов абонамент."
@@ -4578,196 +4668,189 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Неозаглавена страница"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Лично"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Промяна на поща, аватар, парола, профил"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Сметка"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Свързване към услуги"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Свързване"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Промяна настройките на сайта"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Настройки"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Поканете приятели и колеги да се присъединят към вас в %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Покани"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Излизане от сайта"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Изход"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Създаване на нова сметка"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Регистриране"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Влизане в сайта"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Вход"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощ"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Помощ"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Търсене за хора или бележки"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Търсене"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Нова бележка"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Нова бележка"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Абонаменти"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Помощ"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Относно"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Въпроси"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Условия"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Поверителност"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Изходен код"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Табелка"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценз на програмата StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4776,12 +4859,12 @@ msgstr ""
"**%%site.name%%** е услуга за микроблогване, предоставена ви от [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е услуга за микроблогване. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4792,53 +4875,53 @@ msgstr ""
"достъпна под [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценз на съдържанието"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Всички "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "лиценз."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Страниране"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "След"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Преди"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4854,97 +4937,86 @@ msgid "Changes to that panel are not allowed."
msgstr "Записването не е позволено."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Командата все още не се поддържа."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Командата все още не се поддържа."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Грешка при записване настройките за Twitter"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Основна настройка на сайта"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Сайт"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Настройка на оформлението"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Версия"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Настройка на пътищата"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Потребител"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Настройка на оформлението"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Достъп"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Настройка на пътищата"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Пътища"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Настройка на оформлението"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Сесии"
+msgid "Edit site notice"
+msgstr "Нова бележка"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Настройка на пътищата"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5139,12 +5211,12 @@ msgstr "%s напусна групата %s"
msgid "Fullname: %s"
msgstr "Пълно име: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Местоположение: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Домашна страница: %s"
@@ -5443,6 +5515,11 @@ msgstr "Изберете етикет за конкретизиране"
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "Адрес на страница, блог или профил в друг сайт на групата"
@@ -5580,11 +5657,11 @@ msgstr "Вход с име и парола"
msgid "Sign up for a new account"
msgstr "Създаване на нова сметка"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Потвърждаване адреса на е-поща"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5601,12 +5678,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s вече получава бележките ви в %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5631,17 +5708,17 @@ msgstr ""
"----\n"
"Може да смените адреса и настройките за уведомяване по е-поща на %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Биография: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Нов адрес на е-поща за публикщуване в %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5654,21 +5731,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Състояние на %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Потвърждение за SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Побутнати сте от %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5684,12 +5761,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Ново лично съобщение от %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5708,12 +5785,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) отбеляза бележката ви като любима"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5734,12 +5811,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5983,10 +6060,6 @@ msgstr "Отговори"
msgid "Favorites"
msgstr "Любими"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Потребител"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Входящи"
@@ -6013,7 +6086,7 @@ msgstr "Етикети в бележките на %s"
msgid "Unknown"
msgstr "Непознато действие"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Абонаменти"
@@ -6021,24 +6094,24 @@ msgstr "Абонаменти"
msgid "All subscriptions"
msgstr "Всички абонаменти"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Абонати"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Всички абонати"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Потребител"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Участник от"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Всички групи"
@@ -6079,7 +6152,12 @@ msgstr "Повтаряне на тази бележка"
msgid "Repeat this notice"
msgstr "Повтаряне на тази бележка"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Списък с потребителите в тази група."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6239,47 +6317,63 @@ msgstr "Съобщение"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Потребителски профил"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Администратори"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "преди няколко секунди"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "преди около минута"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "преди около %d минути"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "преди около час"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "преди около %d часа"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "преди около ден"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "преди около %d дни"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "преди около месец"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "преди около %d месеца"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "преди около година"
diff --git a/locale/br/LC_MESSAGES/statusnet.po b/locale/br/LC_MESSAGES/statusnet.po
new file mode 100644
index 000000000..2197b9e74
--- /dev/null
+++ b/locale/br/LC_MESSAGES/statusnet.po
@@ -0,0 +1,6102 @@
+# Translation of StatusNet to Breton
+#
+# Author@translatewiki.net: Fulup
+# Author@translatewiki.net: Y-M D
+# --
+# This file is distributed under the same license as the StatusNet package.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: StatusNet\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:25+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-Translation-Project: translatewiki.net at http://translatewiki.net\n"
+"X-Language-Code: br\n"
+"X-Message-Group: out-statusnet\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#. TRANS: Page title
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
+msgid "Access"
+msgstr "Moned"
+
+#. TRANS: Page notice
+#: actions/accessadminpanel.php:67
+msgid "Site access settings"
+msgstr ""
+
+#. TRANS: Form legend for registration form.
+#: actions/accessadminpanel.php:161
+msgid "Registration"
+msgstr "Enskrivadur"
+
+#. TRANS: Checkbox instructions for admin setting "Private"
+#: actions/accessadminpanel.php:165
+msgid "Prohibit anonymous users (not logged in) from viewing site?"
+msgstr ""
+
+#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
+#: actions/accessadminpanel.php:167
+msgctxt "LABEL"
+msgid "Private"
+msgstr "Prevez"
+
+#. TRANS: Checkbox instructions for admin setting "Invite only"
+#: actions/accessadminpanel.php:174
+msgid "Make registration invitation only."
+msgstr "Aotreañ an enskrivadur goude bezañ bet pedet hepken."
+
+#. TRANS: Checkbox label for configuring site as invite only.
+#: actions/accessadminpanel.php:176
+msgid "Invite only"
+msgstr "Tud pedet hepken"
+
+#. TRANS: Checkbox instructions for admin setting "Closed" (no new registrations)
+#: actions/accessadminpanel.php:183
+msgid "Disable new registrations."
+msgstr "Diweredekaat an enskrivadurioù nevez."
+
+#. TRANS: Checkbox label for disabling new user registrations.
+#: actions/accessadminpanel.php:185
+msgid "Closed"
+msgstr "Serr"
+
+#. TRANS: Title / tooltip for button to save access settings in site admin panel
+#: actions/accessadminpanel.php:202
+msgid "Save access settings"
+msgstr "Enrollañ an arventennoù moned"
+
+#: actions/accessadminpanel.php:203
+msgctxt "BUTTON"
+msgid "Save"
+msgstr "Enrollañ"
+
+#. TRANS: Server error when page not found (404)
+#: actions/all.php:64 actions/public.php:98 actions/replies.php:93
+#: actions/showfavorites.php:138 actions/tag.php:52
+msgid "No such page"
+msgstr "N'eus ket eus ar bajenn-se"
+
+#: actions/all.php:75 actions/allrss.php:68
+#: actions/apiaccountupdatedeliverydevice.php:113
+#: actions/apiaccountupdateprofile.php:105
+#: actions/apiaccountupdateprofilebackgroundimage.php:116
+#: actions/apiaccountupdateprofileimage.php:105 actions/apiblockcreate.php:97
+#: actions/apiblockdestroy.php:96 actions/apidirectmessage.php:77
+#: actions/apidirectmessagenew.php:75 actions/apigroupcreate.php:112
+#: actions/apigroupismember.php:90 actions/apigroupjoin.php:99
+#: actions/apigroupleave.php:99 actions/apigrouplist.php:90
+#: actions/apistatusesupdate.php:148 actions/apisubscriptions.php:87
+#: actions/apitimelinefavorites.php:70 actions/apitimelinefriends.php:78
+#: actions/apitimelinehome.php:79 actions/apitimelinementions.php:79
+#: actions/apitimelineuser.php:81 actions/avatarbynickname.php:75
+#: actions/favoritesrss.php:74 actions/foaf.php:40 actions/foaf.php:58
+#: actions/hcard.php:67 actions/microsummary.php:62 actions/newmessage.php:116
+#: actions/otp.php:76 actions/remotesubscribe.php:145
+#: actions/remotesubscribe.php:154 actions/replies.php:73
+#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
+#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php: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
+msgid "No such user."
+msgstr "N'eus ket eus an implijer-se."
+
+#. TRANS: Page title. %1$s is user nickname, %2$d is page number
+#: actions/all.php:86
+#, php-format
+msgid "%1$s and friends, page %2$d"
+msgstr "%1$s hag e vignoned, pajenn %2$d"
+
+#. TRANS: Page title. %1$s is user nickname
+#. TRANS: H1 text. %1$s is user nickname
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
+#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
+#: lib/personalgroupnav.php:100
+#, php-format
+msgid "%s and friends"
+msgstr "%s hag e vignoned"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:103
+#, php-format
+msgid "Feed for friends of %s (RSS 1.0)"
+msgstr "Gwazh evit mignoned %s (RSS 1.0)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:112
+#, php-format
+msgid "Feed for friends of %s (RSS 2.0)"
+msgstr "Gwazh evit mignoned %s (RSS 2.0)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:121
+#, php-format
+msgid "Feed for friends of %s (Atom)"
+msgstr "Gwazh evit mignoned %s (Atom)"
+
+#. TRANS: %1$s is user nickname
+#: actions/all.php:134
+#, php-format
+msgid ""
+"This is the timeline for %s and friends but no one has posted anything yet."
+msgstr ""
+
+#: actions/all.php:139
+#, php-format
+msgid ""
+"Try subscribing to more people, [join a group](%%action.groups%%) or post "
+"something yourself."
+msgstr ""
+
+#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
+#: actions/all.php:142
+#, php-format
+msgid ""
+"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
+"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+msgstr ""
+
+#: actions/all.php:145 actions/replies.php:210 actions/showstream.php:211
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and then nudge %s or "
+"post a notice to his or her attention."
+msgstr ""
+
+#. TRANS: H1 text
+#: actions/all.php:178
+msgid "You and friends"
+msgstr "C'hwi hag o mignoned"
+
+#: actions/allrss.php:119 actions/apitimelinefriends.php:119
+#: actions/apitimelinehome.php:120
+#, php-format
+msgid "Updates from %1$s and friends on %2$s!"
+msgstr "Hizivadennoù %1$s ha mignoned e %2$s!"
+
+#: actions/apiaccountratelimitstatus.php:70
+#: actions/apiaccountupdatedeliverydevice.php:93
+#: actions/apiaccountupdateprofile.php:97
+#: actions/apiaccountupdateprofilebackgroundimage.php:94
+#: actions/apiaccountupdateprofilecolors.php:118
+#: actions/apiaccountverifycredentials.php:70 actions/apidirectmessage.php:156
+#: actions/apifavoritecreate.php:99 actions/apifavoritedestroy.php:100
+#: actions/apifriendshipscreate.php:100 actions/apifriendshipsdestroy.php:100
+#: actions/apifriendshipsshow.php:128 actions/apigroupcreate.php:138
+#: actions/apigroupismember.php:114 actions/apigroupjoin.php:155
+#: actions/apigroupleave.php:141 actions/apigrouplist.php:132
+#: actions/apigrouplistall.php:120 actions/apigroupmembership.php:106
+#: actions/apigroupshow.php:115 actions/apihelptest.php:88
+#: actions/apistatusesdestroy.php:102 actions/apistatusesretweets.php:112
+#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
+#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
+#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
+#: actions/apitimelineretweetedtome.php:121
+#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
+msgid "API method not found."
+msgstr "N'eo ket bet kavet an hentenn API !"
+
+#: actions/apiaccountupdatedeliverydevice.php:85
+#: actions/apiaccountupdateprofile.php:89
+#: actions/apiaccountupdateprofilebackgroundimage.php:86
+#: actions/apiaccountupdateprofilecolors.php:110
+#: actions/apiaccountupdateprofileimage.php:84 actions/apiblockcreate.php:89
+#: actions/apiblockdestroy.php:88 actions/apidirectmessagenew.php:117
+#: actions/apifavoritecreate.php:90 actions/apifavoritedestroy.php:91
+#: actions/apifriendshipscreate.php:91 actions/apifriendshipsdestroy.php:91
+#: actions/apigroupcreate.php:104 actions/apigroupjoin.php:91
+#: actions/apigroupleave.php:91 actions/apistatusesretweet.php:65
+#: actions/apistatusesupdate.php:118
+msgid "This method requires a POST."
+msgstr "Ezhomm en deus an argerzh-mañ eus ur POST."
+
+#: actions/apiaccountupdatedeliverydevice.php:105
+msgid ""
+"You must specify a parameter named 'device' with a value of one of: sms, im, "
+"none"
+msgstr ""
+
+#: actions/apiaccountupdatedeliverydevice.php:132
+msgid "Could not update user."
+msgstr "Diposubl eo hizivaat an implijer."
+
+#: actions/apiaccountupdateprofile.php:112
+#: actions/apiaccountupdateprofilebackgroundimage.php:194
+#: actions/apiaccountupdateprofilecolors.php:185
+#: actions/apiaccountupdateprofileimage.php:130 actions/apiusershow.php:108
+#: actions/avatarbynickname.php:80 actions/foaf.php:65 actions/hcard.php:74
+#: actions/replies.php:80 actions/usergroups.php:98 lib/galleryaction.php:66
+#: lib/profileaction.php:84
+msgid "User has no profile."
+msgstr "An implijer-mañ n'eus profil ebet dezhañ."
+
+#: actions/apiaccountupdateprofile.php:147
+msgid "Could not save profile."
+msgstr "Diposubl eo enrollañ ar profil."
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:108
+#: actions/apiaccountupdateprofileimage.php:97
+#: actions/apistatusesupdate.php:131 actions/avatarsettings.php:257
+#: actions/designadminpanel.php:122 actions/editapplication.php:118
+#: actions/newapplication.php:101 actions/newnotice.php:94
+#: lib/designsettings.php:283
+#, php-format
+msgid ""
+"The server was unable to handle that much POST data (%s bytes) due to its "
+"current configuration."
+msgstr ""
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:136
+#: actions/apiaccountupdateprofilebackgroundimage.php:146
+#: actions/apiaccountupdateprofilecolors.php:164
+#: actions/apiaccountupdateprofilecolors.php:174
+#: actions/groupdesignsettings.php:290 actions/groupdesignsettings.php:300
+#: actions/userdesignsettings.php:210 actions/userdesignsettings.php:220
+#: actions/userdesignsettings.php:263 actions/userdesignsettings.php:273
+msgid "Unable to save your design settings."
+msgstr ""
+
+#: actions/apiaccountupdateprofilebackgroundimage.php:187
+#: actions/apiaccountupdateprofilecolors.php:142
+msgid "Could not update your design."
+msgstr "Diposubl eo hizivat ho design."
+
+#: actions/apiblockcreate.php:105
+msgid "You cannot block yourself!"
+msgstr "Ne c'helloc'h ket ho stankañ ho unan !"
+
+#: actions/apiblockcreate.php:126
+msgid "Block user failed."
+msgstr "N'eo ket bet stanke an implijer."
+
+#: actions/apiblockdestroy.php:114
+msgid "Unblock user failed."
+msgstr "N'eus ket bet tu distankañ an implijer."
+
+#: actions/apidirectmessage.php:89
+#, php-format
+msgid "Direct messages from %s"
+msgstr "Kemennadennoù war-eeun kaset gant %s"
+
+#: actions/apidirectmessage.php:93
+#, php-format
+msgid "All the direct messages sent from %s"
+msgstr "An holl gemennadennoù war-eeun kaset gant %s"
+
+#: actions/apidirectmessage.php:101
+#, php-format
+msgid "Direct messages to %s"
+msgstr "Kemennadennoù war-eeun kaset da %s"
+
+#: actions/apidirectmessage.php:105
+#, php-format
+msgid "All the direct messages sent to %s"
+msgstr "An holl gemennadennoù war-eeun kaset da %s"
+
+#: actions/apidirectmessagenew.php:126
+msgid "No message text!"
+msgstr "Kemenadenn hep testenn !"
+
+#: actions/apidirectmessagenew.php:135 actions/newmessage.php:150
+#, php-format
+msgid "That's too long. Max message size is %d chars."
+msgstr "Re hir eo ! Ment hirañ ar gemenadenn a zo a %d arouezenn."
+
+#: actions/apidirectmessagenew.php:146
+msgid "Recipient user not found."
+msgstr "N'eo ket bet kavet ar resever."
+
+#: actions/apidirectmessagenew.php:150
+msgid "Can't send direct messages to users who aren't your friend."
+msgstr ""
+"Ne c'helloc'h ket kas kemennadennoù personel d'an implijerien n'int ket ho "
+"mignoned."
+
+#: actions/apifavoritecreate.php:108 actions/apifavoritedestroy.php:109
+#: actions/apistatusesdestroy.php:113
+msgid "No status found with that ID."
+msgstr "N'eo bet kavet statud ebet gant an ID-mañ."
+
+#: actions/apifavoritecreate.php:119
+msgid "This status is already a favorite."
+msgstr "Ur pennroll eo dija an ali-mañ."
+
+#: actions/apifavoritecreate.php:130 actions/favor.php:84 lib/command.php:176
+msgid "Could not create favorite."
+msgstr "Diposupl eo krouiñ ar pennroll-mañ."
+
+#: actions/apifavoritedestroy.php:122
+msgid "That status is not a favorite."
+msgstr "N'eo ket ar statud-mañ ur pennroll."
+
+#: actions/apifavoritedestroy.php:134 actions/disfavor.php:87
+msgid "Could not delete favorite."
+msgstr "Diposupl eo dilemel ar pennroll-mañ."
+
+#: actions/apifriendshipscreate.php:109
+msgid "Could not follow user: User not found."
+msgstr "Diposupl eo heuliañ an implijer : N'eo ket bet kavet an implijer."
+
+#: actions/apifriendshipscreate.php:118
+#, php-format
+msgid "Could not follow user: %s is already on your list."
+msgstr "Diposubl eo heuliañ an implijer : war ho listenn emañ %s dija."
+
+#: actions/apifriendshipsdestroy.php:109
+msgid "Could not unfollow user: User not found."
+msgstr ""
+"Diposupl eo paouez heuliañ an implijer : N'eo ket bet kavet an implijer."
+
+#: actions/apifriendshipsdestroy.php:120
+msgid "You cannot unfollow yourself."
+msgstr "Ne c'hallit ket chom hep ho heuliañ hoc'h-unan."
+
+#: actions/apifriendshipsexists.php:94
+msgid "Two user ids or screen_names must be supplied."
+msgstr ""
+
+#: actions/apifriendshipsshow.php:134
+msgid "Could not determine source user."
+msgstr "Diposubl eo termeniñ an implijer mammenn."
+
+#: actions/apifriendshipsshow.php:142
+msgid "Could not find target user."
+msgstr "Diposubl eo kavout an implijer pal."
+
+#: actions/apigroupcreate.php:166 actions/editgroup.php:186
+#: actions/newgroup.php:126 actions/profilesettings.php:215
+#: actions/register.php:205
+msgid "Nickname must have only lowercase letters and numbers and no spaces."
+msgstr ""
+
+#: actions/apigroupcreate.php:175 actions/editgroup.php:190
+#: actions/newgroup.php:130 actions/profilesettings.php:238
+#: actions/register.php:208
+msgid "Nickname already in use. Try another one."
+msgstr "Implijet eo dija al lesanv-se. Klaskit unan all."
+
+#: actions/apigroupcreate.php:182 actions/editgroup.php:193
+#: actions/newgroup.php:133 actions/profilesettings.php:218
+#: actions/register.php:210
+msgid "Not a valid nickname."
+msgstr "N'eo ket ul lesanv mat."
+
+#: actions/apigroupcreate.php:198 actions/editapplication.php:215
+#: actions/editgroup.php:199 actions/newapplication.php:203
+#: actions/newgroup.php:139 actions/profilesettings.php:222
+#: actions/register.php:217
+msgid "Homepage is not a valid URL."
+msgstr "N'eo ket chomlec'h al lec'hienn personel un URL reizh."
+
+#: actions/apigroupcreate.php:207 actions/editgroup.php:202
+#: actions/newgroup.php:142 actions/profilesettings.php:225
+#: actions/register.php:220
+msgid "Full name is too long (max 255 chars)."
+msgstr "Re hir eo an anv klok (255 arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:215 actions/editapplication.php:190
+#: actions/newapplication.php:172
+#, php-format
+msgid "Description is too long (max %d chars)."
+msgstr "Re hir eo an deskrivadur (%d arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:226 actions/editgroup.php:208
+#: actions/newgroup.php:148 actions/profilesettings.php:232
+#: actions/register.php:227
+msgid "Location is too long (max 255 chars)."
+msgstr "Re hir eo al lec'hiadur (255 arouezenn d'ar muiañ)."
+
+#: actions/apigroupcreate.php:245 actions/editgroup.php:219
+#: actions/newgroup.php:159
+#, php-format
+msgid "Too many aliases! Maximum %d."
+msgstr "Re a aliasoù ! %d d'ar muiañ."
+
+#: actions/apigroupcreate.php:266 actions/editgroup.php:228
+#: actions/newgroup.php:168
+#, php-format
+msgid "Invalid alias: \"%s\""
+msgstr "Alias fall : \"%s\""
+
+#: actions/apigroupcreate.php:275 actions/editgroup.php:232
+#: actions/newgroup.php:172
+#, php-format
+msgid "Alias \"%s\" already in use. Try another one."
+msgstr "Implijet e vez an alias \"%s\" dija. Klaskit gant unan all."
+
+#: actions/apigroupcreate.php:288 actions/editgroup.php:238
+#: actions/newgroup.php:178
+msgid "Alias can't be the same as nickname."
+msgstr "Ne c'hell ket an alias bezañ ar memes hini eget al lesanv."
+
+#: actions/apigroupismember.php:95 actions/apigroupjoin.php:104
+#: actions/apigroupleave.php:104 actions/apigroupmembership.php:91
+#: actions/apigroupshow.php:82 actions/apitimelinegroup.php:91
+msgid "Group not found!"
+msgstr "N'eo ket bet kavet ar strollad"
+
+#: actions/apigroupjoin.php:110 actions/joingroup.php:100
+msgid "You are already a member of that group."
+msgstr "Un ezel eus ar strollad-mañ eo dija."
+
+#: actions/apigroupjoin.php:119 actions/joingroup.php:105 lib/command.php:221
+msgid "You have been blocked from that group by the admin."
+msgstr "Stanket oc'h bet eus ar strollad-mañ gant ur merour."
+
+#: actions/apigroupjoin.php:138 actions/joingroup.php:134
+#, php-format
+msgid "Could not join user %1$s to group %2$s."
+msgstr "Diposubl eo stagañ an implijer %1$s d'ar strollad %2$s."
+
+#: actions/apigroupleave.php:114
+msgid "You are not a member of this group."
+msgstr "N'oc'h ket ezel eus ar strollad-mañ."
+
+#: actions/apigroupleave.php:124 actions/leavegroup.php:129
+#, php-format
+msgid "Could not remove user %1$s from group %2$s."
+msgstr "Diposubl eo dilemel an implijer %1$s deus ar strollad %2$s."
+
+#: actions/apigrouplist.php:95
+#, php-format
+msgid "%s's groups"
+msgstr "Strollad %s"
+
+#: actions/apigrouplistall.php:90 actions/usergroups.php:62
+#, php-format
+msgid "%s groups"
+msgstr "Strolladoù %s"
+
+#: actions/apigrouplistall.php:94
+#, php-format
+msgid "groups on %s"
+msgstr "strolladoù war %s"
+
+#: actions/apioauthauthorize.php:101
+msgid "No oauth_token parameter provided."
+msgstr "Arventenn oauth_token nann-roet."
+
+#: actions/apioauthauthorize.php:106
+msgid "Invalid token."
+msgstr "Fichenn direizh."
+
+#: actions/apioauthauthorize.php:123 actions/avatarsettings.php:268
+#: actions/deletenotice.php:157 actions/disfavor.php:74
+#: actions/emailsettings.php:238 actions/favor.php:75 actions/geocode.php:54
+#: actions/groupblock.php:66 actions/grouplogo.php:312
+#: actions/groupunblock.php:66 actions/imsettings.php:206
+#: actions/invite.php:56 actions/login.php:115 actions/makeadmin.php:66
+#: actions/newmessage.php:135 actions/newnotice.php:103 actions/nudge.php:80
+#: actions/oauthappssettings.php:159 actions/oauthconnectionssettings.php:135
+#: actions/othersettings.php:145 actions/passwordsettings.php:138
+#: actions/profilesettings.php:194 actions/recoverpassword.php:337
+#: actions/register.php:165 actions/remotesubscribe.php:77
+#: actions/repeat.php:83 actions/smssettings.php:228 actions/subedit.php:38
+#: actions/subscribe.php:86 actions/tagother.php:166
+#: actions/unsubscribe.php:69 actions/userauthorization.php:52
+#: lib/designsettings.php:294
+msgid "There was a problem with your session token. Try again, please."
+msgstr ""
+
+#: actions/apioauthauthorize.php:135
+msgid "Invalid nickname / password!"
+msgstr "Lesanv / ger tremen direizh !"
+
+#: actions/apioauthauthorize.php:159
+msgid "Database error deleting OAuth application user."
+msgstr ""
+
+#: actions/apioauthauthorize.php:185
+msgid "Database error inserting OAuth application user."
+msgstr ""
+
+#: actions/apioauthauthorize.php:214
+#, php-format
+msgid ""
+"The request token %s has been authorized. Please exchange it for an access "
+"token."
+msgstr ""
+
+#: actions/apioauthauthorize.php:227
+#, php-format
+msgid "The request token %s has been denied and revoked."
+msgstr ""
+
+#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
+#: actions/designadminpanel.php:103 actions/editapplication.php:139
+#: actions/emailsettings.php:256 actions/grouplogo.php:322
+#: actions/imsettings.php:220 actions/newapplication.php:121
+#: actions/oauthconnectionssettings.php:147 actions/recoverpassword.php:44
+#: actions/smssettings.php:248 lib/designsettings.php:304
+msgid "Unexpected form submission."
+msgstr ""
+
+#: actions/apioauthauthorize.php:259
+msgid "An application would like to connect to your account"
+msgstr ""
+
+#: actions/apioauthauthorize.php:276
+msgid "Allow or deny access"
+msgstr "Aotreañ pe nac'h ar moned"
+
+#: actions/apioauthauthorize.php:292
+#, php-format
+msgid ""
+"The application <strong>%1$s</strong> by <strong>%2$s</strong> would like "
+"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
+"give access to your %4$s account to third parties you trust."
+msgstr ""
+
+#: actions/apioauthauthorize.php:310 lib/action.php:438
+msgid "Account"
+msgstr "Kont"
+
+#: actions/apioauthauthorize.php:313 actions/login.php:230
+#: actions/profilesettings.php:106 actions/register.php:424
+#: actions/showgroup.php:244 actions/tagother.php:94
+#: actions/userauthorization.php:145 lib/groupeditform.php:152
+#: lib/userprofile.php:131
+msgid "Nickname"
+msgstr "Lesanv"
+
+#: actions/apioauthauthorize.php:316 actions/login.php:233
+#: actions/register.php:429 lib/accountsettingsaction.php:116
+msgid "Password"
+msgstr "Ger-tremen"
+
+#: actions/apioauthauthorize.php:328
+msgid "Deny"
+msgstr "Nac'hañ"
+
+#: actions/apioauthauthorize.php:334
+msgid "Allow"
+msgstr "Aotreañ"
+
+#: actions/apioauthauthorize.php:351
+msgid "Allow or deny access to your account information."
+msgstr "Aotreañ pe nac'hañ ar moned da ditouroù ho kont."
+
+#: actions/apistatusesdestroy.php:107
+msgid "This method requires a POST or DELETE."
+msgstr "Ezhomm en deus an argerzh-mañ ur POST pe un DELETE."
+
+#: actions/apistatusesdestroy.php:130
+msgid "You may not delete another user's status."
+msgstr "Ne c'helloc'h ket dilemel statud un implijer all."
+
+#: actions/apistatusesretweet.php:75 actions/apistatusesretweets.php:72
+#: actions/deletenotice.php:52 actions/shownotice.php:92
+msgid "No such notice."
+msgstr "N'eus ket eus an ali-se."
+
+#: actions/apistatusesretweet.php:83
+msgid "Cannot repeat your own notice."
+msgstr "Ne c'helloc'h ket adlavar ho alioù."
+
+#: actions/apistatusesretweet.php:91
+msgid "Already repeated that notice."
+msgstr "Adlavaret o peus dija an ali-mañ."
+
+#: actions/apistatusesshow.php:138
+msgid "Status deleted."
+msgstr "Statud diverket."
+
+#: actions/apistatusesshow.php:144
+msgid "No status with that ID found."
+msgstr "N'eo ket bet kavet a statud evit an ID-mañ"
+
+#: actions/apistatusesupdate.php:161 actions/newnotice.php:155
+#: lib/mailhandler.php:60
+#, php-format
+msgid "That's too long. Max notice size is %d chars."
+msgstr "Re hir eo ! Ment hirañ an ali a zo a %d arouezenn."
+
+#: actions/apistatusesupdate.php:202
+msgid "Not found"
+msgstr "N'eo ket bet kavet"
+
+#: actions/apistatusesupdate.php:225 actions/newnotice.php:178
+#, php-format
+msgid "Max notice size is %d chars, including attachment URL."
+msgstr ""
+
+#: actions/apisubscriptions.php:231 actions/apisubscriptions.php:261
+msgid "Unsupported format."
+msgstr "Diembreget eo ar furmad-se."
+
+#: actions/apitimelinefavorites.php:108
+#, php-format
+msgid "%1$s / Favorites from %2$s"
+msgstr "%1$s / Pennroll %2$s"
+
+#: actions/apitimelinefavorites.php:117
+#, php-format
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s statud pennroll da %2$s / %2$s."
+
+#: actions/apitimelinementions.php:117
+#, php-format
+msgid "%1$s / Updates mentioning %2$s"
+msgstr "%1$s / Hizivadennoù a veneg %2$s"
+
+#: actions/apitimelinementions.php:127
+#, php-format
+msgid "%1$s updates that reply to updates from %2$s / %3$s."
+msgstr ""
+
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
+#, php-format
+msgid "%s public timeline"
+msgstr "Oberezhioù publik %s"
+
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
+#, php-format
+msgid "%s updates from everyone!"
+msgstr "%s statud an holl !"
+
+#: actions/apitimelineretweetedtome.php:111
+#, php-format
+msgid "Repeated to %s"
+msgstr "Adkemeret evit %s"
+
+#: actions/apitimelineretweetsofme.php:114
+#, php-format
+msgid "Repeats of %s"
+msgstr "Adkemeret eus %s"
+
+#: actions/apitimelinetag.php:102 actions/tag.php:67
+#, php-format
+msgid "Notices tagged with %s"
+msgstr "Alioù merket gant %s"
+
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
+#, php-format
+msgid "Updates tagged with %1$s on %2$s!"
+msgstr ""
+
+#: actions/apiusershow.php:96
+msgid "Not found."
+msgstr "N'eo ket bet kavet."
+
+#: actions/attachment.php:73
+msgid "No such attachment."
+msgstr "N'eo ket bet kavet ar restr stag."
+
+#: actions/avatarbynickname.php:59 actions/blockedfromgroup.php:73
+#: actions/editgroup.php:84 actions/groupdesignsettings.php:84
+#: actions/grouplogo.php:86 actions/groupmembers.php:76
+#: actions/grouprss.php:91 actions/showgroup.php:121
+msgid "No nickname."
+msgstr "Lesanv ebet."
+
+#: actions/avatarbynickname.php:64
+msgid "No size."
+msgstr "Ment ebet."
+
+#: actions/avatarbynickname.php:69
+msgid "Invalid size."
+msgstr "Ment direizh."
+
+#: actions/avatarsettings.php:67 actions/showgroup.php:229
+#: lib/accountsettingsaction.php:112
+msgid "Avatar"
+msgstr "Avatar"
+
+#: actions/avatarsettings.php:78
+#, php-format
+msgid "You can upload your personal avatar. The maximum file size is %s."
+msgstr ""
+
+#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
+#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
+#: actions/userrss.php:106
+msgid "User without matching profile"
+msgstr "Implijer hep profil klotaus"
+
+#: actions/avatarsettings.php:119 actions/avatarsettings.php:197
+#: actions/grouplogo.php:254
+msgid "Avatar settings"
+msgstr "Arventennoù an avatar"
+
+#: actions/avatarsettings.php:127 actions/avatarsettings.php:205
+#: actions/grouplogo.php:202 actions/grouplogo.php:262
+msgid "Original"
+msgstr "Orin"
+
+#: actions/avatarsettings.php:142 actions/avatarsettings.php:217
+#: actions/grouplogo.php:213 actions/grouplogo.php:274
+msgid "Preview"
+msgstr "Rakwelet"
+
+#: actions/avatarsettings.php:149 actions/showapplication.php:252
+#: lib/deleteuserform.php:66 lib/noticelist.php:655
+msgid "Delete"
+msgstr "Diverkañ"
+
+#: actions/avatarsettings.php:166 actions/grouplogo.php:236
+msgid "Upload"
+msgstr "Enporzhiañ"
+
+#: actions/avatarsettings.php:231 actions/grouplogo.php:289
+msgid "Crop"
+msgstr "Adframmañ"
+
+#: actions/avatarsettings.php:328
+msgid "Pick a square area of the image to be your avatar"
+msgstr ""
+
+#: actions/avatarsettings.php:343 actions/grouplogo.php:380
+msgid "Lost our file data."
+msgstr "Kollet eo bet roadennoù."
+
+#: actions/avatarsettings.php:366
+msgid "Avatar updated."
+msgstr "Hizivaet eo bet an avatar."
+
+#: actions/avatarsettings.php:369
+msgid "Failed updating avatar."
+msgstr "Ur gudenn 'zo bet e-pad hizivadenn an avatar."
+
+#: actions/avatarsettings.php:393
+msgid "Avatar deleted."
+msgstr "Dilammet eo bet an Avatar."
+
+#: actions/block.php:69
+msgid "You already blocked that user."
+msgstr "Stanket o peus dija an implijer-mañ."
+
+#: actions/block.php:105 actions/block.php:128 actions/groupblock.php:160
+msgid "Block user"
+msgstr "Stankañ an implijer-mañ"
+
+#: actions/block.php:130
+msgid ""
+"Are you sure you want to block this user? Afterwards, they will be "
+"unsubscribed from you, unable to subscribe to you in the future, and you "
+"will not be notified of any @-replies from them."
+msgstr ""
+
+#: actions/block.php:143 actions/deleteapplication.php:153
+#: actions/deletenotice.php:145 actions/deleteuser.php:150
+#: actions/groupblock.php:178
+msgid "No"
+msgstr "Ket"
+
+#: actions/block.php:143 actions/deleteuser.php:150
+msgid "Do not block this user"
+msgstr "Arabat stankañ an implijer-mañ"
+
+#: actions/block.php:144 actions/deleteapplication.php:158
+#: actions/deletenotice.php:146 actions/deleteuser.php:151
+#: actions/groupblock.php:179 lib/repeatform.php:132
+msgid "Yes"
+msgstr "Ya"
+
+#: actions/block.php:144 actions/groupmembers.php:355 lib/blockform.php:80
+msgid "Block this user"
+msgstr "Stankañ an implijer-mañ"
+
+#: actions/block.php:167
+msgid "Failed to save block information."
+msgstr "Diposubl eo enrollañ an titouroù stankañ."
+
+#: actions/blockedfromgroup.php:80 actions/blockedfromgroup.php:87
+#: actions/editgroup.php:100 actions/foafgroup.php:44 actions/foafgroup.php:62
+#: actions/foafgroup.php:69 actions/groupblock.php:86 actions/groupbyid.php:83
+#: actions/groupdesignsettings.php:100 actions/grouplogo.php:102
+#: actions/groupmembers.php:83 actions/groupmembers.php:90
+#: actions/grouprss.php:98 actions/grouprss.php:105
+#: actions/groupunblock.php:86 actions/joingroup.php:82
+#: actions/joingroup.php:93 actions/leavegroup.php:82
+#: actions/leavegroup.php:93 actions/makeadmin.php:86
+#: actions/showgroup.php:138 actions/showgroup.php:146 lib/command.php:212
+#: lib/command.php:260
+msgid "No such group."
+msgstr "N'eus ket eus ar strollad-se."
+
+#: actions/blockedfromgroup.php:97
+#, php-format
+msgid "%s blocked profiles"
+msgstr "%s profil stanket"
+
+#: actions/blockedfromgroup.php:100
+#, php-format
+msgid "%1$s blocked profiles, page %2$d"
+msgstr "%1$s profil stanket, pajenn %2$d"
+
+#: actions/blockedfromgroup.php:115
+msgid "A list of the users blocked from joining this group."
+msgstr ""
+"Ur roll eus an implijerien evit pere eo stanket an enskrivadur d'ar strollad."
+
+#: actions/blockedfromgroup.php:288
+msgid "Unblock user from group"
+msgstr "Distankañ implijer ar strollad"
+
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:69
+msgid "Unblock"
+msgstr "Distankañ"
+
+#: actions/blockedfromgroup.php:320 lib/unblockform.php:80
+msgid "Unblock this user"
+msgstr "Distankañ an implijer-se"
+
+#: actions/bookmarklet.php:50
+msgid "Post to "
+msgstr "Postañ war "
+
+#: actions/confirmaddress.php:75
+msgid "No confirmation code."
+msgstr "Kod kadarnaat ebet."
+
+#: actions/confirmaddress.php:80
+msgid "Confirmation code not found."
+msgstr "N'eo ket bet kavet ar c'hod kadarnaat."
+
+#: actions/confirmaddress.php:85
+msgid "That confirmation code is not for you!"
+msgstr "N'eo ket ar c'hod-se evidoc'h !"
+
+#: actions/confirmaddress.php:90
+#, php-format
+msgid "Unrecognized address type %s"
+msgstr "N'eo ket bet anavezet seurt ar chomlec'h %s"
+
+#: actions/confirmaddress.php:94
+msgid "That address has already been confirmed."
+msgstr "Kadarnaet eo bet dija ar chomlec'h-mañ."
+
+#: actions/confirmaddress.php:114 actions/emailsettings.php:296
+#: actions/emailsettings.php:427 actions/imsettings.php:258
+#: actions/imsettings.php:401 actions/othersettings.php:174
+#: actions/profilesettings.php:283 actions/smssettings.php:278
+#: actions/smssettings.php:420
+msgid "Couldn't update user."
+msgstr "Diposubl eo hizivaat an implijer."
+
+#: actions/confirmaddress.php:126 actions/emailsettings.php:391
+#: actions/imsettings.php:363 actions/smssettings.php:382
+msgid "Couldn't delete email confirmation."
+msgstr "Diposubl eo dilemel ar postel kadarnadur."
+
+#: actions/confirmaddress.php:144
+msgid "Confirm address"
+msgstr "Chomlec'h kadarnaet"
+
+#: actions/confirmaddress.php:159
+#, php-format
+msgid "The address \"%s\" has been confirmed for your account."
+msgstr "Kadarnaet eo bet ar chomlec'h \"%s\" evit ho kont."
+
+#: actions/conversation.php:99
+msgid "Conversation"
+msgstr "Kaozeadenn"
+
+#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
+msgid "Notices"
+msgstr "Ali"
+
+#: actions/deleteapplication.php:63
+msgid "You must be logged in to delete an application."
+msgstr "Rankout a reoc'h bezañ kevreet evit dilemel ur poellad."
+
+#: actions/deleteapplication.php:71
+msgid "Application not found."
+msgstr "N'eo ket bet kavet ar poellad"
+
+#: actions/deleteapplication.php:78 actions/editapplication.php:77
+#: actions/showapplication.php:94
+msgid "You are not the owner of this application."
+msgstr "N'oc'h ket perc'henn ar poellad-se."
+
+#: actions/deleteapplication.php:102 actions/editapplication.php:127
+#: actions/newapplication.php:110 actions/showapplication.php:118
+#: lib/action.php:1217
+msgid "There was a problem with your session token."
+msgstr ""
+
+#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
+msgid "Delete application"
+msgstr "Dilemel ar poelad"
+
+#: actions/deleteapplication.php:149
+msgid ""
+"Are you sure you want to delete this application? This will clear all data "
+"about the application from the database, including all existing user "
+"connections."
+msgstr ""
+
+#: actions/deleteapplication.php:156
+msgid "Do not delete this application"
+msgstr "Arabat eo dilemel ar poellad-mañ"
+
+#: actions/deleteapplication.php:160
+msgid "Delete this application"
+msgstr "Dilemel ar poelad-se"
+
+#. TRANS: Client error message
+#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
+#: actions/groupblock.php:61 actions/groupunblock.php:61 actions/logout.php:69
+#: actions/makeadmin.php:61 actions/newmessage.php:87 actions/newnotice.php:89
+#: actions/nudge.php:63 actions/subedit.php:31 actions/subscribe.php:96
+#: actions/tagother.php:33 actions/unsubscribe.php:52
+#: lib/adminpanelaction.php:73 lib/profileformaction.php:63
+#: lib/settingsaction.php:72
+msgid "Not logged in."
+msgstr "Nann-luget."
+
+#: actions/deletenotice.php:71
+msgid "Can't delete this notice."
+msgstr "Diposupl eo dilemel an ali-mañ."
+
+#: actions/deletenotice.php:103
+msgid ""
+"You are about to permanently delete a notice. Once this is done, it cannot "
+"be undone."
+msgstr ""
+
+#: actions/deletenotice.php:109 actions/deletenotice.php:141
+msgid "Delete notice"
+msgstr "Dilemel un ali"
+
+#: actions/deletenotice.php:144
+msgid "Are you sure you want to delete this notice?"
+msgstr "Ha sur oc'h ho peus c'hoant dilemel an ali-mañ ?"
+
+#: actions/deletenotice.php:145
+msgid "Do not delete this notice"
+msgstr "Arabat dilemel an ali-mañ"
+
+#: actions/deletenotice.php:146 lib/noticelist.php:655
+msgid "Delete this notice"
+msgstr "Dilemel an ali-mañ"
+
+#: actions/deleteuser.php:67
+msgid "You cannot delete users."
+msgstr "Ne c'helloc'h ket diverkañ implijerien"
+
+#: actions/deleteuser.php:74
+msgid "You can only delete local users."
+msgstr "Ne c'helloc'h nemet dilemel an implijerien lec'hel."
+
+#: actions/deleteuser.php:110 actions/deleteuser.php:133
+msgid "Delete user"
+msgstr "Diverkañ an implijer"
+
+#: actions/deleteuser.php:136
+msgid ""
+"Are you sure you want to delete this user? This will clear all data about "
+"the user from the database, without a backup."
+msgstr ""
+
+#: actions/deleteuser.php:151 lib/deleteuserform.php:77
+msgid "Delete this user"
+msgstr "Diverkañ an implijer-se"
+
+#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
+#: lib/groupnav.php:119
+msgid "Design"
+msgstr "Design"
+
+#: actions/designadminpanel.php:73
+msgid "Design settings for this StatusNet site."
+msgstr "Arventennoù design evit al lec'hienn StatusNet-mañ."
+
+#: actions/designadminpanel.php:275
+msgid "Invalid logo URL."
+msgstr "URL fall evit al logo."
+
+#: actions/designadminpanel.php:279
+#, php-format
+msgid "Theme not available: %s"
+msgstr "N'eus ket tu kaout an dodenn : %s"
+
+#: actions/designadminpanel.php:375
+msgid "Change logo"
+msgstr "Cheñch al logo"
+
+#: actions/designadminpanel.php:380
+msgid "Site logo"
+msgstr "Logo al lec'hienn"
+
+#: actions/designadminpanel.php:387
+msgid "Change theme"
+msgstr "Lakaat un dodenn all"
+
+#: actions/designadminpanel.php:404
+msgid "Site theme"
+msgstr "Dodenn al lec'hienn"
+
+#: actions/designadminpanel.php:405
+msgid "Theme for the site."
+msgstr "Dodenn evit al lec'hienn."
+
+#: actions/designadminpanel.php:417 lib/designsettings.php:101
+msgid "Change background image"
+msgstr "Kemmañ ar skeudenn foñs"
+
+#: actions/designadminpanel.php:422 actions/designadminpanel.php:497
+#: lib/designsettings.php:178
+msgid "Background"
+msgstr "Background"
+
+#: actions/designadminpanel.php:427
+#, php-format
+msgid ""
+"You can upload a background image for the site. The maximum file size is %1"
+"$s."
+msgstr ""
+
+#: actions/designadminpanel.php:457 lib/designsettings.php:139
+msgid "On"
+msgstr "Gweredekaet"
+
+#: actions/designadminpanel.php:473 lib/designsettings.php:155
+msgid "Off"
+msgstr "Diweredekaet"
+
+#: actions/designadminpanel.php:474 lib/designsettings.php:156
+msgid "Turn background image on or off."
+msgstr "Gweredekaat pe diweredekaat ar skeudenn foñs."
+
+#: actions/designadminpanel.php:479 lib/designsettings.php:161
+msgid "Tile background image"
+msgstr ""
+
+#: actions/designadminpanel.php:488 lib/designsettings.php:170
+msgid "Change colours"
+msgstr "Kemmañ al livioù"
+
+#: actions/designadminpanel.php:510 lib/designsettings.php:191
+msgid "Content"
+msgstr "Endalc'h"
+
+#: actions/designadminpanel.php:523 lib/designsettings.php:204
+msgid "Sidebar"
+msgstr "Barenn kostez"
+
+#: actions/designadminpanel.php:536 lib/designsettings.php:217
+msgid "Text"
+msgstr "Testenn"
+
+#: actions/designadminpanel.php:549 lib/designsettings.php:230
+msgid "Links"
+msgstr "Liammoù"
+
+#: actions/designadminpanel.php:577 lib/designsettings.php:247
+msgid "Use defaults"
+msgstr "Implijout an talvoudoù dre ziouer"
+
+#: actions/designadminpanel.php:578 lib/designsettings.php:248
+msgid "Restore default designs"
+msgstr "Adlakaat an neuz dre ziouer."
+
+#: actions/designadminpanel.php:584 lib/designsettings.php:254
+msgid "Reset back to default"
+msgstr "Adlakaat an arventennoù dre ziouer"
+
+#: actions/designadminpanel.php:586 actions/emailsettings.php:195
+#: actions/imsettings.php:163 actions/othersettings.php:126
+#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
+#: actions/tagother.php:154 actions/useradminpanel.php:294
+#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
+#: lib/designsettings.php:256 lib/groupeditform.php:202
+msgid "Save"
+msgstr "Enrollañ"
+
+#: actions/designadminpanel.php:587 lib/designsettings.php:257
+msgid "Save design"
+msgstr "Enrollañ an design"
+
+#: actions/disfavor.php:81
+msgid "This notice is not a favorite!"
+msgstr "N'eo ket an ali-mañ ur pennroll !"
+
+#: actions/disfavor.php:94
+msgid "Add to favorites"
+msgstr "Ouzhpennañ d'ar pennrolloù"
+
+#: actions/doc.php:158
+#, php-format
+msgid "No such document \"%s\""
+msgstr "N'eo ket bet kavet ar restr \"%s\""
+
+#: actions/editapplication.php:54
+msgid "Edit Application"
+msgstr "Kemmañ ar poellad"
+
+#: actions/editapplication.php:66
+msgid "You must be logged in to edit an application."
+msgstr "Ret eo bezañ kevreet evit kemmañ ur poellad."
+
+#: actions/editapplication.php:81 actions/oauthconnectionssettings.php:166
+#: actions/showapplication.php:87
+msgid "No such application."
+msgstr "N'eus ket eus an arload-mañ."
+
+#: actions/editapplication.php:161
+msgid "Use this form to edit your application."
+msgstr "Implijit ar furmskrid-mañ evit kemmañ ho poellad."
+
+#: actions/editapplication.php:177 actions/newapplication.php:159
+msgid "Name is required."
+msgstr "Ret eo lakaat un anv."
+
+#: actions/editapplication.php:180 actions/newapplication.php:165
+msgid "Name is too long (max 255 chars)."
+msgstr "Re hir eo an anv (255 arouezenn d'ar muiañ)."
+
+#: actions/editapplication.php:183 actions/newapplication.php:162
+msgid "Name already in use. Try another one."
+msgstr "Implijet eo dija an anv-mañ. Klaskit unan all."
+
+#: actions/editapplication.php:186 actions/newapplication.php:168
+msgid "Description is required."
+msgstr "Ezhomm 'zo un deskrivadur."
+
+#: actions/editapplication.php:194
+msgid "Source URL is too long."
+msgstr "Mammenn URL re hir."
+
+#: actions/editapplication.php:200 actions/newapplication.php:185
+msgid "Source URL is not valid."
+msgstr "N'eo ket mat an URL mammenn."
+
+#: actions/editapplication.php:203 actions/newapplication.php:188
+msgid "Organization is required."
+msgstr "Ezhomm 'zo eus an aozadur."
+
+#: actions/editapplication.php:206 actions/newapplication.php:191
+msgid "Organization is too long (max 255 chars)."
+msgstr "Re hir eo an aozadur (255 arouezenn d'ar muiañ)."
+
+#: actions/editapplication.php:209 actions/newapplication.php:194
+msgid "Organization homepage is required."
+msgstr "Ret eo kaout pajenn degemer an aozadur."
+
+#: actions/editapplication.php:218 actions/newapplication.php:206
+msgid "Callback is too long."
+msgstr "Rez hir eo ar c'hounadur (Callback)."
+
+#: actions/editapplication.php:225 actions/newapplication.php:215
+msgid "Callback URL is not valid."
+msgstr "N'eo ket mat an URL kounadur (Callback)."
+
+#: actions/editapplication.php:258
+msgid "Could not update application."
+msgstr "Diposubl eo hizivaat ar poellad"
+
+#: actions/editgroup.php:56
+#, php-format
+msgid "Edit %s group"
+msgstr "Kemmañ ar strollad %s"
+
+#: actions/editgroup.php:68 actions/grouplogo.php:70 actions/newgroup.php:65
+msgid "You must be logged in to create a group."
+msgstr "Rankout a reoc'h bezañ luget evit krouiñ ur strollad."
+
+#: actions/editgroup.php:107 actions/editgroup.php:172
+#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
+msgid "You must be an admin to edit the group."
+msgstr "Rankout a reer bezañ merour evit kemmañ ar strollad."
+
+#: actions/editgroup.php:158
+msgid "Use this form to edit the group."
+msgstr "Leunit ar furmskrid-mañ evit kemmañ dibarzhioù ar strollad."
+
+#: actions/editgroup.php:205 actions/newgroup.php:145
+#, php-format
+msgid "description is too long (max %d chars)."
+msgstr "re hir eo an deskrivadur (%d arouezenn d'ar muiañ)."
+
+#: actions/editgroup.php:258
+msgid "Could not update group."
+msgstr "Diposubl eo hizivaat ar strollad."
+
+#: actions/editgroup.php:264 classes/User_group.php:493
+msgid "Could not create aliases."
+msgstr "Diposubl eo krouiñ an aliasoù."
+
+#: actions/editgroup.php:280
+msgid "Options saved."
+msgstr "Enrollet eo bet ho dibarzhioù."
+
+#: actions/emailsettings.php:60
+msgid "Email settings"
+msgstr "Arventennoù ar postel"
+
+#: actions/emailsettings.php:71
+#, php-format
+msgid "Manage how you get email from %%site.name%%."
+msgstr "Merañ ar posteloù a fell deoc'h resevout a-berzh %%site.name%%."
+
+#: actions/emailsettings.php:100 actions/imsettings.php:100
+#: actions/smssettings.php:104
+msgid "Address"
+msgstr "Chomlec'h"
+
+#: actions/emailsettings.php:105
+msgid "Current confirmed email address."
+msgstr "Chomlec'h postel gwiriekaet er mare-mañ."
+
+#: actions/emailsettings.php:107 actions/emailsettings.php:140
+#: actions/imsettings.php:108 actions/smssettings.php:115
+#: actions/smssettings.php:158
+msgid "Remove"
+msgstr "Dilemel"
+
+#: actions/emailsettings.php:113
+msgid ""
+"Awaiting confirmation on this address. Check your inbox (and spam box!) for "
+"a message with further instructions."
+msgstr ""
+
+#: actions/emailsettings.php:117 actions/imsettings.php:120
+#: actions/smssettings.php:126 lib/applicationeditform.php:331
+#: lib/applicationeditform.php:332
+msgid "Cancel"
+msgstr "Nullañ"
+
+#: actions/emailsettings.php:121
+msgid "Email address"
+msgstr "Chomlec'h postel"
+
+#: actions/emailsettings.php:123
+msgid "Email address, like \"UserName@example.org\""
+msgstr "Chomlec'h postel, evel \"AnvImplijer@example.org\""
+
+#: actions/emailsettings.php:126 actions/imsettings.php:133
+#: actions/smssettings.php:145
+msgid "Add"
+msgstr "Ouzhpennañ"
+
+#: actions/emailsettings.php:133 actions/smssettings.php:152
+msgid "Incoming email"
+msgstr "Postel o tont"
+
+#: actions/emailsettings.php:138 actions/smssettings.php:157
+msgid "Send email to this address to post new notices."
+msgstr ""
+
+#: actions/emailsettings.php:145 actions/smssettings.php:162
+msgid "Make a new email address for posting to; cancels the old one."
+msgstr ""
+
+#: actions/emailsettings.php:148 actions/smssettings.php:164
+msgid "New"
+msgstr "Nevez"
+
+#: actions/emailsettings.php:153 actions/imsettings.php:139
+#: actions/smssettings.php:169
+msgid "Preferences"
+msgstr "Penndibaboù"
+
+#: actions/emailsettings.php:158
+msgid "Send me notices of new subscriptions through email."
+msgstr ""
+
+#: actions/emailsettings.php:163
+msgid "Send me email when someone adds my notice as a favorite."
+msgstr "Kas din ur postel pa lak unan bennak unan eus va alioù evel pennroll."
+
+#: actions/emailsettings.php:169
+msgid "Send me email when someone sends me a private message."
+msgstr "Kas din ur postel pa gas unan bennak ur gemennadenn bersonel din."
+
+#: actions/emailsettings.php:174
+msgid "Send me email when someone sends me an \"@-reply\"."
+msgstr "Kas din ur postel pa gas unan bennak ur \"@-respont\" din."
+
+#: actions/emailsettings.php:179
+msgid "Allow friends to nudge me and send me an email."
+msgstr ""
+
+#: actions/emailsettings.php:185
+msgid "I want to post notices by email."
+msgstr "C'hoant am eus kas va alioù dre bostel."
+
+#: actions/emailsettings.php:191
+msgid "Publish a MicroID for my email address."
+msgstr "Embann ur MicroID evit ma chomlec'h postel."
+
+#: actions/emailsettings.php:302 actions/imsettings.php:264
+#: actions/othersettings.php:180 actions/smssettings.php:284
+msgid "Preferences saved."
+msgstr "Penndibaboù enrollet"
+
+#: actions/emailsettings.php:320
+msgid "No email address."
+msgstr "N'eus chomlec'h postel ebet."
+
+#: actions/emailsettings.php:327
+msgid "Cannot normalize that email address"
+msgstr ""
+
+#: actions/emailsettings.php:331 actions/register.php:201
+#: actions/siteadminpanel.php:144
+msgid "Not a valid email address."
+msgstr "N'eo ket ur chomlec'h postel reizh."
+
+#: actions/emailsettings.php:334
+msgid "That is already your email address."
+msgstr "Ho postel eo dija."
+
+#: actions/emailsettings.php:337
+msgid "That email address already belongs to another user."
+msgstr ""
+
+#: actions/emailsettings.php:353 actions/imsettings.php:319
+#: actions/smssettings.php:337
+msgid "Couldn't insert confirmation code."
+msgstr ""
+
+#: actions/emailsettings.php:359
+msgid ""
+"A confirmation code was sent to the email address you added. Check your "
+"inbox (and spam box!) for the code and instructions on how to use it."
+msgstr ""
+
+#: actions/emailsettings.php:379 actions/imsettings.php:351
+#: actions/smssettings.php:370
+msgid "No pending confirmation to cancel."
+msgstr ""
+
+#: actions/emailsettings.php:383 actions/imsettings.php:355
+msgid "That is the wrong IM address."
+msgstr "N'eo ket mat ar chomlec'h postelerezh prim."
+
+#: actions/emailsettings.php:395 actions/imsettings.php:367
+#: actions/smssettings.php:386
+msgid "Confirmation cancelled."
+msgstr "Nullet eo bet ar gadarnadenn."
+
+#: actions/emailsettings.php:413
+msgid "That is not your email address."
+msgstr "N'eo ket ho postel."
+
+#: actions/emailsettings.php:432 actions/imsettings.php:408
+#: actions/smssettings.php:425
+msgid "The address was removed."
+msgstr "Dilamet eo bet ar chomlec'h."
+
+#: actions/emailsettings.php:446 actions/smssettings.php:518
+msgid "No incoming email address."
+msgstr ""
+
+#: actions/emailsettings.php:456 actions/emailsettings.php:478
+#: actions/smssettings.php:528 actions/smssettings.php:552
+msgid "Couldn't update user record."
+msgstr ""
+
+#: actions/emailsettings.php:459 actions/smssettings.php:531
+msgid "Incoming email address removed."
+msgstr ""
+
+#: actions/emailsettings.php:481 actions/smssettings.php:555
+msgid "New incoming email address added."
+msgstr ""
+
+#: actions/favor.php:79
+msgid "This notice is already a favorite!"
+msgstr "Ouzhpennet eo bet an ali-mañ d'ho pennrolloù dija !"
+
+#: actions/favor.php:92 lib/disfavorform.php:140
+msgid "Disfavor favorite"
+msgstr ""
+
+#: actions/favorited.php:65 lib/popularnoticesection.php:91
+#: lib/publicgroupnav.php:93
+msgid "Popular notices"
+msgstr "Alioù poblek"
+
+#: actions/favorited.php:67
+#, php-format
+msgid "Popular notices, page %d"
+msgstr "Alioù poblek, pajenn %d"
+
+#: actions/favorited.php:79
+msgid "The most popular notices on the site right now."
+msgstr "An alioù ar brudetañ el lec'hienn er mare-mañ."
+
+#: actions/favorited.php:150
+msgid "Favorite notices appear on this page but no one has favorited one yet."
+msgstr ""
+
+#: actions/favorited.php:153
+msgid ""
+"Be the first to add a notice to your favorites by clicking the fave button "
+"next to any notice you like."
+msgstr ""
+
+#: actions/favorited.php:156
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to add a "
+"notice to your favorites!"
+msgstr ""
+
+#: actions/favoritesrss.php:111 actions/showfavorites.php:77
+#: lib/personalgroupnav.php:115
+#, php-format
+msgid "%s's favorite notices"
+msgstr "Alioù pennrollet eus %s"
+
+#: actions/favoritesrss.php:115
+#, php-format
+msgid "Updates favored by %1$s on %2$s!"
+msgstr "Hizivadennoù brientek gant %1$s war %2$s !"
+
+#: actions/featured.php:69 lib/featureduserssection.php:87
+#: lib/publicgroupnav.php:89
+msgid "Featured users"
+msgstr ""
+
+#: actions/featured.php:71
+#, php-format
+msgid "Featured users, page %d"
+msgstr ""
+
+#: actions/featured.php:99
+#, php-format
+msgid "A selection of some great users on %s"
+msgstr "Un dibab eus implijerien vat e %s"
+
+#: actions/file.php:34
+msgid "No notice ID."
+msgstr "ID ali ebet."
+
+#: actions/file.php:38
+msgid "No notice."
+msgstr "Ali ebet."
+
+#: actions/file.php:42
+msgid "No attachments."
+msgstr "N'eus restr stag ebet."
+
+#: actions/file.php:51
+msgid "No uploaded attachments."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:69
+msgid "Not expecting this response!"
+msgstr "Ne oa ket gortozet ar respont-mañ !"
+
+#: actions/finishremotesubscribe.php:80
+msgid "User being listened to does not exist."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:87 actions/remotesubscribe.php:59
+msgid "You can use the local subscription!"
+msgstr ""
+
+#: actions/finishremotesubscribe.php:99
+msgid "That user has blocked you from subscribing."
+msgstr "An implijer-se en deus ho stanket evit en enskrivañ."
+
+#: actions/finishremotesubscribe.php:110
+msgid "You are not authorized."
+msgstr "N'oc'h ket aotreet."
+
+#: actions/finishremotesubscribe.php:113
+msgid "Could not convert request token to access token."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:118
+msgid "Remote service uses unknown version of OMB protocol."
+msgstr ""
+
+#: actions/finishremotesubscribe.php:138 lib/oauthstore.php:306
+msgid "Error updating remote profile"
+msgstr ""
+
+#: actions/getfile.php:79
+msgid "No such file."
+msgstr "Restr ezvezant."
+
+#: actions/getfile.php:83
+msgid "Cannot read file."
+msgstr "Diposupl eo lenn ar restr."
+
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Roll direizh."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Ne c'helloc'h ket reiñ rolloù d'an implijerien eus al lec'hienn-mañ."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "An implijer-mañ en deus dija ar roll-mañ."
+
+#: actions/groupblock.php:71 actions/groupunblock.php:71
+#: actions/makeadmin.php:71 actions/subedit.php:46
+#: lib/profileformaction.php:70
+msgid "No profile specified."
+msgstr "N'eo bet resisaet profil ebet"
+
+#: actions/groupblock.php:76 actions/groupunblock.php:76
+#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
+#: actions/unsubscribe.php:84 lib/profileformaction.php:77
+msgid "No profile with that ID."
+msgstr "N'eus profil ebet gant an ID-mañ."
+
+#: actions/groupblock.php:81 actions/groupunblock.php:81
+#: actions/makeadmin.php:81
+msgid "No group specified."
+msgstr "N'eo bet resisaet strollad ebet"
+
+#: actions/groupblock.php:91
+msgid "Only an admin can block group members."
+msgstr "N'eus neme ur merour a c'hell stankañ izili ur strollad."
+
+#: actions/groupblock.php:95
+msgid "User is already blocked from group."
+msgstr "An implijer-mañ a zo stanket dija eus ar strollad."
+
+#: actions/groupblock.php:100
+msgid "User is not a member of group."
+msgstr "N'eo ket an implijer-mañ ezel eus ur strollad."
+
+#: actions/groupblock.php:136 actions/groupmembers.php:323
+msgid "Block user from group"
+msgstr "Stankañ an implijer-mañ eus ar strollad"
+
+#: actions/groupblock.php:162
+#, php-format
+msgid ""
+"Are you sure you want to block user \"%1$s\" from the group \"%2$s\"? They "
+"will be removed from the group, unable to post, and unable to subscribe to "
+"the group in the future."
+msgstr ""
+
+#: actions/groupblock.php:178
+msgid "Do not block this user from this group"
+msgstr "Arabat stankañ an implijer-mañ eus ar strollad."
+
+#: actions/groupblock.php:179
+msgid "Block this user from this group"
+msgstr "Stankañ an implijer-mañ eus ar strollad-se"
+
+#: actions/groupblock.php:196
+msgid "Database error blocking user from group."
+msgstr ""
+
+#: actions/groupbyid.php:74 actions/userbyid.php:70
+msgid "No ID."
+msgstr "ID ebet"
+
+#: actions/groupdesignsettings.php:68
+msgid "You must be logged in to edit a group."
+msgstr ""
+
+#: actions/groupdesignsettings.php:144
+msgid "Group design"
+msgstr "Design ar strollad"
+
+#: actions/groupdesignsettings.php:155
+msgid ""
+"Customize the way your group looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
+#: lib/designsettings.php:391 lib/designsettings.php:413
+msgid "Couldn't update your design."
+msgstr "Diposubl eo hizivaat ho design."
+
+#: actions/groupdesignsettings.php:311 actions/userdesignsettings.php:231
+msgid "Design preferences saved."
+msgstr "Enrollet eo bet an arventennoù design."
+
+#: actions/grouplogo.php:142 actions/grouplogo.php:195
+msgid "Group logo"
+msgstr "Logo ar strollad"
+
+#: actions/grouplogo.php:153
+#, php-format
+msgid ""
+"You can upload a logo image for your group. The maximum file size is %s."
+msgstr ""
+
+#: actions/grouplogo.php:181
+msgid "User without matching profile."
+msgstr ""
+
+#: actions/grouplogo.php:365
+msgid "Pick a square area of the image to be the logo."
+msgstr ""
+
+#: actions/grouplogo.php:399
+msgid "Logo updated."
+msgstr "Logo hizivaet."
+
+#: actions/grouplogo.php:401
+msgid "Failed updating logo."
+msgstr "N'eo ket bet kaset da benn an hizivadenn."
+
+#: actions/groupmembers.php:100 lib/groupnav.php:92
+#, php-format
+msgid "%s group members"
+msgstr "Izili ar strollad %s"
+
+#: actions/groupmembers.php:103
+#, php-format
+msgid "%1$s group members, page %2$d"
+msgstr "Izili ar strollad %1$s, pajenn %2$d"
+
+#: actions/groupmembers.php:118
+msgid "A list of the users in this group."
+msgstr "Roll an implijerien enrollet er strollad-mañ."
+
+#: actions/groupmembers.php:182 lib/groupnav.php:107
+msgid "Admin"
+msgstr "Merañ"
+
+#: actions/groupmembers.php:355 lib/blockform.php:69
+msgid "Block"
+msgstr "Stankañ"
+
+#: actions/groupmembers.php:450
+msgid "Make user an admin of the group"
+msgstr "Lakaat an implijer da vezañ ur merour eus ar strollad"
+
+#: actions/groupmembers.php:482
+msgid "Make Admin"
+msgstr "Lakaat ur merour"
+
+#: actions/groupmembers.php:482
+msgid "Make this user an admin"
+msgstr "Lakaat an implijer-mañ da verour"
+
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Oberezhioù %s"
+
+#: actions/grouprss.php:140
+#, php-format
+msgid "Updates from members of %1$s on %2$s!"
+msgstr "Hizivadenn izili %1$s e %2$s !"
+
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
+#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
+msgid "Groups"
+msgstr "Strolladoù"
+
+#: actions/groups.php:64
+#, php-format
+msgid "Groups, page %d"
+msgstr "Strollad, pajenn %d"
+
+#: actions/groups.php:90
+#, php-format
+msgid ""
+"%%%%site.name%%%% groups let you find and talk with people of similar "
+"interests. After you join a group you can send messages to all other members "
+"using the syntax \"!groupname\". Don't see a group you like? Try [searching "
+"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
+"%%%%)"
+msgstr ""
+
+#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
+msgid "Create a new group"
+msgstr "Krouiñ ur strollad nevez"
+
+#: actions/groupsearch.php:52
+#, php-format
+msgid ""
+"Search for groups on %%site.name%% by their name, location, or description. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/groupsearch.php:58
+msgid "Group search"
+msgstr "Klask strolladoù"
+
+#: actions/groupsearch.php:79 actions/noticesearch.php:117
+#: actions/peoplesearch.php:83
+msgid "No results."
+msgstr "Disoc'h ebet."
+
+#: actions/groupsearch.php:82
+#, php-format
+msgid ""
+"If you can't find the group you're looking for, you can [create it](%%action."
+"newgroup%%) yourself."
+msgstr ""
+"Ma ne gavoc'h ket ar strollad emaoc'h o klask, neuze e c'helloc'h [krouiñ "
+"anezhañ](%%action.newgroup%%)."
+
+#: actions/groupsearch.php:85
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and [create the group](%%"
+"action.newgroup%%) yourself!"
+msgstr ""
+
+#: actions/groupunblock.php:91
+msgid "Only an admin can unblock group members."
+msgstr "N'eus nemet ur merour a c'hell distankañ izili ur strollad."
+
+#: actions/groupunblock.php:95
+msgid "User is not blocked from group."
+msgstr "N'eo ket stanket an implijer-mañ eus ar strollad."
+
+#: actions/groupunblock.php:128 actions/unblock.php:86
+msgid "Error removing the block."
+msgstr "Ur fazi a zo bet e-pad nulladenn ar stankadenn."
+
+#: actions/imsettings.php:59
+msgid "IM settings"
+msgstr "Arventennoù ar bostelerezh prim"
+
+#: actions/imsettings.php:70
+#, php-format
+msgid ""
+"You can send and receive notices through Jabber/GTalk [instant messages](%%"
+"doc.im%%). Configure your address and settings below."
+msgstr ""
+
+#: actions/imsettings.php:89
+msgid "IM is not available."
+msgstr "Dizimplijadus eo ar bostelerezh prim"
+
+#: actions/imsettings.php:106
+msgid "Current confirmed Jabber/GTalk address."
+msgstr "Chomlec'h Jabber/GTalk kadarnaet er mare-mañ."
+
+#: actions/imsettings.php:114
+#, php-format
+msgid ""
+"Awaiting confirmation on this address. Check your Jabber/GTalk account for a "
+"message with further instructions. (Did you add %s to your buddy list?)"
+msgstr ""
+
+#: actions/imsettings.php:124
+msgid "IM address"
+msgstr "Chomlec'h postelerezh prim"
+
+#: actions/imsettings.php:126
+#, php-format
+msgid ""
+"Jabber or GTalk address, like \"UserName@example.org\". First, make sure to "
+"add %s to your buddy list in your IM client or on GTalk."
+msgstr ""
+
+#: actions/imsettings.php:143
+msgid "Send me notices through Jabber/GTalk."
+msgstr "Kas din an alioù dre Jabber/GTalk."
+
+#: actions/imsettings.php:148
+msgid "Post a notice when my Jabber/GTalk status changes."
+msgstr ""
+
+#: actions/imsettings.php:153
+msgid "Send me replies through Jabber/GTalk from people I'm not subscribed to."
+msgstr ""
+
+#: actions/imsettings.php:159
+msgid "Publish a MicroID for my Jabber/GTalk address."
+msgstr "Embann ur MicroID evit ma chomlec'h Jabber/GTalk."
+
+#: actions/imsettings.php:285
+msgid "No Jabber ID."
+msgstr "ID Jabber ebet."
+
+#: actions/imsettings.php:292
+msgid "Cannot normalize that Jabber ID"
+msgstr "Diposubl eo implijout an ID Jabber-mañ"
+
+#: actions/imsettings.php:296
+msgid "Not a valid Jabber ID"
+msgstr "N'eo ket un ID Jabber reizh."
+
+#: actions/imsettings.php:299
+msgid "That is already your Jabber ID."
+msgstr "Ho ID Jabber eo dija"
+
+#: actions/imsettings.php:302
+msgid "Jabber ID already belongs to another user."
+msgstr "Implijet eo an Jabber ID-mañ gant un implijer all."
+
+#: actions/imsettings.php:327
+#, php-format
+msgid ""
+"A confirmation code was sent to the IM address you added. You must approve %"
+"s for sending messages to you."
+msgstr ""
+
+#: actions/imsettings.php:387
+msgid "That is not your Jabber ID."
+msgstr "N'eo ket ho ID Jabber."
+
+#: actions/inbox.php:59
+#, php-format
+msgid "Inbox for %1$s - page %2$d"
+msgstr "Boest degemer %1$s - pajenn %2$d"
+
+#: actions/inbox.php:62
+#, php-format
+msgid "Inbox for %s"
+msgstr "Bost resevout %s"
+
+#: actions/inbox.php:115
+msgid "This is your inbox, which lists your incoming private messages."
+msgstr ""
+
+#: actions/invite.php:39
+msgid "Invites have been disabled."
+msgstr "Diweredekaat eo bet ar bedadennoù."
+
+#: actions/invite.php:41
+#, php-format
+msgid "You must be logged in to invite other users to use %s"
+msgstr ""
+
+#: actions/invite.php:72
+#, php-format
+msgid "Invalid email address: %s"
+msgstr "Fall eo ar postel : %s"
+
+#: actions/invite.php:110
+msgid "Invitation(s) sent"
+msgstr "Kaset eo bet ar bedadenn(où)"
+
+#: actions/invite.php:112
+msgid "Invite new users"
+msgstr "Pediñ implijerien nevez"
+
+#: actions/invite.php:128
+msgid "You are already subscribed to these users:"
+msgstr "Koumanantet oc'h dija d'an implijerien-mañ :"
+
+#: actions/invite.php:131 actions/invite.php:139 lib/command.php:306
+#, php-format
+msgid "%1$s (%2$s)"
+msgstr "%1$s (%2$s)"
+
+#: actions/invite.php:136
+msgid ""
+"These people are already users and you were automatically subscribed to them:"
+msgstr ""
+"Implijerien eo dija an dud-mañ ha koumanantet oc'h bet ez emgefre d'an "
+"implijerien da-heul :"
+
+#: actions/invite.php:144
+msgid "Invitation(s) sent to the following people:"
+msgstr "Pedadennoù bet kaset d'an implijerien da-heul :"
+
+#: actions/invite.php:150
+msgid ""
+"You will be notified when your invitees accept the invitation and register "
+"on the site. Thanks for growing the community!"
+msgstr ""
+
+#: actions/invite.php:162
+msgid ""
+"Use this form to invite your friends and colleagues to use this service."
+msgstr ""
+
+#: actions/invite.php:187
+msgid "Email addresses"
+msgstr "Chomlec'hioù postel"
+
+#: actions/invite.php:189
+msgid "Addresses of friends to invite (one per line)"
+msgstr "Chomlec'hioù an implijerien da bediñ (unan dre linenn)"
+
+#: actions/invite.php:192
+msgid "Personal message"
+msgstr "Kemenadenn bersonel"
+
+#: actions/invite.php:194
+msgid "Optionally add a personal message to the invitation."
+msgstr ""
+
+#. TRANS: Send button for inviting friends
+#: actions/invite.php:198
+msgctxt "BUTTON"
+msgid "Send"
+msgstr "Kas"
+
+#: actions/invite.php:227
+#, php-format
+msgid "%1$s has invited you to join them on %2$s"
+msgstr "%1$s a bed ac'hanoc'h d'en em enskrivañ war %2$s"
+
+#: actions/invite.php:229
+#, php-format
+msgid ""
+"%1$s has invited you to join them on %2$s (%3$s).\n"
+"\n"
+"%2$s is a micro-blogging service that lets you keep up-to-date with people "
+"you know and people who interest you.\n"
+"\n"
+"You can also share news about yourself, your thoughts, or your life online "
+"with people who know about you. It's also great for meeting new people who "
+"share your interests.\n"
+"\n"
+"%1$s said:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see %1$s's profile page on %2$s here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"If you'd like to try the service, click on the link below to accept the "
+"invitation.\n"
+"\n"
+"%6$s\n"
+"\n"
+"If not, you can ignore this message. Thanks for your patience and your "
+"time.\n"
+"\n"
+"Sincerely, %2$s\n"
+msgstr ""
+
+#: actions/joingroup.php:60
+msgid "You must be logged in to join a group."
+msgstr "Rankout a reoc'h bezañ luget evit mont en ur strollad."
+
+#: actions/joingroup.php:88 actions/leavegroup.php:88
+msgid "No nickname or ID."
+msgstr "Lesanv pe ID ebet."
+
+#: actions/joingroup.php:141
+#, php-format
+msgid "%1$s joined group %2$s"
+msgstr "%1$s a zo bet er strollad %2$s"
+
+#: actions/leavegroup.php:60
+msgid "You must be logged in to leave a group."
+msgstr "Ret eo deoc'h bezañ kevreet evit kuitaat ur strollad"
+
+#: actions/leavegroup.php:100 lib/command.php:265
+msgid "You are not a member of that group."
+msgstr "N'oc'h ket un ezel eus ar strollad-mañ."
+
+#: actions/leavegroup.php:137
+#, php-format
+msgid "%1$s left group %2$s"
+msgstr "%1$s en deus kuitaet ar strollad %2$s"
+
+#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
+msgid "Already logged in."
+msgstr "Kevreet oc'h dija."
+
+#: actions/login.php:126
+msgid "Incorrect username or password."
+msgstr "Anv implijer pe ger-tremen direizh."
+
+#: actions/login.php:132 actions/otp.php:120
+msgid "Error setting user. You are probably not authorized."
+msgstr ""
+"Ur fazi 'zo bet e-pad hizivadenn an implijer. Moarvat n'oc'h ket aotreet "
+"evit en ober."
+
+#: actions/login.php:188 actions/login.php:241 lib/logingroupnav.php:79
+msgid "Login"
+msgstr "Kevreañ"
+
+#: actions/login.php:227
+msgid "Login to site"
+msgstr "Kevreañ d'al lec'hienn"
+
+#: actions/login.php:236 actions/register.php:478
+msgid "Remember me"
+msgstr "Kaout soñj"
+
+#: actions/login.php:237 actions/register.php:480
+msgid "Automatically login in the future; not for shared computers!"
+msgstr ""
+"Digeriñ va dalc'h war-eeun ar wechoù o tont ; arabat en ober war "
+"urzhiataeroù rannet pe publik !"
+
+#: actions/login.php:247
+msgid "Lost or forgotten password?"
+msgstr "Ha kollet o peus ho ker-tremen ?"
+
+#: actions/login.php:266
+msgid ""
+"For security reasons, please re-enter your user name and password before "
+"changing your settings."
+msgstr ""
+"Evit abegoù a surentezh, mar plij adlakait hoc'h anv implijer hag ho ker-"
+"tremen a-benn enrollañ ho penndibaboù."
+
+#: actions/login.php:270
+#, php-format
+msgid ""
+"Login with your username and password. Don't have a username yet? [Register]"
+"(%%action.register%%) a new account."
+msgstr ""
+"Kevreit gant ho anv implijer hag ho ker tremen. N'o peus ket a anv implijer "
+"evit c'hoazh ? [Krouit](%%action.register%%) ur gont nevez."
+
+#: actions/makeadmin.php:92
+msgid "Only an admin can make another user an admin."
+msgstr "N'eus nemet ur merour a c'hall lakaat un implijer all da vezañ merour."
+
+#: actions/makeadmin.php:96
+#, php-format
+msgid "%1$s is already an admin for group \"%2$s\"."
+msgstr "%1$s a zo dija merour ar strollad \"%2$s\"."
+
+#: actions/makeadmin.php:133
+#, php-format
+msgid "Can't get membership record for %1$s in group %2$s."
+msgstr ""
+
+#: actions/makeadmin.php:146
+#, php-format
+msgid "Can't make %1$s an admin for group %2$s."
+msgstr "Diposubl eo lakaat %1$s da merour ar strollad %2$s."
+
+#: actions/microsummary.php:69
+msgid "No current status"
+msgstr "Statud ebet er mare-mañ"
+
+#: actions/newapplication.php:52
+msgid "New Application"
+msgstr "Poellad nevez"
+
+#: actions/newapplication.php:64
+msgid "You must be logged in to register an application."
+msgstr "Ret eo deoc'h bezañ luget evit enrollañ ur poellad."
+
+#: actions/newapplication.php:143
+msgid "Use this form to register a new application."
+msgstr "Implijit ar furmskrid-mañ evit enskrivañ ur poellad nevez."
+
+#: actions/newapplication.php:176
+msgid "Source URL is required."
+msgstr "Ezhomm 'zo eus ar vammenn URL."
+
+#: actions/newapplication.php:258 actions/newapplication.php:267
+msgid "Could not create application."
+msgstr "N'eo ket posubl krouiñ ar poellad."
+
+#: actions/newgroup.php:53
+msgid "New group"
+msgstr "Strollad nevez"
+
+#: actions/newgroup.php:110
+msgid "Use this form to create a new group."
+msgstr "Implijit ar furmskrid-mañ a-benn krouiñ ur strollad nevez."
+
+#: actions/newmessage.php:71 actions/newmessage.php:231
+msgid "New message"
+msgstr "Kemennadenn nevez"
+
+#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
+msgid "You can't send a message to this user."
+msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
+
+#: actions/newmessage.php:144 actions/newnotice.php:136 lib/command.php:342
+#: lib/command.php:475
+msgid "No content!"
+msgstr "Goullo eo !"
+
+#: actions/newmessage.php:158
+msgid "No recipient specified."
+msgstr "N'o peus ket lakaet a resever."
+
+#: actions/newmessage.php:164 lib/command.php:361
+msgid ""
+"Don't send a message to yourself; just say it to yourself quietly instead."
+msgstr ""
+"Na gasit ket a gemennadenn deoc'h c'hwi ho unan ; lavarit an traoù-se en ho "
+"penn kentoc'h."
+
+#: actions/newmessage.php:181
+msgid "Message sent"
+msgstr "Kaset eo bet ar gemenadenn"
+
+#: actions/newmessage.php:185
+#, php-format
+msgid "Direct message to %s sent."
+msgstr "Kaset eo bet da %s ar gemennadenn war-eeun."
+
+#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
+msgid "Ajax Error"
+msgstr "Fazi Ajax"
+
+#: actions/newnotice.php:69
+msgid "New notice"
+msgstr "Ali nevez"
+
+#: actions/newnotice.php:211
+msgid "Notice posted"
+msgstr "Ali embannet"
+
+#: actions/noticesearch.php:68
+#, php-format
+msgid ""
+"Search for notices on %%site.name%% by their contents. Separate search terms "
+"by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/noticesearch.php:78
+msgid "Text search"
+msgstr "Klask un destenn"
+
+#: actions/noticesearch.php:91
+#, php-format
+msgid "Search results for \"%1$s\" on %2$s"
+msgstr "Disoc'hoù ar c'hlask evit \"%1$s\" e %2$s"
+
+#: actions/noticesearch.php:121
+#, php-format
+msgid ""
+"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearch.php:124
+#, php-format
+msgid ""
+"Why not [register an account](%%%%action.register%%%%) and be the first to "
+"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
+msgstr ""
+
+#: actions/noticesearchrss.php:96
+#, php-format
+msgid "Updates with \"%s\""
+msgstr "Hizivadenn gant \"%s\""
+
+#: actions/noticesearchrss.php:98
+#, php-format
+msgid "Updates matching search term \"%1$s\" on %2$s!"
+msgstr ""
+
+#: actions/nudge.php:85
+msgid ""
+"This user doesn't allow nudges or hasn't confirmed or set his email yet."
+msgstr ""
+
+#: actions/nudge.php:94
+msgid "Nudge sent"
+msgstr "Kaset eo bet ar blinkadenn"
+
+#: actions/nudge.php:97
+msgid "Nudge sent!"
+msgstr "Kaset eo bet ar blinkadenn !"
+
+#: actions/oauthappssettings.php:59
+msgid "You must be logged in to list your applications."
+msgstr "Rankout a reoc'h bezañ kevreet evit rollañ ho poelladoù."
+
+#: actions/oauthappssettings.php:74
+msgid "OAuth applications"
+msgstr "Poelladoù OAuth"
+
+#: actions/oauthappssettings.php:85
+msgid "Applications you have registered"
+msgstr "Ar poelladoù o peus enrollet"
+
+#: actions/oauthappssettings.php:135
+#, php-format
+msgid "You have not registered any applications yet."
+msgstr "N'o peus enrollet poellad ebet evit poent."
+
+#: actions/oauthconnectionssettings.php:72
+msgid "Connected applications"
+msgstr "Poeladoù kevreet."
+
+#: actions/oauthconnectionssettings.php:83
+msgid "You have allowed the following applications to access you account."
+msgstr ""
+
+#: actions/oauthconnectionssettings.php:175
+msgid "You are not a user of that application."
+msgstr "N'oc'h ket un implijer eus ar poellad-mañ."
+
+#: actions/oauthconnectionssettings.php:186
+msgid "Unable to revoke access for app: "
+msgstr "Dibosupl eo nullañ moned ar poellad : "
+
+#: actions/oauthconnectionssettings.php:198
+#, php-format
+msgid "You have not authorized any applications to use your account."
+msgstr ""
+
+#: actions/oauthconnectionssettings.php:211
+msgid "Developers can edit the registration settings for their applications "
+msgstr ""
+
+#: actions/oembed.php:79 actions/shownotice.php:100
+msgid "Notice has no profile"
+msgstr "N'en deus ket an ali a profil"
+
+#: actions/oembed.php:86 actions/shownotice.php:180
+#, php-format
+msgid "%1$s's status on %2$s"
+msgstr "Statud %1$s war %2$s"
+
+#: actions/oembed.php:157
+msgid "content type "
+msgstr "seurt an danvez "
+
+#: actions/oembed.php:160
+msgid "Only "
+msgstr "Hepken "
+
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
+msgid "Not a supported data format."
+msgstr ""
+
+#: actions/opensearch.php:64
+msgid "People Search"
+msgstr "Klask tud"
+
+#: actions/opensearch.php:67
+msgid "Notice Search"
+msgstr "Klask alioù"
+
+#: actions/othersettings.php:60
+msgid "Other settings"
+msgstr "Arventennoù all"
+
+#: actions/othersettings.php:71
+msgid "Manage various other options."
+msgstr "Dibarzhioù all da gefluniañ."
+
+#: actions/othersettings.php:108
+msgid " (free service)"
+msgstr " (servij digoust)"
+
+#: actions/othersettings.php:116
+msgid "Shorten URLs with"
+msgstr ""
+
+#: actions/othersettings.php:117
+msgid "Automatic shortening service to use."
+msgstr ""
+
+#: actions/othersettings.php:122
+msgid "View profile designs"
+msgstr ""
+
+#: actions/othersettings.php:123
+msgid "Show or hide profile designs."
+msgstr ""
+
+#: actions/othersettings.php:153
+msgid "URL shortening service is too long (max 50 chars)."
+msgstr ""
+
+#: actions/otp.php:69
+msgid "No user ID specified."
+msgstr "N'eus bet diferet ID implijer ebet."
+
+#: actions/otp.php:83
+msgid "No login token specified."
+msgstr ""
+
+#: actions/otp.php:90
+msgid "No login token requested."
+msgstr ""
+
+#: actions/otp.php:95
+msgid "Invalid login token specified."
+msgstr ""
+
+#: actions/otp.php:104
+msgid "Login token expired."
+msgstr ""
+
+#: actions/outbox.php:58
+#, php-format
+msgid "Outbox for %1$s - page %2$d"
+msgstr "Boest kas %1$s - pajenn %2$d"
+
+#: actions/outbox.php:61
+#, php-format
+msgid "Outbox for %s"
+msgstr "Boest kas %s"
+
+#: actions/outbox.php:116
+msgid "This is your outbox, which lists private messages you have sent."
+msgstr ""
+
+#: actions/passwordsettings.php:58
+msgid "Change password"
+msgstr "Cheñch ger-tremen"
+
+#: actions/passwordsettings.php:69
+msgid "Change your password."
+msgstr "Kemmañ ho ger tremen."
+
+#: actions/passwordsettings.php:96 actions/recoverpassword.php:231
+msgid "Password change"
+msgstr "Kemmañ ar ger-tremen"
+
+#: actions/passwordsettings.php:104
+msgid "Old password"
+msgstr "Ger-tremen kozh"
+
+#: actions/passwordsettings.php:108 actions/recoverpassword.php:235
+msgid "New password"
+msgstr "Ger-tremen nevez"
+
+#: actions/passwordsettings.php:109
+msgid "6 or more characters"
+msgstr "6 arouezenn pe muioc'h"
+
+#: actions/passwordsettings.php:112 actions/recoverpassword.php:239
+#: actions/register.php:433 actions/smssettings.php:134
+msgid "Confirm"
+msgstr "Kadarnaat"
+
+#: actions/passwordsettings.php:113 actions/recoverpassword.php:240
+msgid "Same as password above"
+msgstr "Memestra eget ar ger tremen a-us"
+
+#: actions/passwordsettings.php:117
+msgid "Change"
+msgstr "Kemmañ"
+
+#: actions/passwordsettings.php:154 actions/register.php:230
+msgid "Password must be 6 or more characters."
+msgstr "Rankout a ra ar ger-tremen bezañ gant 6 arouezenn d'an nebeutañ."
+
+#: actions/passwordsettings.php:157 actions/register.php:233
+msgid "Passwords don't match."
+msgstr "Ne glot ket ar gerioù-tremen."
+
+#: actions/passwordsettings.php:165
+msgid "Incorrect old password"
+msgstr "ger-termen kozh amreizh"
+
+#: actions/passwordsettings.php:181
+msgid "Error saving user; invalid."
+msgstr "Ur fazi 'zo bet e-pad enolladenn an implijer ; diwiriek."
+
+#: actions/passwordsettings.php:186 actions/recoverpassword.php:368
+msgid "Can't save new password."
+msgstr "Dibosupl eo enrollañ ar ger-tremen nevez."
+
+#: actions/passwordsettings.php:192 actions/recoverpassword.php:211
+msgid "Password saved."
+msgstr "Ger-tremen enrollet."
+
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
+msgid "Paths"
+msgstr "Hentoù"
+
+#: actions/pathsadminpanel.php:70
+msgid "Path and server settings for this StatusNet site."
+msgstr ""
+
+#: actions/pathsadminpanel.php:157
+#, php-format
+msgid "Theme directory not readable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:163
+#, php-format
+msgid "Avatar directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:169
+#, php-format
+msgid "Background directory not writable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:177
+#, php-format
+msgid "Locales directory not readable: %s"
+msgstr ""
+
+#: actions/pathsadminpanel.php:183
+msgid "Invalid SSL server. The maximum length is 255 characters."
+msgstr ""
+
+#: actions/pathsadminpanel.php:234 actions/siteadminpanel.php:58
+msgid "Site"
+msgstr "Lec'hien"
+
+#: actions/pathsadminpanel.php:238
+msgid "Server"
+msgstr "Servijer"
+
+#: actions/pathsadminpanel.php:238
+msgid "Site's server hostname."
+msgstr ""
+
+#: actions/pathsadminpanel.php:242
+msgid "Path"
+msgstr "Hent"
+
+#: actions/pathsadminpanel.php:242
+msgid "Site path"
+msgstr "Hent al lec'hien"
+
+#: actions/pathsadminpanel.php:246
+msgid "Path to locales"
+msgstr ""
+
+#: actions/pathsadminpanel.php:246
+msgid "Directory path to locales"
+msgstr ""
+
+#: actions/pathsadminpanel.php:250
+msgid "Fancy URLs"
+msgstr "URLioù brav"
+
+#: actions/pathsadminpanel.php:252
+msgid "Use fancy (more readable and memorable) URLs?"
+msgstr ""
+
+#: actions/pathsadminpanel.php:259
+msgid "Theme"
+msgstr "Danvez"
+
+#: actions/pathsadminpanel.php:264
+msgid "Theme server"
+msgstr "Servijer danvezioù"
+
+#: actions/pathsadminpanel.php:268
+msgid "Theme path"
+msgstr "Hentad an tem"
+
+#: actions/pathsadminpanel.php:272
+msgid "Theme directory"
+msgstr "Doser an temoù"
+
+#: actions/pathsadminpanel.php:279
+msgid "Avatars"
+msgstr "Avataroù"
+
+#: actions/pathsadminpanel.php:284
+msgid "Avatar server"
+msgstr "Servijer avatar"
+
+#: actions/pathsadminpanel.php:288
+msgid "Avatar path"
+msgstr ""
+
+#: actions/pathsadminpanel.php:292
+msgid "Avatar directory"
+msgstr ""
+
+#: actions/pathsadminpanel.php:301
+msgid "Backgrounds"
+msgstr "Backgroundoù"
+
+#: actions/pathsadminpanel.php:305
+msgid "Background server"
+msgstr "Servijer ar backgroundoù"
+
+#: actions/pathsadminpanel.php:309
+msgid "Background path"
+msgstr ""
+
+#: actions/pathsadminpanel.php:313
+msgid "Background directory"
+msgstr ""
+
+#: actions/pathsadminpanel.php:320
+msgid "SSL"
+msgstr "SSL"
+
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
+msgid "Never"
+msgstr "Morse"
+
+#: actions/pathsadminpanel.php:324
+msgid "Sometimes"
+msgstr "A-wechoù"
+
+#: actions/pathsadminpanel.php:325
+msgid "Always"
+msgstr "Atav"
+
+#: actions/pathsadminpanel.php:329
+msgid "Use SSL"
+msgstr "Implij SSl"
+
+#: actions/pathsadminpanel.php:330
+msgid "When to use SSL"
+msgstr ""
+
+#: actions/pathsadminpanel.php:335
+msgid "SSL server"
+msgstr "Servijer SSL"
+
+#: actions/pathsadminpanel.php:336
+msgid "Server to direct SSL requests to"
+msgstr ""
+
+#: actions/pathsadminpanel.php:352
+msgid "Save paths"
+msgstr "Enrollañ an hentadoù."
+
+#: actions/peoplesearch.php:52
+#, php-format
+msgid ""
+"Search for people on %%site.name%% by their name, location, or interests. "
+"Separate the terms by spaces; they must be 3 characters or more."
+msgstr ""
+
+#: actions/peoplesearch.php:58
+msgid "People search"
+msgstr "Klask tud"
+
+#: actions/peopletag.php:70
+#, php-format
+msgid "Not a valid people tag: %s"
+msgstr "N'eo ket reizh ar merk-se : %s"
+
+#: actions/peopletag.php:144
+#, php-format
+msgid "Users self-tagged with %1$s - page %2$d"
+msgstr ""
+
+#: actions/postnotice.php:95
+msgid "Invalid notice content"
+msgstr ""
+
+#: actions/postnotice.php:101
+#, php-format
+msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
+msgstr ""
+
+#: actions/profilesettings.php:60
+msgid "Profile settings"
+msgstr "Arventennoù ar profil"
+
+#: actions/profilesettings.php:71
+msgid ""
+"You can update your personal profile info here so people know more about you."
+msgstr ""
+
+#: actions/profilesettings.php:99
+msgid "Profile information"
+msgstr "Titouroù ar profil"
+
+#: actions/profilesettings.php:108 lib/groupeditform.php:154
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces"
+msgstr ""
+
+#: actions/profilesettings.php:111 actions/register.php:448
+#: actions/showgroup.php:255 actions/tagother.php:104
+#: lib/groupeditform.php:157 lib/userprofile.php:149
+msgid "Full name"
+msgstr "Anv klok"
+
+#: actions/profilesettings.php:115 actions/register.php:453
+#: lib/applicationeditform.php:228 lib/groupeditform.php:161
+msgid "Homepage"
+msgstr "Pajenn degemer"
+
+#: actions/profilesettings.php:117 actions/register.php:455
+msgid "URL of your homepage, blog, or profile on another site"
+msgstr ""
+
+#: actions/profilesettings.php:122 actions/register.php:461
+#, php-format
+msgid "Describe yourself and your interests in %d chars"
+msgstr ""
+
+#: actions/profilesettings.php:125 actions/register.php:464
+msgid "Describe yourself and your interests"
+msgstr ""
+
+#: actions/profilesettings.php:127 actions/register.php:466
+msgid "Bio"
+msgstr "Buhezskrid"
+
+#: actions/profilesettings.php:132 actions/register.php:471
+#: actions/showgroup.php:264 actions/tagother.php:112
+#: actions/userauthorization.php:166 lib/groupeditform.php:177
+#: lib/userprofile.php:164
+msgid "Location"
+msgstr "Lec'hiadur"
+
+#: actions/profilesettings.php:134 actions/register.php:473
+msgid "Where you are, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: actions/profilesettings.php:138
+msgid "Share my current location when posting notices"
+msgstr ""
+
+#: actions/profilesettings.php:145 actions/tagother.php:149
+#: actions/tagother.php:209 lib/subscriptionlist.php:106
+#: lib/subscriptionlist.php:108 lib/userprofile.php:209
+msgid "Tags"
+msgstr "Balizennoù"
+
+#: actions/profilesettings.php:147
+msgid ""
+"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
+msgstr ""
+
+#: actions/profilesettings.php:151
+msgid "Language"
+msgstr "Yezh"
+
+#: actions/profilesettings.php:152
+msgid "Preferred language"
+msgstr "Yezh d'ober ganti da gentañ"
+
+#: actions/profilesettings.php:161
+msgid "Timezone"
+msgstr "Takad eur"
+
+#: actions/profilesettings.php:162
+msgid "What timezone are you normally in?"
+msgstr ""
+
+#: actions/profilesettings.php:167
+msgid ""
+"Automatically subscribe to whoever subscribes to me (best for non-humans)"
+msgstr ""
+
+#: actions/profilesettings.php:228 actions/register.php:223
+#, php-format
+msgid "Bio is too long (max %d chars)."
+msgstr "Re hir eo ar bio (%d arouezenn d'ar muiañ)."
+
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
+msgid "Timezone not selected."
+msgstr "N'eo bet dibabet gwerzhid-eur ebet."
+
+#: actions/profilesettings.php:241
+msgid "Language is too long (max 50 chars)."
+msgstr "Re hir eo ar yezh (255 arouezenn d'ar muiañ)."
+
+#: actions/profilesettings.php:253 actions/tagother.php:178
+#, php-format
+msgid "Invalid tag: \"%s\""
+msgstr "Balizenn direizh : \"%s\""
+
+#: actions/profilesettings.php:306
+msgid "Couldn't update user for autosubscribe."
+msgstr ""
+
+#: actions/profilesettings.php:363
+msgid "Couldn't save location prefs."
+msgstr ""
+
+#: actions/profilesettings.php:375
+msgid "Couldn't save profile."
+msgstr "Diposubl eo enrollañ ar profil."
+
+#: actions/profilesettings.php:383
+msgid "Couldn't save tags."
+msgstr "Diposubl eo enrollañ ar balizennoù."
+
+#. TRANS: Message after successful saving of administrative settings.
+#: actions/profilesettings.php:391 lib/adminpanelaction.php:141
+msgid "Settings saved."
+msgstr "Enrollet eo bet an arventennoù."
+
+#: actions/public.php:83
+#, php-format
+msgid "Beyond the page limit (%s)"
+msgstr ""
+
+#: actions/public.php:92
+msgid "Could not retrieve public stream."
+msgstr ""
+
+#: actions/public.php:130
+#, php-format
+msgid "Public timeline, page %d"
+msgstr ""
+
+#: actions/public.php:132 lib/publicgroupnav.php:79
+msgid "Public timeline"
+msgstr ""
+
+#: actions/public.php:160
+msgid "Public Stream Feed (RSS 1.0)"
+msgstr ""
+
+#: actions/public.php:164
+msgid "Public Stream Feed (RSS 2.0)"
+msgstr ""
+
+#: actions/public.php:168
+msgid "Public Stream Feed (Atom)"
+msgstr ""
+
+#: actions/public.php:188
+#, php-format
+msgid ""
+"This is the public timeline for %%site.name%% but no one has posted anything "
+"yet."
+msgstr ""
+
+#: actions/public.php:191
+msgid "Be the first to post!"
+msgstr "Bezit an hini gentañ da bostañ !"
+
+#: actions/public.php:195
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post!"
+msgstr ""
+
+#: actions/public.php:242
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool. [Join now](%%action.register%%) to share notices about yourself with "
+"friends, family, and colleagues! ([Read more](%%doc.help%%))"
+msgstr ""
+
+#: actions/public.php:247
+#, php-format
+msgid ""
+"This is %%site.name%%, a [micro-blogging](http://en.wikipedia.org/wiki/Micro-"
+"blogging) service based on the Free Software [StatusNet](http://status.net/) "
+"tool."
+msgstr ""
+
+#: actions/publictagcloud.php:57
+msgid "Public tag cloud"
+msgstr ""
+
+#: actions/publictagcloud.php:63
+#, php-format
+msgid "These are most popular recent tags on %s "
+msgstr ""
+
+#: actions/publictagcloud.php:69
+#, php-format
+msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
+msgstr ""
+
+#: actions/publictagcloud.php:72
+msgid "Be the first to post one!"
+msgstr ""
+
+#: actions/publictagcloud.php:75
+#, php-format
+msgid ""
+"Why not [register an account](%%action.register%%) and be the first to post "
+"one!"
+msgstr ""
+
+#: actions/publictagcloud.php:134
+msgid "Tag cloud"
+msgstr ""
+
+#: actions/recoverpassword.php:36
+msgid "You are already logged in!"
+msgstr "Luget oc'h dija !"
+
+#: actions/recoverpassword.php:62
+msgid "No such recovery code."
+msgstr "Kod adtapout nann-kavet."
+
+#: actions/recoverpassword.php:66
+msgid "Not a recovery code."
+msgstr "N'eo ket ur c'hod adtapout an dra-mañ."
+
+#: actions/recoverpassword.php:73
+msgid "Recovery code for unknown user."
+msgstr ""
+
+#: actions/recoverpassword.php:86
+msgid "Error with confirmation code."
+msgstr ""
+
+#: actions/recoverpassword.php:97
+msgid "This confirmation code is too old. Please start again."
+msgstr ""
+
+#: actions/recoverpassword.php:111
+msgid "Could not update user with confirmed email address."
+msgstr ""
+
+#: actions/recoverpassword.php:152
+msgid ""
+"If you have forgotten or lost your password, you can get a new one sent to "
+"the email address you have stored in your account."
+msgstr ""
+
+#: actions/recoverpassword.php:158
+msgid "You have been identified. Enter a new password below. "
+msgstr ""
+
+#: actions/recoverpassword.php:188
+msgid "Password recovery"
+msgstr "Adtapout ar ger-tremen"
+
+#: actions/recoverpassword.php:191
+msgid "Nickname or email address"
+msgstr ""
+
+#: actions/recoverpassword.php:193
+msgid "Your nickname on this server, or your registered email address."
+msgstr ""
+
+#: actions/recoverpassword.php:199 actions/recoverpassword.php:200
+msgid "Recover"
+msgstr "Adtapout"
+
+#: actions/recoverpassword.php:208
+msgid "Reset password"
+msgstr "Adderaouekaat ar ger-tremen"
+
+#: actions/recoverpassword.php:209
+msgid "Recover password"
+msgstr "Adtapout ar ger-tremen"
+
+#: actions/recoverpassword.php:210 actions/recoverpassword.php:322
+msgid "Password recovery requested"
+msgstr "Goulennet eo an adtapout gerioù-tremen"
+
+#: actions/recoverpassword.php:213
+msgid "Unknown action"
+msgstr "Ober dianav"
+
+#: actions/recoverpassword.php:236
+msgid "6 or more characters, and don't forget it!"
+msgstr "6 arouezenn pe muioc'h, ha n'e zisoñjit ket !"
+
+#: actions/recoverpassword.php:243
+msgid "Reset"
+msgstr "Adderaouekaat"
+
+#: actions/recoverpassword.php:252
+msgid "Enter a nickname or email address."
+msgstr "Lakait ul lesanv pe ur chomlec'h postel."
+
+#: actions/recoverpassword.php:272
+msgid "No user with that email address or username."
+msgstr ""
+
+#: actions/recoverpassword.php:287
+msgid "No registered email address for that user."
+msgstr ""
+
+#: actions/recoverpassword.php:301
+msgid "Error saving address confirmation."
+msgstr ""
+
+#: actions/recoverpassword.php:325
+msgid ""
+"Instructions for recovering your password have been sent to the email "
+"address registered to your account."
+msgstr ""
+
+#: actions/recoverpassword.php:344
+msgid "Unexpected password reset."
+msgstr ""
+
+#: actions/recoverpassword.php:352
+msgid "Password must be 6 chars or more."
+msgstr ""
+
+#: actions/recoverpassword.php:356
+msgid "Password and confirmation do not match."
+msgstr ""
+
+#: actions/recoverpassword.php:375 actions/register.php:248
+msgid "Error setting user."
+msgstr ""
+
+#: actions/recoverpassword.php:382
+msgid "New password successfully saved. You are now logged in."
+msgstr ""
+
+#: actions/register.php:85 actions/register.php:189 actions/register.php:405
+msgid "Sorry, only invited people can register."
+msgstr ""
+
+#: actions/register.php:92
+msgid "Sorry, invalid invitation code."
+msgstr "Digarezit, kod pedadenn direizh."
+
+#: actions/register.php:112
+msgid "Registration successful"
+msgstr ""
+
+#: actions/register.php:114 actions/register.php:503 lib/logingroupnav.php:85
+msgid "Register"
+msgstr "Krouiñ ur gont"
+
+#: actions/register.php:135
+msgid "Registration not allowed."
+msgstr ""
+
+#: actions/register.php:198
+msgid "You can't register if you don't agree to the license."
+msgstr ""
+
+#: actions/register.php:212
+msgid "Email address already exists."
+msgstr "Implijet eo dija ar chomlec'h postel-se."
+
+#: actions/register.php:243 actions/register.php:265
+msgid "Invalid username or password."
+msgstr ""
+
+#: actions/register.php:343
+msgid ""
+"With this form you can create a new account. You can then post notices and "
+"link up to friends and colleagues. "
+msgstr ""
+
+#: actions/register.php:425
+msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
+msgstr ""
+
+#: actions/register.php:430
+msgid "6 or more characters. Required."
+msgstr "6 arouezenn pe muioc'h. Rekis."
+
+#: actions/register.php:434
+msgid "Same as password above. Required."
+msgstr "Memestra hag ar ger-tremen a-us. Rekis."
+
+#: actions/register.php:438 actions/register.php:442
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
+msgid "Email"
+msgstr "Postel"
+
+#: actions/register.php:439 actions/register.php:443
+msgid "Used only for updates, announcements, and password recovery"
+msgstr ""
+
+#: actions/register.php:450
+msgid "Longer name, preferably your \"real\" name"
+msgstr ""
+
+#: actions/register.php:494
+msgid "My text and files are available under "
+msgstr ""
+
+#: actions/register.php:496
+msgid "Creative Commons Attribution 3.0"
+msgstr ""
+
+#: actions/register.php:497
+msgid ""
+" except this private data: password, email address, IM address, and phone "
+"number."
+msgstr ""
+
+#: actions/register.php:538
+#, php-format
+msgid ""
+"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
+"want to...\n"
+"\n"
+"* Go to [your profile](%2$s) and post your first message.\n"
+"* Add a [Jabber/GTalk address](%%%%action.imsettings%%%%) so you can send "
+"notices through instant messages.\n"
+"* [Search for people](%%%%action.peoplesearch%%%%) that you may know or that "
+"share your interests. \n"
+"* Update your [profile settings](%%%%action.profilesettings%%%%) to tell "
+"others more about you. \n"
+"* Read over the [online docs](%%%%doc.help%%%%) for features you may have "
+"missed. \n"
+"\n"
+"Thanks for signing up and we hope you enjoy using this service."
+msgstr ""
+
+#: actions/register.php:562
+msgid ""
+"(You should receive a message by email momentarily, with instructions on how "
+"to confirm your email address.)"
+msgstr ""
+
+#: actions/remotesubscribe.php:98
+#, php-format
+msgid ""
+"To subscribe, you can [login](%%action.login%%), or [register](%%action."
+"register%%) a new account. If you already have an account on a [compatible "
+"microblogging site](%%doc.openmublog%%), enter your profile URL below."
+msgstr ""
+
+#: actions/remotesubscribe.php:112
+msgid "Remote subscribe"
+msgstr ""
+
+#: actions/remotesubscribe.php:124
+msgid "Subscribe to a remote user"
+msgstr ""
+
+#: actions/remotesubscribe.php:129
+msgid "User nickname"
+msgstr ""
+
+#: actions/remotesubscribe.php:130
+msgid "Nickname of the user you want to follow"
+msgstr ""
+
+#: actions/remotesubscribe.php:133
+msgid "Profile URL"
+msgstr ""
+
+#: actions/remotesubscribe.php:134
+msgid "URL of your profile on another compatible microblogging service"
+msgstr ""
+
+#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
+#: lib/userprofile.php:394
+msgid "Subscribe"
+msgstr "En em enskrivañ"
+
+#: actions/remotesubscribe.php:159
+msgid "Invalid profile URL (bad format)"
+msgstr ""
+
+#: actions/remotesubscribe.php:168
+msgid "Not a valid profile URL (no YADIS document or invalid XRDS defined)."
+msgstr ""
+
+#: actions/remotesubscribe.php:176
+msgid "That’s a local profile! Login to subscribe."
+msgstr ""
+
+#: actions/remotesubscribe.php:183
+msgid "Couldn’t get a request token."
+msgstr ""
+
+#: actions/repeat.php:57
+msgid "Only logged-in users can repeat notices."
+msgstr ""
+
+#: actions/repeat.php:64 actions/repeat.php:71
+msgid "No notice specified."
+msgstr "N'eus bet diferet ali ebet."
+
+#: actions/repeat.php:76
+msgid "You can't repeat your own notice."
+msgstr "Ne c'helloc'h ket adkemer ho ali deoc'h."
+
+#: actions/repeat.php:90
+msgid "You already repeated that notice."
+msgstr "Adkemeret o peus dija an ali-mañ."
+
+#: actions/repeat.php:114 lib/noticelist.php:674
+msgid "Repeated"
+msgstr "Adlavaret"
+
+#: actions/repeat.php:119
+msgid "Repeated!"
+msgstr "Adlavaret !"
+
+#: actions/replies.php:126 actions/repliesrss.php:68
+#: lib/personalgroupnav.php:105
+#, php-format
+msgid "Replies to %s"
+msgstr "Respontoù da %s"
+
+#: actions/replies.php:128
+#, php-format
+msgid "Replies to %1$s, page %2$d"
+msgstr "Respontoù da %1$s, pajenn %2$d"
+
+#: actions/replies.php:145
+#, php-format
+msgid "Replies feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/replies.php:152
+#, php-format
+msgid "Replies feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/replies.php:159
+#, php-format
+msgid "Replies feed for %s (Atom)"
+msgstr ""
+
+#: actions/replies.php:199
+#, php-format
+msgid ""
+"This is the timeline showing replies to %1$s but %2$s hasn't received a "
+"notice to his attention yet."
+msgstr ""
+
+#: actions/replies.php:204
+#, php-format
+msgid ""
+"You can engage other users in a conversation, subscribe to more people or "
+"[join groups](%%action.groups%%)."
+msgstr ""
+
+#: actions/replies.php:206
+#, php-format
+msgid ""
+"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
+"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
+msgstr ""
+
+#: actions/repliesrss.php:72
+#, php-format
+msgid "Replies to %1$s on %2$s!"
+msgstr ""
+
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Ne c'helloc'h ket kas kemennadennoù d'an implijer-mañ."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
+#: actions/rsd.php:146 actions/version.php:157
+msgid "StatusNet"
+msgstr "StatusNet"
+
+#: actions/sandbox.php:65 actions/unsandbox.php:65
+msgid "You cannot sandbox users on this site."
+msgstr ""
+
+#: actions/sandbox.php:72
+msgid "User is already sandboxed."
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
+msgid "Sessions"
+msgstr "Dalc'hoù"
+
+#: actions/sessionsadminpanel.php:65
+msgid "Session settings for this StatusNet site."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:175
+msgid "Handle sessions"
+msgstr "Merañ an dalc'hoù"
+
+#: actions/sessionsadminpanel.php:177
+msgid "Whether to handle sessions ourselves."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:181
+msgid "Session debugging"
+msgstr ""
+
+#: actions/sessionsadminpanel.php:183
+msgid "Turn on debugging output for sessions."
+msgstr ""
+
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/useradminpanel.php:294
+msgid "Save site settings"
+msgstr ""
+
+#: actions/showapplication.php:82
+msgid "You must be logged in to view an application."
+msgstr ""
+
+#: actions/showapplication.php:157
+msgid "Application profile"
+msgstr ""
+
+#: actions/showapplication.php:159 lib/applicationeditform.php:180
+msgid "Icon"
+msgstr ""
+
+#: actions/showapplication.php:169 actions/version.php:195
+#: lib/applicationeditform.php:195
+msgid "Name"
+msgstr "Anv"
+
+#: actions/showapplication.php:178 lib/applicationeditform.php:222
+msgid "Organization"
+msgstr ""
+
+#: actions/showapplication.php:187 actions/version.php:198
+#: lib/applicationeditform.php:209 lib/groupeditform.php:172
+msgid "Description"
+msgstr ""
+
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
+msgid "Statistics"
+msgstr "Stadegoù"
+
+#: actions/showapplication.php:203
+#, php-format
+msgid "Created by %1$s - %2$s access by default - %3$d users"
+msgstr ""
+
+#: actions/showapplication.php:213
+msgid "Application actions"
+msgstr ""
+
+#: actions/showapplication.php:236
+msgid "Reset key & secret"
+msgstr ""
+
+#: actions/showapplication.php:261
+msgid "Application info"
+msgstr ""
+
+#: actions/showapplication.php:263
+msgid "Consumer key"
+msgstr ""
+
+#: actions/showapplication.php:268
+msgid "Consumer secret"
+msgstr ""
+
+#: actions/showapplication.php:273
+msgid "Request token URL"
+msgstr ""
+
+#: actions/showapplication.php:278
+msgid "Access token URL"
+msgstr ""
+
+#: actions/showapplication.php:283
+msgid "Authorize URL"
+msgstr ""
+
+#: actions/showapplication.php:288
+msgid ""
+"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
+"signature method."
+msgstr ""
+
+#: actions/showapplication.php:309
+msgid "Are you sure you want to reset your consumer key and secret?"
+msgstr ""
+
+#: actions/showfavorites.php:79
+#, php-format
+msgid "%1$s's favorite notices, page %2$d"
+msgstr ""
+
+#: actions/showfavorites.php:132
+msgid "Could not retrieve favorite notices."
+msgstr ""
+
+#: actions/showfavorites.php:171
+#, php-format
+msgid "Feed for favorites of %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showfavorites.php:178
+#, php-format
+msgid "Feed for favorites of %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showfavorites.php:185
+#, php-format
+msgid "Feed for favorites of %s (Atom)"
+msgstr ""
+
+#: actions/showfavorites.php:206
+msgid ""
+"You haven't chosen any favorite notices yet. Click the fave button on "
+"notices you like to bookmark them for later or shed a spotlight on them."
+msgstr ""
+
+#: actions/showfavorites.php:208
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Post something interesting "
+"they would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:212
+#, php-format
+msgid ""
+"%s hasn't added any notices to his favorites yet. Why not [register an "
+"account](%%%%action.register%%%%) and then post something interesting they "
+"would add to their favorites :)"
+msgstr ""
+
+#: actions/showfavorites.php:243
+msgid "This is a way to share what you like."
+msgstr ""
+
+#: actions/showgroup.php:82 lib/groupnav.php:86
+#, php-format
+msgid "%s group"
+msgstr "strollad %s"
+
+#: actions/showgroup.php:84
+#, php-format
+msgid "%1$s group, page %2$d"
+msgstr ""
+
+#: actions/showgroup.php:226
+msgid "Group profile"
+msgstr "Profil ar strollad"
+
+#: actions/showgroup.php:271 actions/tagother.php:118
+#: actions/userauthorization.php:175 lib/userprofile.php:177
+msgid "URL"
+msgstr "URL"
+
+#: actions/showgroup.php:282 actions/tagother.php:128
+#: actions/userauthorization.php:187 lib/userprofile.php:194
+msgid "Note"
+msgstr "Notenn"
+
+#: actions/showgroup.php:292 lib/groupeditform.php:184
+msgid "Aliases"
+msgstr "Aliasoù"
+
+#: actions/showgroup.php:301
+msgid "Group actions"
+msgstr "Oberoù ar strollad"
+
+#: actions/showgroup.php:337
+#, php-format
+msgid "Notice feed for %s group (RSS 1.0)"
+msgstr ""
+
+#: actions/showgroup.php:343
+#, php-format
+msgid "Notice feed for %s group (RSS 2.0)"
+msgstr ""
+
+#: actions/showgroup.php:349
+#, php-format
+msgid "Notice feed for %s group (Atom)"
+msgstr ""
+
+#: actions/showgroup.php:354
+#, php-format
+msgid "FOAF for %s group"
+msgstr ""
+
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
+msgid "Members"
+msgstr "Izili"
+
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
+#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
+msgid "(None)"
+msgstr "(hini ebet)"
+
+#: actions/showgroup.php:401
+msgid "All members"
+msgstr "An holl izili"
+
+#: actions/showgroup.php:441
+msgid "Created"
+msgstr "Krouet"
+
+#: actions/showgroup.php:457
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. [Join now](%%%%action.register%%%%) to become part "
+"of this group and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showgroup.php:463
+#, php-format
+msgid ""
+"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. Its members share short messages about "
+"their life and interests. "
+msgstr ""
+
+#: actions/showgroup.php:491
+msgid "Admins"
+msgstr "Merourien"
+
+#: actions/showmessage.php:81
+msgid "No such message."
+msgstr "N'eus ket eus ar gemennadenn-se."
+
+#: actions/showmessage.php:98
+msgid "Only the sender and recipient may read this message."
+msgstr ""
+
+#: actions/showmessage.php:108
+#, php-format
+msgid "Message to %1$s on %2$s"
+msgstr ""
+
+#: actions/showmessage.php:113
+#, php-format
+msgid "Message from %1$s on %2$s"
+msgstr ""
+
+#: actions/shownotice.php:90
+msgid "Notice deleted."
+msgstr ""
+
+#: actions/showstream.php:73
+#, php-format
+msgid " tagged %s"
+msgstr " merket %s"
+
+#: actions/showstream.php:79
+#, php-format
+msgid "%1$s, page %2$d"
+msgstr ""
+
+#: actions/showstream.php:122
+#, php-format
+msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:129
+#, php-format
+msgid "Notice feed for %s (RSS 1.0)"
+msgstr ""
+
+#: actions/showstream.php:136
+#, php-format
+msgid "Notice feed for %s (RSS 2.0)"
+msgstr ""
+
+#: actions/showstream.php:143
+#, php-format
+msgid "Notice feed for %s (Atom)"
+msgstr ""
+
+#: actions/showstream.php:148
+#, php-format
+msgid "FOAF for %s"
+msgstr ""
+
+#: actions/showstream.php:200
+#, php-format
+msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
+msgstr ""
+
+#: actions/showstream.php:205
+msgid ""
+"Seen anything interesting recently? You haven't posted any notices yet, now "
+"would be a good time to start :)"
+msgstr ""
+
+#: actions/showstream.php:207
+#, php-format
+msgid ""
+"You can try to nudge %1$s or [post something to his or her attention](%%%%"
+"action.newnotice%%%%?status_textarea=%2$s)."
+msgstr ""
+
+#: actions/showstream.php:243
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. [Join now](%%%%action.register%%%%) to "
+"follow **%s**'s notices and many more! ([Read more](%%%%doc.help%%%%))"
+msgstr ""
+
+#: actions/showstream.php:248
+#, php-format
+msgid ""
+"**%s** has an account on %%%%site.name%%%%, a [micro-blogging](http://en."
+"wikipedia.org/wiki/Micro-blogging) service based on the Free Software "
+"[StatusNet](http://status.net/) tool. "
+msgstr ""
+
+#: actions/showstream.php:305
+#, php-format
+msgid "Repeat of %s"
+msgstr ""
+
+#: actions/silence.php:65 actions/unsilence.php:65
+msgid "You cannot silence users on this site."
+msgstr ""
+
+#: actions/silence.php:72
+msgid "User is already silenced."
+msgstr ""
+
+#: actions/siteadminpanel.php:69
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Arventennoù design evit al lec'hienn StatusNet-mañ."
+
+#: actions/siteadminpanel.php:133
+msgid "Site name must have non-zero length."
+msgstr ""
+
+#: actions/siteadminpanel.php:141
+msgid "You must have a valid contact email address."
+msgstr ""
+
+#: actions/siteadminpanel.php:159
+#, php-format
+msgid "Unknown language \"%s\"."
+msgstr ""
+
+#: actions/siteadminpanel.php:165
+msgid "Minimum text limit is 140 characters."
+msgstr ""
+
+#: actions/siteadminpanel.php:171
+msgid "Dupe limit must 1 or more seconds."
+msgstr ""
+
+#: actions/siteadminpanel.php:221
+msgid "General"
+msgstr "Hollek"
+
+#: actions/siteadminpanel.php:224
+msgid "Site name"
+msgstr "Anv al lec'hienn"
+
+#: actions/siteadminpanel.php:225
+msgid "The name of your site, like \"Yourcompany Microblog\""
+msgstr ""
+
+#: actions/siteadminpanel.php:229
+msgid "Brought by"
+msgstr "Degaset gant"
+
+#: actions/siteadminpanel.php:230
+msgid "Text used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:234
+msgid "Brought by URL"
+msgstr ""
+
+#: actions/siteadminpanel.php:235
+msgid "URL used for credits link in footer of each page"
+msgstr ""
+
+#: actions/siteadminpanel.php:239
+msgid "Contact email address for your site"
+msgstr ""
+
+#: actions/siteadminpanel.php:245
+msgid "Local"
+msgstr "Lec'hel"
+
+#: actions/siteadminpanel.php:256
+msgid "Default timezone"
+msgstr ""
+
+#: actions/siteadminpanel.php:257
+msgid "Default timezone for the site; usually UTC."
+msgstr ""
+
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
+msgstr "Yezh d'ober ganti da gentañ"
+
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Bevennoù"
+
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr ""
+
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
+msgstr ""
+
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Ali"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Kemennadenn nevez"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Diposubl eo enrollañ an titouroù stankañ."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Eilañ an ali"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Dilemel un ali"
+
+#: actions/smssettings.php:58
+msgid "SMS settings"
+msgstr "Arventennoù SMS"
+
+#: actions/smssettings.php:69
+#, php-format
+msgid "You can receive SMS messages through email from %%site.name%%."
+msgstr ""
+
+#: actions/smssettings.php:91
+msgid "SMS is not available."
+msgstr "Dizimplijadus eo an SMS."
+
+#: actions/smssettings.php:112
+msgid "Current confirmed SMS-enabled phone number."
+msgstr ""
+
+#: actions/smssettings.php:123
+msgid "Awaiting confirmation on this phone number."
+msgstr ""
+
+#: actions/smssettings.php:130
+msgid "Confirmation code"
+msgstr "Kod kadarnaat"
+
+#: actions/smssettings.php:131
+msgid "Enter the code you received on your phone."
+msgstr ""
+
+#: actions/smssettings.php:138
+msgid "SMS phone number"
+msgstr "Niverenn bellgomz evit an SMS"
+
+#: actions/smssettings.php:140
+msgid "Phone number, no punctuation or spaces, with area code"
+msgstr ""
+
+#: actions/smssettings.php:174
+msgid ""
+"Send me notices through SMS; I understand I may incur exorbitant charges "
+"from my carrier."
+msgstr ""
+
+#: actions/smssettings.php:306
+msgid "No phone number."
+msgstr "Niverenn bellgomz ebet."
+
+#: actions/smssettings.php:311
+msgid "No carrier selected."
+msgstr ""
+
+#: actions/smssettings.php:318
+msgid "That is already your phone number."
+msgstr ""
+
+#: actions/smssettings.php:321
+msgid "That phone number already belongs to another user."
+msgstr ""
+
+#: actions/smssettings.php:347
+msgid ""
+"A confirmation code was sent to the phone number you added. Check your phone "
+"for the code and instructions on how to use it."
+msgstr ""
+
+#: actions/smssettings.php:374
+msgid "That is the wrong confirmation number."
+msgstr ""
+
+#: actions/smssettings.php:405
+msgid "That is not your phone number."
+msgstr ""
+
+#: actions/smssettings.php:465
+msgid "Mobile carrier"
+msgstr ""
+
+#: actions/smssettings.php:469
+msgid "Select a carrier"
+msgstr ""
+
+#: actions/smssettings.php:476
+#, php-format
+msgid ""
+"Mobile carrier for your phone. If you know a carrier that accepts SMS over "
+"email but isn't listed here, send email to let us know at %s."
+msgstr ""
+
+#: actions/smssettings.php:498
+msgid "No code entered"
+msgstr "N'eo bet lakaet kod ebet"
+
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Stankter"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Enrollañ an arventennoù moned"
+
+#: actions/subedit.php:70
+msgid "You are not subscribed to that profile."
+msgstr ""
+
+#: actions/subedit.php:83 classes/Subscription.php:89
+#: classes/Subscription.php:116
+msgid "Could not save subscription."
+msgstr ""
+
+#: actions/subscribe.php:77
+msgid "This action only accepts POST requests."
+msgstr ""
+
+#: actions/subscribe.php:107
+msgid "No such profile."
+msgstr ""
+
+#: actions/subscribe.php:117
+msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
+msgstr ""
+
+#: actions/subscribe.php:145
+msgid "Subscribed"
+msgstr ""
+
+#: actions/subscribers.php:50
+#, php-format
+msgid "%s subscribers"
+msgstr ""
+
+#: actions/subscribers.php:52
+#, php-format
+msgid "%1$s subscribers, page %2$d"
+msgstr ""
+
+#: actions/subscribers.php:63
+msgid "These are the people who listen to your notices."
+msgstr ""
+
+#: actions/subscribers.php:67
+#, php-format
+msgid "These are the people who listen to %s's notices."
+msgstr ""
+
+#: actions/subscribers.php:108
+msgid ""
+"You have no subscribers. Try subscribing to people you know and they might "
+"return the favor"
+msgstr ""
+
+#: actions/subscribers.php:110
+#, php-format
+msgid "%s has no subscribers. Want to be the first?"
+msgstr ""
+
+#: actions/subscribers.php:114
+#, php-format
+msgid ""
+"%s has no subscribers. Why not [register an account](%%%%action.register%%%"
+"%) and be the first?"
+msgstr ""
+
+#: actions/subscriptions.php:52
+#, php-format
+msgid "%s subscriptions"
+msgstr ""
+
+#: actions/subscriptions.php:54
+#, php-format
+msgid "%1$s subscriptions, page %2$d"
+msgstr ""
+
+#: actions/subscriptions.php:65
+msgid "These are the people whose notices you listen to."
+msgstr ""
+
+#: actions/subscriptions.php:69
+#, php-format
+msgid "These are the people whose notices %s listens to."
+msgstr ""
+
+#: actions/subscriptions.php:126
+#, php-format
+msgid ""
+"You're not listening to anyone's notices right now, try subscribing to "
+"people you know. Try [people search](%%action.peoplesearch%%), look for "
+"members in groups you're interested in and in our [featured users](%%action."
+"featured%%). If you're a [Twitter user](%%action.twittersettings%%), you can "
+"automatically subscribe to people you already follow there."
+msgstr ""
+
+#: actions/subscriptions.php:128 actions/subscriptions.php:132
+#, php-format
+msgid "%s is not listening to anyone."
+msgstr ""
+
+#: actions/subscriptions.php:199
+msgid "Jabber"
+msgstr "Jabber"
+
+#: actions/subscriptions.php:204 lib/connectsettingsaction.php:115
+msgid "SMS"
+msgstr "SMS"
+
+#: actions/tag.php:69
+#, php-format
+msgid "Notices tagged with %1$s, page %2$d"
+msgstr ""
+
+#: actions/tag.php:87
+#, php-format
+msgid "Notice feed for tag %s (RSS 1.0)"
+msgstr ""
+
+#: actions/tag.php:93
+#, php-format
+msgid "Notice feed for tag %s (RSS 2.0)"
+msgstr ""
+
+#: actions/tag.php:99
+#, php-format
+msgid "Notice feed for tag %s (Atom)"
+msgstr ""
+
+#: actions/tagother.php:39
+msgid "No ID argument."
+msgstr ""
+
+#: actions/tagother.php:65
+#, php-format
+msgid "Tag %s"
+msgstr ""
+
+#: actions/tagother.php:77 lib/userprofile.php:75
+msgid "User profile"
+msgstr ""
+
+#: actions/tagother.php:81 actions/userauthorization.php:132
+#: lib/userprofile.php:102
+msgid "Photo"
+msgstr "Skeudenn"
+
+#: actions/tagother.php:141
+msgid "Tag user"
+msgstr ""
+
+#: actions/tagother.php:151
+msgid ""
+"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
+"separated"
+msgstr ""
+
+#: actions/tagother.php:193
+msgid ""
+"You can only tag people you are subscribed to or who are subscribed to you."
+msgstr ""
+
+#: actions/tagother.php:200
+msgid "Could not save tags."
+msgstr ""
+
+#: actions/tagother.php:236
+msgid "Use this form to add tags to your subscribers or subscriptions."
+msgstr ""
+
+#: actions/tagrss.php:35
+msgid "No such tag."
+msgstr ""
+
+#: actions/twitapitrends.php:85
+msgid "API method under construction."
+msgstr ""
+
+#: actions/unblock.php:59
+msgid "You haven't blocked that user."
+msgstr ""
+
+#: actions/unsandbox.php:72
+msgid "User is not sandboxed."
+msgstr ""
+
+#: actions/unsilence.php:72
+msgid "User is not silenced."
+msgstr ""
+
+#: actions/unsubscribe.php:77
+msgid "No profile id in request."
+msgstr ""
+
+#: actions/unsubscribe.php:98
+msgid "Unsubscribed"
+msgstr ""
+
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
+#, php-format
+msgid ""
+"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
+msgstr ""
+
+#. TRANS: User admin panel title
+#: actions/useradminpanel.php:59
+msgctxt "TITLE"
+msgid "User"
+msgstr ""
+
+#: actions/useradminpanel.php:70
+msgid "User settings for this StatusNet site."
+msgstr ""
+
+#: actions/useradminpanel.php:149
+msgid "Invalid bio limit. Must be numeric."
+msgstr ""
+
+#: actions/useradminpanel.php:155
+msgid "Invalid welcome text. Max length is 255 characters."
+msgstr ""
+
+#: actions/useradminpanel.php:165
+#, php-format
+msgid "Invalid default subscripton: '%1$s' is not user."
+msgstr ""
+
+#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
+#: lib/personalgroupnav.php:109
+msgid "Profile"
+msgstr "Profil"
+
+#: actions/useradminpanel.php:222
+msgid "Bio Limit"
+msgstr "Bevenn ar bio"
+
+#: actions/useradminpanel.php:223
+msgid "Maximum length of a profile bio in characters."
+msgstr ""
+
+#: actions/useradminpanel.php:231
+msgid "New users"
+msgstr "Implijerien nevez"
+
+#: actions/useradminpanel.php:235
+msgid "New user welcome"
+msgstr "Degemer an implijerien nevez"
+
+#: actions/useradminpanel.php:236
+msgid "Welcome text for new users (Max 255 chars)."
+msgstr ""
+
+#: actions/useradminpanel.php:241
+msgid "Default subscription"
+msgstr ""
+
+#: actions/useradminpanel.php:242
+msgid "Automatically subscribe new users to this user."
+msgstr ""
+
+#: actions/useradminpanel.php:251
+msgid "Invitations"
+msgstr "Pedadennoù"
+
+#: actions/useradminpanel.php:256
+msgid "Invitations enabled"
+msgstr ""
+
+#: actions/useradminpanel.php:258
+msgid "Whether to allow users to invite new users."
+msgstr ""
+
+#: actions/userauthorization.php:105
+msgid "Authorize subscription"
+msgstr ""
+
+#: actions/userauthorization.php:110
+msgid ""
+"Please check these details to make sure that you want to subscribe to this "
+"user’s notices. If you didn’t just ask to subscribe to someone’s notices, "
+"click “Reject”."
+msgstr ""
+
+#: actions/userauthorization.php:196 actions/version.php:165
+msgid "License"
+msgstr "Aotre implijout"
+
+#: actions/userauthorization.php:217
+msgid "Accept"
+msgstr "Degemer"
+
+#: actions/userauthorization.php:218 lib/subscribeform.php:115
+#: lib/subscribeform.php:139
+msgid "Subscribe to this user"
+msgstr ""
+
+#: actions/userauthorization.php:219
+msgid "Reject"
+msgstr "Disteurel"
+
+#: actions/userauthorization.php:220
+msgid "Reject this subscription"
+msgstr ""
+
+#: actions/userauthorization.php:232
+msgid "No authorization request!"
+msgstr ""
+
+#: actions/userauthorization.php:254
+msgid "Subscription authorized"
+msgstr ""
+
+#: actions/userauthorization.php:256
+msgid ""
+"The subscription has been authorized, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to authorize the "
+"subscription. Your subscription token is:"
+msgstr ""
+
+#: actions/userauthorization.php:266
+msgid "Subscription rejected"
+msgstr ""
+
+#: actions/userauthorization.php:268
+msgid ""
+"The subscription has been rejected, but no callback URL was passed. Check "
+"with the site’s instructions for details on how to fully reject the "
+"subscription."
+msgstr ""
+
+#: actions/userauthorization.php:303
+#, php-format
+msgid "Listener URI ‘%s’ not found here."
+msgstr ""
+
+#: actions/userauthorization.php:308
+#, php-format
+msgid "Listenee URI ‘%s’ is too long."
+msgstr ""
+
+#: actions/userauthorization.php:314
+#, php-format
+msgid "Listenee URI ‘%s’ is a local user."
+msgstr ""
+
+#: actions/userauthorization.php:329
+#, php-format
+msgid "Profile URL ‘%s’ is for a local user."
+msgstr ""
+
+#: actions/userauthorization.php:345
+#, php-format
+msgid "Avatar URL ‘%s’ is not valid."
+msgstr ""
+
+#: actions/userauthorization.php:350
+#, php-format
+msgid "Can’t read avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userauthorization.php:355
+#, php-format
+msgid "Wrong image type for avatar URL ‘%s’."
+msgstr ""
+
+#: actions/userdesignsettings.php:76 lib/designsettings.php:65
+msgid "Profile design"
+msgstr ""
+
+#: actions/userdesignsettings.php:87 lib/designsettings.php:76
+msgid ""
+"Customize the way your profile looks with a background image and a colour "
+"palette of your choice."
+msgstr ""
+
+#: actions/userdesignsettings.php:282
+msgid "Enjoy your hotdog!"
+msgstr ""
+
+#: actions/usergroups.php:64
+#, php-format
+msgid "%1$s groups, page %2$d"
+msgstr ""
+
+#: actions/usergroups.php:130
+msgid "Search for more groups"
+msgstr "Klask muioc'h a strolladoù"
+
+#: actions/usergroups.php:157
+#, php-format
+msgid "%s is not a member of any group."
+msgstr ""
+
+#: actions/usergroups.php:162
+#, php-format
+msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
+msgstr ""
+
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Hizivadennoù eus %1$s e %2$s!"
+
+#: actions/version.php:73
+#, php-format
+msgid "StatusNet %s"
+msgstr "StatusNet %s"
+
+#: actions/version.php:153
+#, php-format
+msgid ""
+"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
+"Inc. and contributors."
+msgstr ""
+
+#: actions/version.php:161
+msgid "Contributors"
+msgstr "Aozerien"
+
+#: actions/version.php:168
+msgid ""
+"StatusNet is free software: you can redistribute it and/or modify it under "
+"the terms of the GNU Affero General Public License as published by the Free "
+"Software Foundation, either version 3 of the License, or (at your option) "
+"any later version. "
+msgstr ""
+
+#: actions/version.php:174
+msgid ""
+"This program is distributed in the hope that it will be useful, but WITHOUT "
+"ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or "
+"FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License "
+"for more details. "
+msgstr ""
+
+#: actions/version.php:180
+#, php-format
+msgid ""
+"You should have received a copy of the GNU Affero General Public License "
+"along with this program. If not, see %s."
+msgstr ""
+
+#: actions/version.php:189
+msgid "Plugins"
+msgstr "Pluginoù"
+
+#: actions/version.php:196 lib/action.php:767
+msgid "Version"
+msgstr "Stumm"
+
+#: actions/version.php:197
+msgid "Author(s)"
+msgstr "Aozer(ien)"
+
+#: classes/File.php:144
+#, php-format
+msgid ""
+"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
+"to upload a smaller version."
+msgstr ""
+
+#: classes/File.php:154
+#, php-format
+msgid "A file this large would exceed your user quota of %d bytes."
+msgstr ""
+
+#: classes/File.php:161
+#, php-format
+msgid "A file this large would exceed your monthly quota of %d bytes."
+msgstr ""
+
+#: classes/Group_member.php:41
+msgid "Group join failed."
+msgstr "C'hwitet eo bet an enskrivadur d'ar strollad."
+
+#: classes/Group_member.php:53
+msgid "Not part of group."
+msgstr "N'eo ezel eus strollad ebet."
+
+#: classes/Group_member.php:60
+msgid "Group leave failed."
+msgstr "C'hwitet eo bet an disenskrivadur d'ar strollad."
+
+#: classes/Local_group.php:41
+msgid "Could not update local group."
+msgstr ""
+
+#: classes/Login_token.php:76
+#, php-format
+msgid "Could not create login token for %s"
+msgstr ""
+
+#: classes/Message.php:45
+msgid "You are banned from sending direct messages."
+msgstr ""
+
+#: classes/Message.php:61
+msgid "Could not insert message."
+msgstr "Diposubl eo ensoc'hañ ur gemenadenn"
+
+#: classes/Message.php:71
+msgid "Could not update message with new URI."
+msgstr ""
+
+#: classes/Notice.php:172
+#, php-format
+msgid "DB error inserting hashtag: %s"
+msgstr ""
+
+#: classes/Notice.php:241
+msgid "Problem saving notice. Too long."
+msgstr ""
+
+#: classes/Notice.php:245
+msgid "Problem saving notice. Unknown user."
+msgstr ""
+
+#: classes/Notice.php:250
+msgid ""
+"Too many notices too fast; take a breather and post again in a few minutes."
+msgstr ""
+
+#: classes/Notice.php:256
+msgid ""
+"Too many duplicate messages too quickly; take a breather and post again in a "
+"few minutes."
+msgstr ""
+
+#: classes/Notice.php:262
+msgid "You are banned from posting notices on this site."
+msgstr ""
+
+#: classes/Notice.php:328 classes/Notice.php:354
+msgid "Problem saving notice."
+msgstr ""
+
+#: classes/Notice.php:927
+msgid "Problem saving group inbox."
+msgstr ""
+
+#: classes/Notice.php:1459
+#, php-format
+msgid "RT @%1$s %2$s"
+msgstr "RT @%1$s %2$s"
+
+#: classes/Subscription.php:66 lib/oauthstore.php:465
+msgid "You have been banned from subscribing."
+msgstr ""
+
+#: classes/Subscription.php:70
+msgid "Already subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:74
+msgid "User has blocked you."
+msgstr ""
+
+#: classes/Subscription.php:157
+msgid "Not subscribed!"
+msgstr ""
+
+#: classes/Subscription.php:163
+msgid "Couldn't delete self-subscription."
+msgstr ""
+
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Diposubl eo dilemel ar postel kadarnadur."
+
+#: classes/Subscription.php:201 lib/subs.php:69
+msgid "Couldn't delete subscription."
+msgstr ""
+
+#: classes/User.php:373
+#, php-format
+msgid "Welcome to %1$s, @%2$s!"
+msgstr ""
+
+#: classes/User_group.php:477
+msgid "Could not create group."
+msgstr ""
+
+#: classes/User_group.php:486
+msgid "Could not set group URI."
+msgstr ""
+
+#: classes/User_group.php:507
+msgid "Could not set group membership."
+msgstr ""
+
+#: classes/User_group.php:521
+msgid "Could not save local group info."
+msgstr ""
+
+#: lib/accountsettingsaction.php:108
+msgid "Change your profile settings"
+msgstr ""
+
+#: lib/accountsettingsaction.php:112
+msgid "Upload an avatar"
+msgstr ""
+
+#: lib/accountsettingsaction.php:116
+msgid "Change your password"
+msgstr "Cheñch ar ger-tremen"
+
+#: lib/accountsettingsaction.php:120
+msgid "Change email handling"
+msgstr ""
+
+#: lib/accountsettingsaction.php:124
+msgid "Design your profile"
+msgstr ""
+
+#: lib/accountsettingsaction.php:128
+msgid "Other"
+msgstr "All"
+
+#: lib/accountsettingsaction.php:128
+msgid "Other options"
+msgstr ""
+
+#: lib/action.php:144
+#, php-format
+msgid "%1$s - %2$s"
+msgstr "%1$s - %2$s"
+
+#: lib/action.php:159
+msgid "Untitled page"
+msgstr ""
+
+#: lib/action.php:424
+msgid "Primary site navigation"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Personal"
+#: lib/action.php:430
+msgctxt "TOOLTIP"
+msgid "Personal profile and friends timeline"
+msgstr ""
+
+#: lib/action.php:433
+msgctxt "MENU"
+msgid "Personal"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Account"
+#: lib/action.php:435
+msgctxt "TOOLTIP"
+msgid "Change your email, avatar, password, profile"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Services"
+#: lib/action.php:440
+msgctxt "TOOLTIP"
+msgid "Connect to services"
+msgstr ""
+
+#: lib/action.php:443
+msgid "Connect"
+msgstr "Kevreañ"
+
+#. TRANS: Tooltip for menu option "Admin"
+#: lib/action.php:446
+msgctxt "TOOLTIP"
+msgid "Change site configuration"
+msgstr ""
+
+#: lib/action.php:449
+msgctxt "MENU"
+msgid "Admin"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Invite"
+#: lib/action.php:453
+#, php-format
+msgctxt "TOOLTIP"
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+
+#: lib/action.php:456
+msgctxt "MENU"
+msgid "Invite"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Logout"
+#: lib/action.php:462
+msgctxt "TOOLTIP"
+msgid "Logout from the site"
+msgstr ""
+
+#: lib/action.php:465
+msgctxt "MENU"
+msgid "Logout"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Register"
+#: lib/action.php:470
+msgctxt "TOOLTIP"
+msgid "Create an account"
+msgstr ""
+
+#: lib/action.php:473
+msgctxt "MENU"
+msgid "Register"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Login"
+#: lib/action.php:476
+msgctxt "TOOLTIP"
+msgid "Login to the site"
+msgstr ""
+
+#: lib/action.php:479
+msgctxt "MENU"
+msgid "Login"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Help"
+#: lib/action.php:482
+msgctxt "TOOLTIP"
+msgid "Help me!"
+msgstr ""
+
+#: lib/action.php:485
+msgctxt "MENU"
+msgid "Help"
+msgstr ""
+
+#. TRANS: Tooltip for main menu option "Search"
+#: lib/action.php:488
+msgctxt "TOOLTIP"
+msgid "Search for people or text"
+msgstr ""
+
+#: lib/action.php:491
+msgctxt "MENU"
+msgid "Search"
+msgstr ""
+
+#. TRANS: DT element for site notice. String is hidden in default CSS.
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
+msgid "Site notice"
+msgstr ""
+
+#: lib/action.php:579
+msgid "Local views"
+msgstr ""
+
+#: lib/action.php:645
+msgid "Page notice"
+msgstr ""
+
+#: lib/action.php:747
+msgid "Secondary site navigation"
+msgstr ""
+
+#: lib/action.php:752
+msgid "Help"
+msgstr "Skoazell"
+
+#: lib/action.php:754
+msgid "About"
+msgstr "Diwar-benn"
+
+#: lib/action.php:756
+msgid "FAQ"
+msgstr "FAG"
+
+#: lib/action.php:760
+msgid "TOS"
+msgstr ""
+
+#: lib/action.php:763
+msgid "Privacy"
+msgstr "Prevezded"
+
+#: lib/action.php:765
+msgid "Source"
+msgstr "Mammenn"
+
+#: lib/action.php:769
+msgid "Contact"
+msgstr "Darempred"
+
+#: lib/action.php:771
+msgid "Badge"
+msgstr ""
+
+#: lib/action.php:799
+msgid "StatusNet software license"
+msgstr ""
+
+#: lib/action.php:802
+#, php-format
+msgid ""
+"**%%site.name%%** is a microblogging service brought to you by [%%site."
+"broughtby%%](%%site.broughtbyurl%%). "
+msgstr ""
+
+#: lib/action.php:804
+#, php-format
+msgid "**%%site.name%%** is a microblogging service. "
+msgstr ""
+
+#: lib/action.php:806
+#, php-format
+msgid ""
+"It runs the [StatusNet](http://status.net/) microblogging software, version %"
+"s, available under the [GNU Affero General Public License](http://www.fsf."
+"org/licensing/licenses/agpl-3.0.html)."
+msgstr ""
+
+#: lib/action.php:821
+msgid "Site content license"
+msgstr ""
+
+#: lib/action.php:826
+#, php-format
+msgid "Content and data of %1$s are private and confidential."
+msgstr ""
+
+#: lib/action.php:831
+#, php-format
+msgid "Content and data copyright by %1$s. All rights reserved."
+msgstr ""
+
+#: lib/action.php:834
+msgid "Content and data copyright by contributors. All rights reserved."
+msgstr ""
+
+#: lib/action.php:847
+msgid "All "
+msgstr "Pep tra "
+
+#: lib/action.php:853
+msgid "license."
+msgstr "aotre implijout."
+
+#: lib/action.php:1152
+msgid "Pagination"
+msgstr "Pajennadur"
+
+#: lib/action.php:1161
+msgid "After"
+msgstr "War-lerc'h"
+
+#: lib/action.php:1169
+msgid "Before"
+msgstr "Kent"
+
+#: lib/activity.php:453
+msgid "Can't handle remote content yet."
+msgstr ""
+
+#: lib/activity.php:481
+msgid "Can't handle embedded XML content yet."
+msgstr ""
+
+#: lib/activity.php:485
+msgid "Can't handle embedded Base64 content yet."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:98
+msgid "You cannot make changes to this site."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:110
+msgid "Changes to that panel are not allowed."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:229
+msgid "showForm() not implemented."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:259
+msgid "saveSettings() not implemented."
+msgstr ""
+
+#. TRANS: Client error message
+#: lib/adminpanelaction.php:283
+msgid "Unable to delete design setting."
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:348
+msgid "Basic site configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:350
+msgctxt "MENU"
+msgid "Site"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:356
+msgid "Design configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:358
+msgctxt "MENU"
+msgid "Design"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:364
+msgid "User configuration"
+msgstr ""
+
+#. TRANS: Menu item for site administration
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
+msgid "User"
+msgstr "Implijer"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:372
+msgid "Access configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:380
+msgid "Paths configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
+msgstr ""
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+#, fuzzy
+msgid "Edit site notice"
+msgstr "Eilañ an ali"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr ""
+
+#: lib/apiauth.php:94
+msgid "API resource requires read-write access, but you only have read access."
+msgstr ""
+
+#: lib/apiauth.php:272
+#, php-format
+msgid "Failed API auth attempt, nickname = %1$s, proxy = %2$s, ip = %3$s"
+msgstr ""
+
+#: lib/applicationeditform.php:136
+msgid "Edit application"
+msgstr "Kemmañ an arload"
+
+#: lib/applicationeditform.php:184
+msgid "Icon for this application"
+msgstr ""
+
+#: lib/applicationeditform.php:204
+#, php-format
+msgid "Describe your application in %d characters"
+msgstr ""
+
+#: lib/applicationeditform.php:207
+msgid "Describe your application"
+msgstr ""
+
+#: lib/applicationeditform.php:216
+msgid "Source URL"
+msgstr "Mammenn URL"
+
+#: lib/applicationeditform.php:218
+msgid "URL of the homepage of this application"
+msgstr ""
+
+#: lib/applicationeditform.php:224
+msgid "Organization responsible for this application"
+msgstr ""
+
+#: lib/applicationeditform.php:230
+msgid "URL for the homepage of the organization"
+msgstr ""
+
+#: lib/applicationeditform.php:236
+msgid "URL to redirect to after authentication"
+msgstr ""
+
+#: lib/applicationeditform.php:258
+msgid "Browser"
+msgstr "Merdeer"
+
+#: lib/applicationeditform.php:274
+msgid "Desktop"
+msgstr ""
+
+#: lib/applicationeditform.php:275
+msgid "Type of application, browser or desktop"
+msgstr ""
+
+#: lib/applicationeditform.php:297
+msgid "Read-only"
+msgstr ""
+
+#: lib/applicationeditform.php:315
+msgid "Read-write"
+msgstr ""
+
+#: lib/applicationeditform.php:316
+msgid "Default access for this application: read-only, or read-write"
+msgstr ""
+
+#: lib/applicationlist.php:154
+msgid "Revoke"
+msgstr ""
+
+#: lib/attachmentlist.php:87
+msgid "Attachments"
+msgstr ""
+
+#: lib/attachmentlist.php:265
+msgid "Author"
+msgstr "Aozer"
+
+#: lib/attachmentlist.php:278
+msgid "Provider"
+msgstr "Pourvezer"
+
+#: lib/attachmentnoticesection.php:67
+msgid "Notices where this attachment appears"
+msgstr ""
+
+#: lib/attachmenttagcloudsection.php:48
+msgid "Tags for this attachment"
+msgstr ""
+
+#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
+msgid "Password changing failed"
+msgstr ""
+
+#: lib/authenticationplugin.php:235
+msgid "Password changing is not allowed"
+msgstr ""
+
+#: lib/channel.php:138 lib/channel.php:158
+msgid "Command results"
+msgstr ""
+
+#: lib/channel.php:210 lib/mailhandler.php:142
+msgid "Command complete"
+msgstr ""
+
+#: lib/channel.php:221
+msgid "Command failed"
+msgstr ""
+
+#: lib/command.php:44
+msgid "Sorry, this command is not yet implemented."
+msgstr ""
+
+#: lib/command.php:88
+#, php-format
+msgid "Could not find a user with nickname %s"
+msgstr ""
+
+#: lib/command.php:92
+msgid "It does not make a lot of sense to nudge yourself!"
+msgstr ""
+
+#: lib/command.php:99
+#, php-format
+msgid "Nudge sent to %s"
+msgstr ""
+
+#: lib/command.php:126
+#, php-format
+msgid ""
+"Subscriptions: %1$s\n"
+"Subscribers: %2$s\n"
+"Notices: %3$s"
+msgstr ""
+
+#: lib/command.php:152 lib/command.php:390 lib/command.php:451
+msgid "Notice with that id does not exist"
+msgstr ""
+
+#: lib/command.php:168 lib/command.php:406 lib/command.php:467
+#: lib/command.php:523
+msgid "User has no last notice"
+msgstr ""
+
+#: lib/command.php:190
+msgid "Notice marked as fave."
+msgstr ""
+
+#: lib/command.php:217
+msgid "You are already a member of that group"
+msgstr ""
+
+#: lib/command.php:231
+#, php-format
+msgid "Could not join user %s to group %s"
+msgstr ""
+
+#: lib/command.php:236
+#, php-format
+msgid "%s joined group %s"
+msgstr "%s zo emezelet er strollad %s"
+
+#: lib/command.php:275
+#, php-format
+msgid "Could not remove user %s to group %s"
+msgstr ""
+
+#: lib/command.php:280
+#, php-format
+msgid "%s left group %s"
+msgstr "%s {{Gender:.|en|he}} deus kuitaet ar strollad %s"
+
+#: lib/command.php:309
+#, php-format
+msgid "Fullname: %s"
+msgstr "Anv klok : %s"
+
+#: lib/command.php:312 lib/mail.php:258
+#, php-format
+msgid "Location: %s"
+msgstr ""
+
+#: lib/command.php:315 lib/mail.php:260
+#, php-format
+msgid "Homepage: %s"
+msgstr ""
+
+#: lib/command.php:318
+#, php-format
+msgid "About: %s"
+msgstr "Diwar-benn : %s"
+
+#: lib/command.php:349
+#, php-format
+msgid "Message too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:367
+#, php-format
+msgid "Direct message to %s sent"
+msgstr ""
+
+#: lib/command.php:369
+msgid "Error sending direct message."
+msgstr ""
+
+#: lib/command.php:413
+msgid "Cannot repeat your own notice"
+msgstr ""
+
+#: lib/command.php:418
+msgid "Already repeated that notice"
+msgstr ""
+
+#: lib/command.php:426
+#, php-format
+msgid "Notice from %s repeated"
+msgstr ""
+
+#: lib/command.php:428
+msgid "Error repeating notice."
+msgstr ""
+
+#: lib/command.php:482
+#, php-format
+msgid "Notice too long - maximum is %d characters, you sent %d"
+msgstr ""
+
+#: lib/command.php:491
+#, php-format
+msgid "Reply to %s sent"
+msgstr ""
+
+#: lib/command.php:493
+msgid "Error saving notice."
+msgstr ""
+
+#: lib/command.php:547
+msgid "Specify the name of the user to subscribe to"
+msgstr ""
+
+#: lib/command.php:554 lib/command.php:589
+msgid "No such user"
+msgstr ""
+
+#: lib/command.php:561
+#, php-format
+msgid "Subscribed to %s"
+msgstr ""
+
+#: lib/command.php:582 lib/command.php:685
+msgid "Specify the name of the user to unsubscribe from"
+msgstr ""
+
+#: lib/command.php:595
+#, php-format
+msgid "Unsubscribed from %s"
+msgstr ""
+
+#: lib/command.php:613 lib/command.php:636
+msgid "Command not yet implemented."
+msgstr ""
+
+#: lib/command.php:616
+msgid "Notification off."
+msgstr ""
+
+#: lib/command.php:618
+msgid "Can't turn off notification."
+msgstr ""
+
+#: lib/command.php:639
+msgid "Notification on."
+msgstr ""
+
+#: lib/command.php:641
+msgid "Can't turn on notification."
+msgstr ""
+
+#: lib/command.php:654
+msgid "Login command is disabled"
+msgstr ""
+
+#: lib/command.php:665
+#, php-format
+msgid "This link is useable only once, and is good for only 2 minutes: %s"
+msgstr ""
+
+#: lib/command.php:692
+#, php-format
+msgid "Unsubscribed %s"
+msgstr ""
+
+#: lib/command.php:709
+msgid "You are not subscribed to anyone."
+msgstr ""
+
+#: lib/command.php:711
+#, fuzzy
+msgid "You are subscribed to this person:"
+msgid_plural "You are subscribed to these people:"
+msgstr[0] "You are subscribed to this person:"
+msgstr[1] "You are subscribed to these people:"
+
+#: lib/command.php:731
+msgid "No one is subscribed to you."
+msgstr ""
+
+#: lib/command.php:733
+#, fuzzy
+msgid "This person is subscribed to you:"
+msgid_plural "These people are subscribed to you:"
+msgstr[0] "This person is subscribed to you:"
+msgstr[1] "These people are subscribed to you:"
+
+#: lib/command.php:753
+msgid "You are not a member of any groups."
+msgstr ""
+
+#: lib/command.php:755
+#, fuzzy
+msgid "You are a member of this group:"
+msgid_plural "You are a member of these groups:"
+msgstr[0] "You are a member of this group:"
+msgstr[1] "You are a member of these groups:"
+
+#: lib/command.php:769
+msgid ""
+"Commands:\n"
+"on - turn on notifications\n"
+"off - turn off notifications\n"
+"help - show this help\n"
+"follow <nickname> - subscribe to user\n"
+"groups - lists the groups you have joined\n"
+"subscriptions - list the people you follow\n"
+"subscribers - list the people that follow you\n"
+"leave <nickname> - unsubscribe from user\n"
+"d <nickname> <text> - direct message to user\n"
+"get <nickname> - get last notice from user\n"
+"whois <nickname> - get profile info on user\n"
+"lose <nickname> - force user to stop following you\n"
+"fav <nickname> - add user's last notice as a 'fave'\n"
+"fav #<notice_id> - add notice with the given id as a 'fave'\n"
+"repeat #<notice_id> - repeat a notice with a given id\n"
+"repeat <nickname> - repeat the last notice from user\n"
+"reply #<notice_id> - reply to notice with a given id\n"
+"reply <nickname> - reply to the last notice from user\n"
+"join <group> - join group\n"
+"login - Get a link to login to the web interface\n"
+"drop <group> - leave group\n"
+"stats - get your stats\n"
+"stop - same as 'off'\n"
+"quit - same as 'off'\n"
+"sub <nickname> - same as 'follow'\n"
+"unsub <nickname> - same as 'leave'\n"
+"last <nickname> - same as 'get'\n"
+"on <nickname> - not yet implemented.\n"
+"off <nickname> - not yet implemented.\n"
+"nudge <nickname> - remind a user to update.\n"
+"invite <phone number> - not yet implemented.\n"
+"track <word> - not yet implemented.\n"
+"untrack <word> - not yet implemented.\n"
+"track off - not yet implemented.\n"
+"untrack all - not yet implemented.\n"
+"tracks - not yet implemented.\n"
+"tracking - not yet implemented.\n"
+msgstr ""
+
+#: lib/common.php:148
+msgid "No configuration file found. "
+msgstr ""
+
+#: lib/common.php:149
+msgid "I looked for configuration files in the following places: "
+msgstr ""
+
+#: lib/common.php:151
+msgid "You may wish to run the installer to fix this."
+msgstr ""
+
+#: lib/common.php:152
+msgid "Go to the installer."
+msgstr ""
+
+#: lib/connectsettingsaction.php:110
+msgid "IM"
+msgstr "IM"
+
+#: lib/connectsettingsaction.php:111
+msgid "Updates by instant messenger (IM)"
+msgstr ""
+
+#: lib/connectsettingsaction.php:116
+msgid "Updates by SMS"
+msgstr ""
+
+#: lib/connectsettingsaction.php:120
+msgid "Connections"
+msgstr ""
+
+#: lib/connectsettingsaction.php:121
+msgid "Authorized connected applications"
+msgstr ""
+
+#: lib/dberroraction.php:60
+msgid "Database error"
+msgstr ""
+
+#: lib/designsettings.php:105
+msgid "Upload file"
+msgstr ""
+
+#: lib/designsettings.php:109
+msgid ""
+"You can upload your personal background image. The maximum file size is 2MB."
+msgstr ""
+
+#: lib/designsettings.php:418
+msgid "Design defaults restored."
+msgstr ""
+
+#: lib/disfavorform.php:114 lib/disfavorform.php:140
+msgid "Disfavor this notice"
+msgstr ""
+
+#: lib/favorform.php:114 lib/favorform.php:140
+msgid "Favor this notice"
+msgstr ""
+
+#: lib/favorform.php:140
+msgid "Favor"
+msgstr ""
+
+#: lib/feed.php:85
+msgid "RSS 1.0"
+msgstr "RSS 1.0"
+
+#: lib/feed.php:87
+msgid "RSS 2.0"
+msgstr "RSS 2.0"
+
+#: lib/feed.php:89
+msgid "Atom"
+msgstr "Atom"
+
+#: lib/feed.php:91
+msgid "FOAF"
+msgstr "Mignon ur mignon (FOAF)"
+
+#: lib/feedlist.php:64
+msgid "Export data"
+msgstr ""
+
+#: lib/galleryaction.php:121
+msgid "Filter tags"
+msgstr "Silañ ar balizennoù"
+
+#: lib/galleryaction.php:131
+msgid "All"
+msgstr "An holl"
+
+#: lib/galleryaction.php:139
+msgid "Select tag to filter"
+msgstr ""
+
+#: lib/galleryaction.php:140
+msgid "Tag"
+msgstr "Merk"
+
+#: lib/galleryaction.php:141
+msgid "Choose a tag to narrow list"
+msgstr ""
+
+#: lib/galleryaction.php:143
+msgid "Go"
+msgstr "Mont"
+
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
+#: lib/groupeditform.php:163
+msgid "URL of the homepage or blog of the group or topic"
+msgstr ""
+
+#: lib/groupeditform.php:168
+msgid "Describe the group or topic"
+msgstr ""
+
+#: lib/groupeditform.php:170
+#, php-format
+msgid "Describe the group or topic in %d characters"
+msgstr ""
+
+#: lib/groupeditform.php:179
+msgid ""
+"Location for the group, if any, like \"City, State (or Region), Country\""
+msgstr ""
+
+#: lib/groupeditform.php:187
+#, php-format
+msgid "Extra nicknames for the group, comma- or space- separated, max %d"
+msgstr ""
+
+#: lib/groupnav.php:85
+msgid "Group"
+msgstr "Strollad"
+
+#: lib/groupnav.php:101
+msgid "Blocked"
+msgstr "Stanket"
+
+#: lib/groupnav.php:102
+#, php-format
+msgid "%s blocked users"
+msgstr "%s implijer stanket"
+
+#: lib/groupnav.php:108
+#, php-format
+msgid "Edit %s group properties"
+msgstr ""
+
+#: lib/groupnav.php:113
+msgid "Logo"
+msgstr "Logo"
+
+#: lib/groupnav.php:114
+#, php-format
+msgid "Add or edit %s logo"
+msgstr ""
+
+#: lib/groupnav.php:120
+#, php-format
+msgid "Add or edit %s design"
+msgstr ""
+
+#: lib/groupsbymemberssection.php:71
+msgid "Groups with most members"
+msgstr ""
+
+#: lib/groupsbypostssection.php:71
+msgid "Groups with most posts"
+msgstr ""
+
+#: lib/grouptagcloudsection.php:56
+#, php-format
+msgid "Tags in %s group's notices"
+msgstr ""
+
+#: lib/htmloutputter.php:103
+msgid "This page is not available in a media type you accept"
+msgstr ""
+
+#: lib/imagefile.php:75
+#, php-format
+msgid "That file is too big. The maximum file size is %s."
+msgstr ""
+
+#: lib/imagefile.php:80
+msgid "Partial upload."
+msgstr ""
+
+#: lib/imagefile.php:88 lib/mediafile.php:170
+msgid "System error uploading file."
+msgstr ""
+
+#: lib/imagefile.php:96
+msgid "Not an image or corrupt file."
+msgstr ""
+
+#: lib/imagefile.php:109
+msgid "Unsupported image file format."
+msgstr ""
+
+#: lib/imagefile.php:122
+msgid "Lost our file."
+msgstr ""
+
+#: lib/imagefile.php:166 lib/imagefile.php:231
+msgid "Unknown file type"
+msgstr ""
+
+#: lib/imagefile.php:251
+msgid "MB"
+msgstr "Mo"
+
+#: lib/imagefile.php:253
+msgid "kB"
+msgstr "Ko"
+
+#: lib/jabber.php:220
+#, php-format
+msgid "[%s]"
+msgstr "[%s]"
+
+#: lib/jabber.php:400
+#, php-format
+msgid "Unknown inbox source %d."
+msgstr ""
+
+#: lib/joinform.php:114
+msgid "Join"
+msgstr "Stagañ"
+
+#: lib/leaveform.php:114
+msgid "Leave"
+msgstr "Kuitañ"
+
+#: lib/logingroupnav.php:80
+msgid "Login with a username and password"
+msgstr ""
+
+#: lib/logingroupnav.php:86
+msgid "Sign up for a new account"
+msgstr ""
+
+#: lib/mail.php:173
+msgid "Email address confirmation"
+msgstr ""
+
+#: lib/mail.php:175
+#, php-format
+msgid ""
+"Hey, %s.\n"
+"\n"
+"Someone just entered this email address on %s.\n"
+"\n"
+"If it was you, and you want to confirm your entry, use the URL below:\n"
+"\n"
+"\t%s\n"
+"\n"
+"If not, just ignore this message.\n"
+"\n"
+"Thanks for your time, \n"
+"%s\n"
+msgstr ""
+
+#: lib/mail.php:240
+#, php-format
+msgid "%1$s is now listening to your notices on %2$s."
+msgstr ""
+
+#: lib/mail.php:245
+#, php-format
+msgid ""
+"%1$s is now listening to your notices on %2$s.\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"%4$s%5$s%6$s\n"
+"Faithfully yours,\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Change your email address or notification options at %8$s\n"
+msgstr ""
+
+#: lib/mail.php:262
+#, php-format
+msgid "Bio: %s"
+msgstr ""
+
+#: lib/mail.php:290
+#, php-format
+msgid "New email address for posting to %s"
+msgstr ""
+
+#: lib/mail.php:293
+#, php-format
+msgid ""
+"You have a new posting address on %1$s.\n"
+"\n"
+"Send email to %2$s to post new messages.\n"
+"\n"
+"More email instructions at %3$s.\n"
+"\n"
+"Faithfully yours,\n"
+"%4$s"
+msgstr ""
+
+#: lib/mail.php:417
+#, php-format
+msgid "%s status"
+msgstr "Statud %s"
+
+#: lib/mail.php:443
+msgid "SMS confirmation"
+msgstr ""
+
+#: lib/mail.php:467
+#, php-format
+msgid "You've been nudged by %s"
+msgstr ""
+
+#: lib/mail.php:471
+#, php-format
+msgid ""
+"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
+"to post some news.\n"
+"\n"
+"So let's hear from you :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%4$s\n"
+msgstr ""
+
+#: lib/mail.php:517
+#, php-format
+msgid "New private message from %s"
+msgstr "Kemenadenn personel nevez a-berzh %s"
+
+#: lib/mail.php:521
+#, php-format
+msgid ""
+"%1$s (%2$s) sent you a private message:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"You can reply to their message here:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Don't reply to this email; it won't get to them.\n"
+"\n"
+"With kind regards,\n"
+"%5$s\n"
+msgstr ""
+
+#: lib/mail.php:568
+#, php-format
+msgid "%s (@%s) added your notice as a favorite"
+msgstr ""
+
+#: lib/mail.php:570
+#, php-format
+msgid ""
+"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
+"\n"
+"The URL of your notice is:\n"
+"\n"
+"%3$s\n"
+"\n"
+"The text of your notice is:\n"
+"\n"
+"%4$s\n"
+"\n"
+"You can see the list of %1$s's favorites here:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Faithfully yours,\n"
+"%6$s\n"
+msgstr ""
+
+#: lib/mail.php:635
+#, php-format
+msgid "%s (@%s) sent a notice to your attention"
+msgstr ""
+
+#: lib/mail.php:637
+#, php-format
+msgid ""
+"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
+"\n"
+"The notice is here:\n"
+"\n"
+"\t%3$s\n"
+"\n"
+"It reads:\n"
+"\n"
+"\t%4$s\n"
+"\n"
+msgstr ""
+
+#: lib/mailbox.php:89
+msgid "Only the user can read their own mailboxes."
+msgstr ""
+
+#: lib/mailbox.php:139
+msgid ""
+"You have no private messages. You can send private message to engage other "
+"users in conversation. People can send you messages for your eyes only."
+msgstr ""
+
+#: lib/mailbox.php:227 lib/noticelist.php:482
+msgid "from"
+msgstr "eus"
+
+#: lib/mailhandler.php:37
+msgid "Could not parse message."
+msgstr ""
+
+#: lib/mailhandler.php:42
+msgid "Not a registered user."
+msgstr ""
+
+#: lib/mailhandler.php:46
+msgid "Sorry, that is not your incoming email address."
+msgstr ""
+
+#: lib/mailhandler.php:50
+msgid "Sorry, no incoming email allowed."
+msgstr ""
+
+#: lib/mailhandler.php:228
+#, php-format
+msgid "Unsupported message type: %s"
+msgstr ""
+
+#: lib/mediafile.php:98 lib/mediafile.php:123
+msgid "There was a database error while saving your file. Please try again."
+msgstr ""
+
+#: lib/mediafile.php:142
+msgid "The uploaded file exceeds the upload_max_filesize directive in php.ini."
+msgstr ""
+
+#: lib/mediafile.php:147
+msgid ""
+"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in "
+"the HTML form."
+msgstr ""
+
+#: lib/mediafile.php:152
+msgid "The uploaded file was only partially uploaded."
+msgstr ""
+
+#: lib/mediafile.php:159
+msgid "Missing a temporary folder."
+msgstr ""
+
+#: lib/mediafile.php:162
+msgid "Failed to write file to disk."
+msgstr ""
+
+#: lib/mediafile.php:165
+msgid "File upload stopped by extension."
+msgstr ""
+
+#: lib/mediafile.php:179 lib/mediafile.php:216
+msgid "File exceeds user's quota."
+msgstr ""
+
+#: lib/mediafile.php:196 lib/mediafile.php:233
+msgid "File could not be moved to destination directory."
+msgstr ""
+
+#: lib/mediafile.php:201 lib/mediafile.php:237
+msgid "Could not determine file's MIME type."
+msgstr ""
+
+#: lib/mediafile.php:270
+#, php-format
+msgid " Try using another %s format."
+msgstr ""
+
+#: lib/mediafile.php:275
+#, php-format
+msgid "%s is not a supported file type on this server."
+msgstr ""
+
+#: lib/messageform.php:120
+msgid "Send a direct notice"
+msgstr ""
+
+#: lib/messageform.php:146
+msgid "To"
+msgstr "Da"
+
+#: lib/messageform.php:159 lib/noticeform.php:185
+msgid "Available characters"
+msgstr ""
+
+#: lib/messageform.php:178 lib/noticeform.php:236
+msgctxt "Send button for sending notice"
+msgid "Send"
+msgstr ""
+
+#: lib/noticeform.php:160
+msgid "Send a notice"
+msgstr "Kas un ali"
+
+#: lib/noticeform.php:173
+#, php-format
+msgid "What's up, %s?"
+msgstr "Penaos 'mañ kont, %s ?"
+
+#: lib/noticeform.php:192
+msgid "Attach"
+msgstr "Stagañ"
+
+#: lib/noticeform.php:196
+msgid "Attach a file"
+msgstr "Stagañ ur restr"
+
+#: lib/noticeform.php:212
+msgid "Share my location"
+msgstr ""
+
+#: lib/noticeform.php:215
+msgid "Do not share my location"
+msgstr ""
+
+#: lib/noticeform.php:216
+msgid ""
+"Sorry, retrieving your geo location is taking longer than expected, please "
+"try again later"
+msgstr ""
+
+#: lib/noticelist.php:429
+#, php-format
+msgid "%1$u°%2$u'%3$u\"%4$s %5$u°%6$u'%7$u\"%8$s"
+msgstr ""
+
+#: lib/noticelist.php:430
+msgid "N"
+msgstr "N"
+
+#: lib/noticelist.php:430
+msgid "S"
+msgstr "S"
+
+#: lib/noticelist.php:431
+msgid "E"
+msgstr "R"
+
+#: lib/noticelist.php:431
+msgid "W"
+msgstr "K"
+
+#: lib/noticelist.php:438
+msgid "at"
+msgstr "e"
+
+#: lib/noticelist.php:566
+msgid "in context"
+msgstr ""
+
+#: lib/noticelist.php:601
+msgid "Repeated by"
+msgstr ""
+
+#: lib/noticelist.php:628
+msgid "Reply to this notice"
+msgstr ""
+
+#: lib/noticelist.php:629
+msgid "Reply"
+msgstr "Respont"
+
+#: lib/noticelist.php:673
+msgid "Notice repeated"
+msgstr ""
+
+#: lib/nudgeform.php:116
+msgid "Nudge this user"
+msgstr "Kas ur blinkadenn d'an implijer-mañ"
+
+#: lib/nudgeform.php:128
+msgid "Nudge"
+msgstr "Blinkadenn"
+
+#: lib/nudgeform.php:128
+msgid "Send a nudge to this user"
+msgstr "Kas ur blinkadenn d'an implijer-mañ"
+
+#: lib/oauthstore.php:283
+msgid "Error inserting new profile"
+msgstr ""
+
+#: lib/oauthstore.php:291
+msgid "Error inserting avatar"
+msgstr ""
+
+#: lib/oauthstore.php:311
+msgid "Error inserting remote profile"
+msgstr ""
+
+#: lib/oauthstore.php:345
+msgid "Duplicate notice"
+msgstr "Eilañ an ali"
+
+#: lib/oauthstore.php:490
+msgid "Couldn't insert new subscription."
+msgstr ""
+
+#: lib/personalgroupnav.php:99
+msgid "Personal"
+msgstr "Hiniennel"
+
+#: lib/personalgroupnav.php:104
+msgid "Replies"
+msgstr "Respontoù"
+
+#: lib/personalgroupnav.php:114
+msgid "Favorites"
+msgstr "Pennrolloù"
+
+#: lib/personalgroupnav.php:125
+msgid "Inbox"
+msgstr "Boest resev"
+
+#: lib/personalgroupnav.php:126
+msgid "Your incoming messages"
+msgstr "ar gemennadennoù o peus resevet"
+
+#: lib/personalgroupnav.php:130
+msgid "Outbox"
+msgstr "Boest kas"
+
+#: lib/personalgroupnav.php:131
+msgid "Your sent messages"
+msgstr "Ar c'hemenadennoù kaset ganeoc'h"
+
+#: lib/personaltagcloudsection.php:56
+#, php-format
+msgid "Tags in %s's notices"
+msgstr ""
+
+#: lib/plugin.php:114
+msgid "Unknown"
+msgstr "Dianav"
+
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
+msgid "Subscriptions"
+msgstr "Koumanantoù"
+
+#: lib/profileaction.php:126
+msgid "All subscriptions"
+msgstr ""
+
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
+msgid "Subscribers"
+msgstr "Ar re koumanantet"
+
+#: lib/profileaction.php:159
+msgid "All subscribers"
+msgstr "An holl re koumanantet"
+
+#: lib/profileaction.php:180
+msgid "User ID"
+msgstr "ID an implijer"
+
+#: lib/profileaction.php:185
+msgid "Member since"
+msgstr "Ezel abaoe"
+
+#: lib/profileaction.php:247
+msgid "All groups"
+msgstr "An holl strolladoù"
+
+#: lib/profileformaction.php:123
+msgid "No return-to arguments."
+msgstr ""
+
+#: lib/profileformaction.php:137
+msgid "Unimplemented method."
+msgstr ""
+
+#: lib/publicgroupnav.php:78
+msgid "Public"
+msgstr "Foran"
+
+#: lib/publicgroupnav.php:82
+msgid "User groups"
+msgstr "Strolladoù implijerien"
+
+#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
+msgid "Recent tags"
+msgstr ""
+
+#: lib/publicgroupnav.php:88
+msgid "Featured"
+msgstr ""
+
+#: lib/publicgroupnav.php:92
+msgid "Popular"
+msgstr "Poblek"
+
+#: lib/repeatform.php:107
+msgid "Repeat this notice?"
+msgstr "Adkregiñ gant an ali-mañ ?"
+
+#: lib/repeatform.php:132
+msgid "Repeat this notice"
+msgstr "Adkregiñ gant an ali-mañ"
+
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Stankañ an implijer-mañ eus ar strollad-se"
+
+#: lib/router.php:671
+msgid "No single user defined for single-user mode."
+msgstr ""
+
+#: lib/sandboxform.php:67
+msgid "Sandbox"
+msgstr "Poull-traezh"
+
+#: lib/sandboxform.php:78
+msgid "Sandbox this user"
+msgstr ""
+
+#: lib/searchaction.php:120
+msgid "Search site"
+msgstr "Klask el lec'hienn"
+
+#: lib/searchaction.php:126
+msgid "Keyword(s)"
+msgstr "Ger(ioù) alc'hwez"
+
+#: lib/searchaction.php:127
+msgid "Search"
+msgstr "Klask"
+
+#: lib/searchaction.php:162
+msgid "Search help"
+msgstr "Skoazell diwar-benn ar c'hlask"
+
+#: lib/searchgroupnav.php:80
+msgid "People"
+msgstr "Tud"
+
+#: lib/searchgroupnav.php:81
+msgid "Find people on this site"
+msgstr "Klask tud el lec'hienn-mañ"
+
+#: lib/searchgroupnav.php:83
+msgid "Find content of notices"
+msgstr "Klask alioù en danvez"
+
+#: lib/searchgroupnav.php:85
+msgid "Find groups on this site"
+msgstr "Klask strolladoù el lec'hienn-mañ"
+
+#: lib/section.php:89
+msgid "Untitled section"
+msgstr ""
+
+#: lib/section.php:106
+msgid "More..."
+msgstr "Muioc'h..."
+
+#: lib/silenceform.php:67
+msgid "Silence"
+msgstr "Didrouz"
+
+#: lib/silenceform.php:78
+msgid "Silence this user"
+msgstr ""
+
+#: lib/subgroupnav.php:83
+#, php-format
+msgid "People %s subscribes to"
+msgstr ""
+
+#: lib/subgroupnav.php:91
+#, php-format
+msgid "People subscribed to %s"
+msgstr ""
+
+#: lib/subgroupnav.php:99
+#, php-format
+msgid "Groups %s is a member of"
+msgstr ""
+
+#: lib/subgroupnav.php:105
+msgid "Invite"
+msgstr "Pediñ"
+
+#: lib/subgroupnav.php:106
+#, php-format
+msgid "Invite friends and colleagues to join you on %s"
+msgstr ""
+
+#: lib/subscriberspeopleselftagcloudsection.php:48
+#: lib/subscriptionspeopleselftagcloudsection.php:48
+msgid "People Tagcloud as self-tagged"
+msgstr ""
+
+#: lib/subscriberspeopletagcloudsection.php:48
+#: lib/subscriptionspeopletagcloudsection.php:48
+msgid "People Tagcloud as tagged"
+msgstr ""
+
+#: lib/tagcloudsection.php:56
+msgid "None"
+msgstr "Hini ebet"
+
+#: lib/topposterssection.php:74
+msgid "Top posters"
+msgstr ""
+
+#: lib/unsandboxform.php:69
+msgid "Unsandbox"
+msgstr ""
+
+#: lib/unsandboxform.php:80
+msgid "Unsandbox this user"
+msgstr ""
+
+#: lib/unsilenceform.php:67
+msgid "Unsilence"
+msgstr ""
+
+#: lib/unsilenceform.php:78
+msgid "Unsilence this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:113 lib/unsubscribeform.php:137
+msgid "Unsubscribe from this user"
+msgstr ""
+
+#: lib/unsubscribeform.php:137
+msgid "Unsubscribe"
+msgstr ""
+
+#: lib/userprofile.php:116
+msgid "Edit Avatar"
+msgstr "Kemmañ an Avatar"
+
+#: lib/userprofile.php:236
+msgid "User actions"
+msgstr "Obererezh an implijer"
+
+#: lib/userprofile.php:251
+msgid "Edit profile settings"
+msgstr ""
+
+#: lib/userprofile.php:252
+msgid "Edit"
+msgstr "Aozañ"
+
+#: lib/userprofile.php:275
+msgid "Send a direct message to this user"
+msgstr "Kas ur gemennadenn war-eeun d'an implijer-mañ"
+
+#: lib/userprofile.php:276
+msgid "Message"
+msgstr "Kemennadenn"
+
+#: lib/userprofile.php:314
+msgid "Moderate"
+msgstr "Habaskaat"
+
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Strolladoù implijerien"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Merourien"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Habaskaat"
+
+#: lib/util.php:1015
+msgid "a few seconds ago"
+msgstr "un nebeud eilennoù zo"
+
+#: lib/util.php:1017
+msgid "about a minute ago"
+msgstr "1 vunutenn zo well-wazh"
+
+#: lib/util.php:1019
+#, php-format
+msgid "about %d minutes ago"
+msgstr "%d munutenn zo well-wazh"
+
+#: lib/util.php:1021
+msgid "about an hour ago"
+msgstr "1 eurvezh zo well-wazh"
+
+#: lib/util.php:1023
+#, php-format
+msgid "about %d hours ago"
+msgstr "%d eurvezh zo well-wazh"
+
+#: lib/util.php:1025
+msgid "about a day ago"
+msgstr "1 devezh zo well-wazh"
+
+#: lib/util.php:1027
+#, php-format
+msgid "about %d days ago"
+msgstr "%d devezh zo well-wazh"
+
+#: lib/util.php:1029
+msgid "about a month ago"
+msgstr "miz zo well-wazh"
+
+#: lib/util.php:1031
+#, php-format
+msgid "about %d months ago"
+msgstr "%d miz zo well-wazh"
+
+#: lib/util.php:1033
+msgid "about a year ago"
+msgstr "bloaz zo well-wazh"
+
+#: lib/webcolor.php:82
+#, php-format
+msgid "%s is not a valid color!"
+msgstr ""
+
+#: lib/webcolor.php:123
+#, php-format
+msgid "%s is not a valid color! Use 3 or 6 hex chars."
+msgstr ""
+
+#: lib/xmppmanager.php:402
+#, php-format
+msgid "Message too long - maximum is %1$d characters, you sent %2$d."
+msgstr ""
+"Re hir eo ar gemennadenn - ar ment brasañ a zo %1$d arouezenn, %2$d "
+"arouezenn o peus lakaet."
diff --git a/locale/ca/LC_MESSAGES/statusnet.po b/locale/ca/LC_MESSAGES/statusnet.po
index 8b12f44a9..bd7c5cd5a 100644
--- a/locale/ca/LC_MESSAGES/statusnet.po
+++ b/locale/ca/LC_MESSAGES/statusnet.po
@@ -10,19 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:15+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:29+0000\n"
"Language-Team: Catalan\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ca\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accés"
@@ -108,7 +109,7 @@ msgstr "No existeix la pàgina."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -124,7 +125,7 @@ msgstr "%s perfils blocats, pàgina %d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -181,7 +182,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Un mateix i amics"
@@ -208,11 +209,11 @@ msgstr "Actualitzacions de %1$s i amics a %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "No s'ha trobat el mètode API!"
@@ -586,7 +587,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Compte"
@@ -677,18 +678,6 @@ msgstr "%s / Preferits de %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s actualitzacions favorites per %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s línia temporal"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualitzacions de %1$s a %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -699,12 +688,12 @@ msgstr "%1$s / Notificacions contestant a %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s línia temporal pública"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s notificacions de tots!"
@@ -724,7 +713,7 @@ msgstr "Repeticions de %s"
msgid "Notices tagged with %s"
msgstr "Aviso etiquetats amb %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualitzacions etiquetades amb %1$s el %2$s!"
@@ -765,7 +754,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Usuari sense perfil coincident"
@@ -952,7 +941,7 @@ msgid "Conversation"
msgstr "Conversa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avisos"
@@ -974,7 +963,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ha ocorregut algun problema amb la teva sessió."
@@ -1169,8 +1158,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1298,7 +1288,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "No s'han pogut crear els àlies."
@@ -1427,7 +1417,7 @@ msgid "Cannot normalize that email address"
msgstr "No es pot normalitzar l'adreça electrònica."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adreça de correu electrònic no vàlida."
@@ -1616,6 +1606,25 @@ msgstr "No existeix el fitxer."
msgid "Cannot read file."
msgstr "No es pot llegir el fitxer."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Mida invàlida."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "No pots enviar un missatge a aquest usuari."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "L'usuari ja està silenciat."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1763,12 +1772,18 @@ msgstr "Fes-lo administrador"
msgid "Make this user an admin"
msgstr "Fes l'usuari administrador"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s línia temporal"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualitzacions dels membres de %1$s el %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grups"
@@ -2387,8 +2402,8 @@ msgstr "tipus de contingut "
msgid "Only "
msgstr "Només "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Format de data no suportat."
@@ -2534,7 +2549,8 @@ msgstr "No es pot guardar la nova contrasenya."
msgid "Password saved."
msgstr "Contrasenya guardada."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camins"
@@ -2654,7 +2670,7 @@ msgstr "Directori de fons"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
@@ -2711,11 +2727,11 @@ msgstr "Etiqueta no vàlida per a la gent: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuaris que s'han etiquetat %s - pàgina %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "El contingut de l'avís és invàlid"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2797,7 +2813,7 @@ msgstr ""
"Etiquetes per a tu mateix (lletres, números, -, ., i _), per comes o separat "
"por espais"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2825,7 +2841,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografia és massa llarga (màx. %d caràcters)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Franja horària no seleccionada."
@@ -3138,7 +3154,7 @@ msgid "Same as password above. Required."
msgstr "Igual a la contrasenya de dalt. Requerit."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correu electrònic"
@@ -3244,7 +3260,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del teu perfil en un altre servei de microblogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscriure's"
@@ -3349,6 +3365,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostes a %1$s el %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "No podeu silenciar els usuaris d'aquest lloc."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuari sense perfil coincident"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3364,7 +3390,9 @@ msgstr "No pots enviar un missatge a aquest usuari."
msgid "User is already sandboxed."
msgstr "Un usuari t'ha bloquejat."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessions"
@@ -3389,7 +3417,7 @@ msgstr "Depuració de la sessió"
msgid "Turn on debugging output for sessions."
msgstr "Activa la sortida de depuració per a les sessions."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Desa els paràmetres del lloc"
@@ -3423,8 +3451,8 @@ msgstr "Paginació"
msgid "Description"
msgstr "Descripció"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadístiques"
@@ -3558,45 +3586,45 @@ msgstr "Àlies"
msgid "Group actions"
msgstr "Accions del grup"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed d'avisos del grup %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Safata de sortida per %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Cap)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tots els membres"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "S'ha creat"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3606,7 +3634,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3617,7 +3645,7 @@ msgstr ""
"**%s** és un grup d'usuaris a %%%%site.name%%%%, un servei de [microblogging]"
"(http://ca.wikipedia.org/wiki/Microblogging)"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradors"
@@ -3732,149 +3760,140 @@ msgid "User is already silenced."
msgstr "L'usuari ja està silenciat."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Paràmetres bàsic d'aquest lloc basat en l'StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "El nom del lloc ha de tenir una longitud superior a zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Heu de tenir una adreça electrònica de contacte vàlida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, fuzzy, php-format
msgid "Unknown language \"%s\"."
msgstr "Llengua desconeguda «%s»"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom del lloc"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "El nom del vostre lloc, com ara «El microblog de l'empresa»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "El text que s'utilitza a l'enllaç dels crèdits al peu de cada pàgina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adreça electrònica de contacte del vostre lloc"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fus horari per defecte"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fus horari per defecte del lloc; normalment UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Llengua per defecte del lloc"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantànies"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "En una tasca planificada"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantànies de dades"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Freqüència"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Les instantànies s'enviaran a aquest URL"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Límits"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Límits del text"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Límit de duplicats"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quant de temps cal que esperin els usuaris (en segons) per enviar el mateix "
"de nou."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Avís del lloc"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nou missatge"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "No s'ha pogut guardar la teva configuració de Twitter!"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Avís del lloc"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Avís del lloc"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Paràmetres de l'SMS"
@@ -3978,6 +3997,66 @@ msgstr ""
msgid "No code entered"
msgstr "No hi ha cap codi entrat"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantànies"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Canvia la configuració del lloc"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "En una tasca planificada"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantànies de dades"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Freqüència"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Les instantànies s'enviaran a aquest URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Desa els paràmetres del lloc"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "No estàs subscrit a aquest perfil."
@@ -4185,7 +4264,7 @@ msgstr "No id en el perfil sol·licitat."
msgid "Unsubscribed"
msgstr "No subscrit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4389,16 +4468,22 @@ msgstr "%s membre/s en el grup, pàgina %d"
msgid "Search for more groups"
msgstr "Cerca més grups"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s no és membre de cap grup."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualitzacions de %1$s a %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4442,7 +4527,7 @@ msgstr ""
msgid "Plugins"
msgstr "Connectors"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sessions"
@@ -4511,23 +4596,23 @@ msgstr "No s'ha pogut inserir el missatge amb la nova URI."
msgid "DB error inserting hashtag: %s"
msgstr "Hashtag de l'error de la base de dades:%s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema al guardar la notificació. Usuari desconegut."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4536,20 +4621,20 @@ msgstr ""
"Masses notificacions massa ràpid; pren un respir i publica de nou en uns "
"minuts."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Ha estat bandejat de publicar notificacions en aquest lloc."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema en guardar l'avís."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4576,7 +4661,12 @@ msgstr "No estàs subscrit!"
msgid "Couldn't delete self-subscription."
msgstr "No s'ha pogut eliminar la subscripció."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "No s'ha pogut eliminar la subscripció."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "No s'ha pogut eliminar la subscripció."
@@ -4585,20 +4675,20 @@ msgstr "No s'ha pogut eliminar la subscripció."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Us donem la benvinguda a %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "No s'ha pogut crear el grup."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "No s'ha pogut establir la pertinença d'aquest grup."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "No s'ha pogut guardar la subscripció."
@@ -4641,194 +4731,187 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Pàgina sense titol"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegació primària del lloc"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil personal i línia temporal dels amics"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Canviar correu electrònic, avatar, contrasenya, perfil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Compte"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "No s'ha pogut redirigir al servidor: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Connexió"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Canvia la configuració del lloc"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Admin"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convidar amics i companys perquè participin a %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Convida"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Finalitza la sessió del lloc"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Finalitza la sessió"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crea un compte"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registre"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Inicia una sessió al lloc"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Inici de sessió"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajuda'm"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ajuda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cerca gent o text"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Cerca"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Avís del lloc"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistes locals"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notificació pàgina"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegació del lloc secundària"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Ajuda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Quant a"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntes més freqüents"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privadesa"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Font"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacte"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Insígnia"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Llicència del programari StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4837,12 +4920,12 @@ msgstr ""
"**%%site.name%%** és un servei de microblogging de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** és un servei de microblogging."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4853,53 +4936,53 @@ msgstr ""
"%s, disponible sota la [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Llicència de contingut del lloc"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Tot "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "llicència."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginació"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriors"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Anteriors"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4915,97 +4998,86 @@ msgid "Changes to that panel are not allowed."
msgstr "Registre no permès."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Comanda encara no implementada."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Comanda encara no implementada."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "No s'ha pogut guardar la teva configuració de Twitter!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuració bàsica del lloc"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Lloc"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuració del disseny"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Disseny"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Configuració dels camins"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Usuari"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Configuració del disseny"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Accés"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuració dels camins"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Camins"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Configuració del disseny"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessions"
+msgid "Edit site notice"
+msgstr "Avís del lloc"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuració dels camins"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5196,12 +5268,12 @@ msgstr "%s ha abandonat el grup %s"
msgid "Fullname: %s"
msgstr "Nom complet: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localització: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pàgina web: %s"
@@ -5500,6 +5572,11 @@ msgstr "Elegeix una etiqueta para reduir la llista"
msgid "Go"
msgstr "Vés-hi"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL del teu web, blog del grup u tema"
@@ -5636,11 +5713,11 @@ msgstr "Accedir amb el nom d'usuari i contrasenya"
msgid "Sign up for a new account"
msgstr "Crear nou compte"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmació de l'adreça de correu electrònic"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5657,12 +5734,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s ara està escoltant els teus avisos a %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5683,19 +5760,19 @@ msgstr ""
"Atentament,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Biografia: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nou correu electrònic per publicar a %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5716,21 +5793,21 @@ msgstr ""
"Sincerament teus,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s estat"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmació SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Has estat reclamat per %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5746,12 +5823,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nou missatge privat de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5770,12 +5847,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s ha afegit la teva nota com a favorita"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5796,12 +5873,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6047,10 +6124,6 @@ msgstr "Respostes"
msgid "Favorites"
msgstr "Preferits"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usuari"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Safata d'entrada"
@@ -6077,7 +6150,7 @@ msgstr "Etiquetes en les notificacions de %s's"
msgid "Unknown"
msgstr "Acció desconeguda"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscripcions"
@@ -6085,23 +6158,23 @@ msgstr "Subscripcions"
msgid "All subscriptions"
msgstr "Totes les subscripcions"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscriptors"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tots els subscriptors"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de l'usuari"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membre des de"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tots els grups"
@@ -6143,7 +6216,12 @@ msgstr "Repeteix l'avís"
msgid "Repeat this notice"
msgstr "Repeteix l'avís"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloca l'usuari del grup"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6300,47 +6378,64 @@ msgstr "Missatge"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil de l'usuari"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradors"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modera"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fa pocs segons"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fa un minut"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fa %d minuts"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fa una hora"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fa %d hores"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fa un dia"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fa %d dies"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fa un mes"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fa %d mesos"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fa un any"
diff --git a/locale/cs/LC_MESSAGES/statusnet.po b/locale/cs/LC_MESSAGES/statusnet.po
index 9137d3708..a48ec5885 100644
--- a/locale/cs/LC_MESSAGES/statusnet.po
+++ b/locale/cs/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:27+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:32+0000\n"
"Language-Team: Czech\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: cs\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n< =4) ? 1 : 2 ;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Přijmout"
@@ -108,7 +109,7 @@ msgstr "Žádné takové oznámení."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -124,7 +125,7 @@ msgstr "%s a přátelé"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -179,7 +180,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s a přátelé"
@@ -207,11 +208,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Potvrzující kód nebyl nalezen"
@@ -580,7 +581,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "O nás"
@@ -673,18 +674,6 @@ msgstr "%1 statusů na %2"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Mikroblog od %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -695,12 +684,12 @@ msgstr "%1 statusů na %2"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -720,7 +709,7 @@ msgstr "Odpovědi na %s"
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mikroblog od %s"
@@ -762,7 +751,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -954,7 +943,7 @@ msgid "Conversation"
msgstr "Umístění"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Sdělení"
@@ -976,7 +965,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1175,8 +1164,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1301,7 +1291,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Nelze uložin informace o obrázku"
@@ -1424,7 +1414,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Není platnou mailovou adresou."
@@ -1619,6 +1609,25 @@ msgstr "Žádné takové oznámení."
msgid "Cannot read file."
msgstr "Žádné takové oznámení."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Neplatná velikost"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Neodeslal jste nám profil"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Uživatel nemá profil."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1770,12 +1779,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Mikroblog od %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Skupiny"
@@ -2357,8 +2372,8 @@ msgstr "Připojit"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2506,7 +2521,8 @@ msgstr "Nelze uložit nové heslo"
msgid "Password saved."
msgstr "Heslo uloženo"
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2632,7 +2648,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Obnovit"
@@ -2691,11 +2707,11 @@ msgstr "Není platnou mailovou adresou."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Mikroblog od %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Neplatný obsah sdělení"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2774,7 +2790,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Jazyk"
@@ -2800,7 +2816,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Text je příliš dlouhý (maximální délka je 140 zanků)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3107,7 +3123,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3198,7 +3214,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Adresa profilu na jiných kompatibilních mikroblozích."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Odebírat"
@@ -3301,6 +3317,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Odpovědi na %s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Neodeslal jste nám profil"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Uživatel nemá profil."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3316,7 +3342,9 @@ msgstr "Neodeslal jste nám profil"
msgid "User is already sandboxed."
msgstr "Uživatel nemá profil."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3340,7 +3368,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3376,8 +3404,8 @@ msgstr "Umístění"
msgid "Description"
msgstr "Odběry"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiky"
@@ -3510,47 +3538,47 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Feed sdělení pro %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Členem od"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Vytvořit"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3560,7 +3588,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3569,7 +3597,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3681,149 +3709,137 @@ msgid "User is already silenced."
msgstr "Uživatel nemá profil."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Není platnou mailovou adresou."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Žádný registrovaný email pro tohoto uživatele."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Umístění"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Problém při ukládání sdělení"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Nové sdělení"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Nové sdělení"
#: actions/smssettings.php:58
#, fuzzy
@@ -3921,6 +3937,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Odběry"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Nastavení"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
@@ -4129,7 +4205,7 @@ msgstr "Nebylo vráceno žádné URL profilu od servu."
msgid "Unsubscribed"
msgstr "Odhlásit"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4336,16 +4412,22 @@ msgstr "Všechny odběry"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Neodeslal jste nám profil"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4389,7 +4471,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Osobní"
@@ -4457,41 +4539,41 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problém při ukládání sdělení"
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4519,7 +4601,12 @@ msgstr "Nepřihlášen!"
msgid "Couldn't delete self-subscription."
msgstr "Nelze smazat odebírání"
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Nelze smazat odebírání"
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Nelze smazat odebírání"
@@ -4528,22 +4615,22 @@ msgstr "Nelze smazat odebírání"
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Nelze uložin informace o obrázku"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Nelze vytvořit odebírat"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Nelze vytvořit odebírat"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Nelze vytvořit odebírat"
@@ -4587,192 +4674,185 @@ msgstr "%1 statusů na %2"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Osobní"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Změnit heslo"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "O nás"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Nelze přesměrovat na server: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Připojit"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Odběry"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Neplatná velikost"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Odhlásit"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Vytvořit nový účet"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrovat"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Přihlásit"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomoci mi!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Nápověda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Hledat"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Nové sdělení"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Nové sdělení"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Odběry"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Nápověda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "O nás"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Soukromí"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Zdroj"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4781,12 +4861,12 @@ msgstr ""
"**%%site.name%%** je služba microblogů, kterou pro vás poskytuje [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** je služba mikroblogů."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4797,56 +4877,56 @@ msgstr ""
"dostupná pod [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Nové sdělení"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Novější"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Starší »"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4861,95 +4941,86 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Potvrzení emailové adresy"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Nové sdělení"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Potvrzení emailové adresy"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Vzhled"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Potvrzení emailové adresy"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Potvrzení emailové adresy"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Přijmout"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Potvrzení emailové adresy"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Potvrzení emailové adresy"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Osobní"
+msgid "Edit site notice"
+msgstr "Nové sdělení"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Potvrzení emailové adresy"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5143,12 +5214,12 @@ msgstr "%1 statusů na %2"
msgid "Fullname: %s"
msgstr "Celé jméno"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5456,6 +5527,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5599,11 +5675,11 @@ msgstr "Neplatné jméno nebo heslo"
msgid "Sign up for a new account"
msgstr "Vytvořit nový účet"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Potvrzení emailové adresy"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5620,12 +5696,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1 od teď naslouchá tvým sdělením v %2"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5646,17 +5722,17 @@ msgstr ""
"S úctou váš,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "O mě"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5669,21 +5745,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr ""
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5699,12 +5775,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5723,12 +5799,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%1 od teď naslouchá tvým sdělením v %2"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5749,12 +5825,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6005,10 +6081,6 @@ msgstr "Odpovědi"
msgid "Favorites"
msgstr "Oblíbené"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -6034,7 +6106,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Odběry"
@@ -6042,23 +6114,23 @@ msgstr "Odběry"
msgid "All subscriptions"
msgstr "Všechny odběry"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Odběratelé"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Všichni odběratelé"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Členem od"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -6102,7 +6174,12 @@ msgstr "Odstranit toto oznámení"
msgid "Repeat this notice"
msgstr "Odstranit toto oznámení"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Žádný takový uživatel."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6264,47 +6341,62 @@ msgstr "Zpráva"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Uživatel nemá profil."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "před pár sekundami"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "asi před minutou"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "asi před %d minutami"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "asi před hodinou"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "asi před %d hodinami"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "asi přede dnem"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před %d dny"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "asi před měsícem"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "asi před %d mesíci"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "asi před rokem"
diff --git a/locale/de/LC_MESSAGES/statusnet.po b/locale/de/LC_MESSAGES/statusnet.po
index a00ec2611..4bad95b9e 100644
--- a/locale/de/LC_MESSAGES/statusnet.po
+++ b/locale/de/LC_MESSAGES/statusnet.po
@@ -4,6 +4,7 @@
# Author@translatewiki.net: Lutzgh
# Author@translatewiki.net: March
# Author@translatewiki.net: McDutchie
+# Author@translatewiki.net: Michael
# Author@translatewiki.net: Michi
# Author@translatewiki.net: Pill
# Author@translatewiki.net: Umherirrender
@@ -14,19 +15,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:31+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-08 21:10:39+0000\n"
"Language-Team: German\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63415); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: de\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Zugang"
@@ -48,7 +50,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privat"
@@ -79,7 +80,6 @@ msgid "Save access settings"
msgstr "Zugangs-Einstellungen speichern"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Speichern"
@@ -108,7 +108,7 @@ msgstr "Seite nicht vorhanden"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -124,7 +124,7 @@ msgstr "%1$s und Freunde, Seite% 2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -169,12 +169,12 @@ msgstr ""
#. TRANS: %1$s is user nickname, %2$s is user nickname, %2$s is user nickname prefixed with "@"
#: actions/all.php:142
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) from his profile or [post something to "
"his or her attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
+"Du kannst [%1$s in seinem Profil einen Stups geben](../%2$s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
@@ -189,7 +189,7 @@ msgstr ""
"erregen?"
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du und Freunde"
@@ -216,11 +216,11 @@ msgstr "Aktualisierungen von %1$s und Freunden auf %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-Methode nicht gefunden."
@@ -273,6 +273,8 @@ msgid ""
"The server was unable to handle that much POST data (%s bytes) due to its "
"current configuration."
msgstr ""
+"Der Server kann so große POST Abfragen (%s bytes) aufgrund der Konfiguration "
+"nicht verarbeiten."
#: actions/apiaccountupdateprofilebackgroundimage.php:136
#: actions/apiaccountupdateprofilebackgroundimage.php:146
@@ -447,7 +449,7 @@ msgstr "Zu viele Pseudonyme! Maximale Anzahl ist %d."
#: actions/newgroup.php:168
#, php-format
msgid "Invalid alias: \"%s\""
-msgstr "Ungültiger Tag: „%s“"
+msgstr "Ungültiges Stichwort: „%s“"
#: actions/apigroupcreate.php:275 actions/editgroup.php:232
#: actions/newgroup.php:172
@@ -505,7 +507,7 @@ msgstr "Gruppen von %s"
#: actions/apioauthauthorize.php:101
msgid "No oauth_token parameter provided."
-msgstr ""
+msgstr "Kein oauth_token Parameter angegeben."
#: actions/apioauthauthorize.php:106
#, fuzzy
@@ -540,9 +542,8 @@ msgid "Database error deleting OAuth application user."
msgstr "Fehler bei den Nutzereinstellungen."
#: actions/apioauthauthorize.php:185
-#, fuzzy
msgid "Database error inserting OAuth application user."
-msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
+msgstr "Datenbankfehler beim Einfügen des OAuth Programm Benutzers."
#: actions/apioauthauthorize.php:214
#, php-format
@@ -550,11 +551,13 @@ msgid ""
"The request token %s has been authorized. Please exchange it for an access "
"token."
msgstr ""
+"Die Anfrage %s wurde nicht autorisiert. Bitte gegen einen Zugriffstoken "
+"austauschen."
#: actions/apioauthauthorize.php:227
#, php-format
msgid "The request token %s has been denied and revoked."
-msgstr ""
+msgstr "Die Anfrage %s wurde gesperrt und widerrufen."
#: actions/apioauthauthorize.php:232 actions/avatarsettings.php:281
#: actions/designadminpanel.php:103 actions/editapplication.php:139
@@ -567,11 +570,11 @@ msgstr "Unerwartete Formulareingabe."
#: actions/apioauthauthorize.php:259
msgid "An application would like to connect to your account"
-msgstr ""
+msgstr "Ein Programm will eine Verbindung zu deinem Konto aufbauen"
#: actions/apioauthauthorize.php:276
msgid "Allow or deny access"
-msgstr ""
+msgstr "Zugriff erlauben oder ablehnen"
#: actions/apioauthauthorize.php:292
#, php-format
@@ -581,7 +584,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -600,16 +603,15 @@ msgstr "Passwort"
#: actions/apioauthauthorize.php:328
msgid "Deny"
-msgstr ""
+msgstr "Ablehnen"
#: actions/apioauthauthorize.php:334
-#, fuzzy
msgid "Allow"
-msgstr "Alle"
+msgstr "Erlauben"
#: actions/apioauthauthorize.php:351
msgid "Allow or deny access to your account information."
-msgstr ""
+msgstr "Zugang zu deinem Konto erlauben oder ablehnen"
#: actions/apistatusesdestroy.php:107
msgid "This method requires a POST or DELETE."
@@ -663,26 +665,14 @@ msgid "Unsupported format."
msgstr "Bildformat wird nicht unterstützt."
#: actions/apitimelinefavorites.php:108
-#, fuzzy, php-format
+#, php-format
msgid "%1$s / Favorites from %2$s"
-msgstr "%s / Favoriten von %s"
+msgstr "%1$s / Favoriten von %2$s"
#: actions/apitimelinefavorites.php:117
-#, fuzzy, php-format
-msgid "%1$s updates favorited by %2$s / %2$s."
-msgstr "%s Aktualisierung in den Favoriten von %s / %s."
-
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
#, php-format
-msgid "%s timeline"
-msgstr "%s Zeitleiste"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Aktualisierungen von %1$s auf %2$s!"
+msgid "%1$s updates favorited by %2$s / %2$s."
+msgstr "%1$s Aktualisierung in den Favoriten von %2$s / %2$s."
#: actions/apitimelinementions.php:117
#, php-format
@@ -694,32 +684,32 @@ msgstr "%1$s / Aktualisierungen erwähnen %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "Nachrichten von %1$, die auf Nachrichten von %2$ / %3$ antworten."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s öffentliche Zeitleiste"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s Nachrichten von allen!"
#: actions/apitimelineretweetedtome.php:111
-#, fuzzy, php-format
+#, php-format
msgid "Repeated to %s"
msgstr "Antworten an %s"
#: actions/apitimelineretweetsofme.php:114
-#, fuzzy, php-format
+#, php-format
msgid "Repeats of %s"
-msgstr "Antworten an %s"
+msgstr "Antworten von %s"
#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Nachrichten, die mit %s getagt sind"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualisierungen mit %1$s getagt auf %2$s!"
@@ -760,7 +750,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Benutzer ohne passendes Profil"
@@ -827,6 +817,9 @@ msgid ""
"unsubscribed from you, unable to subscribe to you in the future, and you "
"will not be notified of any @-replies from them."
msgstr ""
+"Bist du sicher, dass du den Benutzer blockieren willst? Die Verbindung zum "
+"Benutzer wird gelöscht, dieser kann dich in Zukunft nicht mehr abonnieren "
+"und bekommt keine @-Antworten."
#: actions/block.php:143 actions/deleteapplication.php:153
#: actions/deletenotice.php:145 actions/deleteuser.php:150
@@ -872,9 +865,9 @@ msgid "%s blocked profiles"
msgstr "%s blockierte Benutzerprofile"
#: actions/blockedfromgroup.php:100
-#, fuzzy, php-format
+#, php-format
msgid "%1$s blocked profiles, page %2$d"
-msgstr "%s blockierte Benutzerprofile, Seite %d"
+msgstr "%1$s blockierte Benutzerprofile, Seite %2$d"
#: actions/blockedfromgroup.php:115
msgid "A list of the users blocked from joining this group."
@@ -931,7 +924,6 @@ msgid "Couldn't delete email confirmation."
msgstr "Konnte E-Mail-Bestätigung nicht löschen."
#: actions/confirmaddress.php:144
-#, fuzzy
msgid "Confirm address"
msgstr "Adresse bestätigen"
@@ -945,36 +937,32 @@ msgid "Conversation"
msgstr "Unterhaltung"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Nachrichten"
#: actions/deleteapplication.php:63
-#, fuzzy
msgid "You must be logged in to delete an application."
-msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
+msgstr "Du musst angemeldet sein, um dieses Programm zu entfernen."
#: actions/deleteapplication.php:71
-#, fuzzy
msgid "Application not found."
-msgstr "Nachricht hat kein Profil"
+msgstr "Programm nicht gefunden."
#: actions/deleteapplication.php:78 actions/editapplication.php:77
#: actions/showapplication.php:94
-#, fuzzy
msgid "You are not the owner of this application."
-msgstr "Du bist kein Mitglied dieser Gruppe."
+msgstr "Du bist Besitzer dieses Programms"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Es gab ein Problem mit deinem Sessiontoken."
#: actions/deleteapplication.php:123 actions/deleteapplication.php:147
-#, fuzzy
msgid "Delete application"
-msgstr "Unbekannte Nachricht."
+msgstr "Programm entfernen"
#: actions/deleteapplication.php:149
msgid ""
@@ -982,16 +970,16 @@ msgid ""
"about the application from the database, including all existing user "
"connections."
msgstr ""
+"Bist du sicher, dass du dieses Programm löschen willst? Es werden alle Daten "
+"aus der Datenbank entfernt, auch alle bestehenden Benutzer-Verbindungen."
#: actions/deleteapplication.php:156
-#, fuzzy
msgid "Do not delete this application"
-msgstr "Diese Nachricht nicht löschen"
+msgstr "Dieses Programm nicht löschen"
#: actions/deleteapplication.php:160
-#, fuzzy
msgid "Delete this application"
-msgstr "Nachricht löschen"
+msgstr "Programm löschen"
#. TRANS: Client error message
#: actions/deletenotice.php:67 actions/disfavor.php:61 actions/favor.php:62
@@ -1049,6 +1037,8 @@ msgid ""
"Are you sure you want to delete this user? This will clear all data about "
"the user from the database, without a backup."
msgstr ""
+"Bist du sicher, dass du den Benutzer löschen wisst? Alle Daten des Benutzers "
+"werden aus der Datenbank gelöscht (ohne ein Backup)."
#: actions/deleteuser.php:151 lib/deleteuserform.php:77
msgid "Delete this user"
@@ -1057,7 +1047,7 @@ msgstr "Diesen Benutzer löschen"
#: actions/designadminpanel.php:62 lib/accountsettingsaction.php:124
#: lib/groupnav.php:119
msgid "Design"
-msgstr ""
+msgstr "Design"
#: actions/designadminpanel.php:73
msgid "Design settings for this StatusNet site."
@@ -1124,7 +1114,7 @@ msgstr "Hintergrundbild ein- oder ausschalten."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Hintergrundbild kacheln"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -1148,7 +1138,7 @@ msgstr "Links"
#: actions/designadminpanel.php:577 lib/designsettings.php:247
msgid "Use defaults"
-msgstr ""
+msgstr "Standardeinstellungen benutzen"
#: actions/designadminpanel.php:578 lib/designsettings.php:248
msgid "Restore default designs"
@@ -1161,8 +1151,9 @@ msgstr "Standard wiederherstellen"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1182,9 +1173,9 @@ msgid "Add to favorites"
msgstr "Zu Favoriten hinzufügen"
#: actions/doc.php:158
-#, fuzzy, php-format
+#, php-format
msgid "No such document \"%s\""
-msgstr "Unbekanntes Dokument."
+msgstr "Unbekanntes Dokument \"%s\""
#: actions/editapplication.php:54
msgid "Edit Application"
@@ -1242,16 +1233,15 @@ msgstr "Homepage der Organisation ist erforderlich (Pflichtangabe)."
#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
-msgstr ""
+msgstr "Antwort ist zu lang"
#: actions/editapplication.php:225 actions/newapplication.php:215
msgid "Callback URL is not valid."
-msgstr ""
+msgstr "Antwort URL ist nicht gültig"
#: actions/editapplication.php:258
-#, fuzzy
msgid "Could not update application."
-msgstr "Konnte Gruppe nicht aktualisieren."
+msgstr "Konnte Programm nicht aktualisieren."
#: actions/editgroup.php:56
#, php-format
@@ -1264,7 +1254,6 @@ msgstr "Du musst angemeldet sein, um eine Gruppe zu erstellen."
#: actions/editgroup.php:107 actions/editgroup.php:172
#: actions/groupdesignsettings.php:107 actions/grouplogo.php:109
-#, fuzzy
msgid "You must be an admin to edit the group."
msgstr "Du musst ein Administrator sein, um die Gruppe zu bearbeiten"
@@ -1281,7 +1270,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Konnte keinen Favoriten erstellen."
@@ -1407,7 +1396,7 @@ msgid "Cannot normalize that email address"
msgstr "Konnte diese E-Mail-Adresse nicht normalisieren"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ungültige E-Mail-Adresse."
@@ -1498,12 +1487,16 @@ msgstr "Die momentan beliebtesten Nachrichten auf dieser Seite."
#: actions/favorited.php:150
msgid "Favorite notices appear on this page but no one has favorited one yet."
msgstr ""
+"Favorisierte Mitteilungen werden auf dieser Seite angezeigt; es wurden aber "
+"noch keine Favoriten markiert."
#: actions/favorited.php:153
msgid ""
"Be the first to add a notice to your favorites by clicking the fave button "
"next to any notice you like."
msgstr ""
+"Sei der erste der eine Nachricht favorisiert indem du auf die entsprechenden "
+"Schaltfläche neben der Nachricht klickst."
#: actions/favorited.php:156
#, php-format
@@ -1511,6 +1504,8 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to add a "
"notice to your favorites!"
msgstr ""
+"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"bist der erste der eine Nachricht favorisiert!"
#: actions/favoritesrss.php:111 actions/showfavorites.php:77
#: lib/personalgroupnav.php:115
@@ -1534,9 +1529,9 @@ msgid "Featured users, page %d"
msgstr "Top-Benutzer, Seite %d"
#: actions/featured.php:99
-#, fuzzy, php-format
+#, php-format
msgid "A selection of some great users on %s"
-msgstr "Eine Auswahl der tollen Benutzer auf %s"
+msgstr "Eine Auswahl toller Benutzer auf %s"
#: actions/file.php:34
msgid "No notice ID."
@@ -1594,6 +1589,23 @@ msgstr "Datei nicht gefunden."
msgid "Cannot read file."
msgstr "Datei konnte nicht gelesen werden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ungültige Aufgabe"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Diese Aufgabe ist reserviert und kann nicht gesetzt werden"
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Nutzer hat diese Aufgabe bereits"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1634,6 +1646,10 @@ msgid ""
"will be removed from the group, unable to post, and unable to subscribe to "
"the group in the future."
msgstr ""
+"Bist du sicher, dass du den Benutzer \"%1$s\" in der Gruppe \"%2$s\" "
+"blockieren willst? Er wird aus der Gruppe gelöscht, kann keine Beiträge mehr "
+"abschicken und wird auch in Zukunft dieser Gruppe nicht mehr beitreten "
+"können."
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
@@ -1648,7 +1664,6 @@ msgid "Database error blocking user from group."
msgstr "Datenbank Fehler beim Versuch den Nutzer aus der Gruppe zu blockieren."
#: actions/groupbyid.php:74 actions/userbyid.php:70
-#, fuzzy
msgid "No ID."
msgstr "Keine ID"
@@ -1665,6 +1680,8 @@ msgid ""
"Customize the way your group looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Stelle ein wie die Gruppenseite aussehen soll. Hintergrundbild und "
+"Farbpalette frei wählbar."
#: actions/groupdesignsettings.php:266 actions/userdesignsettings.php:186
#: lib/designsettings.php:391 lib/designsettings.php:413
@@ -1688,7 +1705,6 @@ msgstr ""
"s."
#: actions/grouplogo.php:181
-#, fuzzy
msgid "User without matching profile."
msgstr "Benutzer ohne passendes Profil"
@@ -1710,9 +1726,9 @@ msgid "%s group members"
msgstr "%s Gruppen-Mitglieder"
#: actions/groupmembers.php:103
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group members, page %2$d"
-msgstr "%s Gruppen-Mitglieder, Seite %d"
+msgstr "%1$s Gruppen-Mitglieder, Seite %2$d"
#: actions/groupmembers.php:118
msgid "A list of the users in this group."
@@ -1738,12 +1754,18 @@ msgstr "Zum Admin ernennen"
msgid "Make this user an admin"
msgstr "Diesen Benutzer zu einem Admin ernennen"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s Zeitleiste"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Aktualisierungen von %1$s auf %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppen"
@@ -1762,6 +1784,11 @@ msgid ""
"for one](%%%%action.groupsearch%%%%) or [start your own!](%%%%action.newgroup"
"%%%%)"
msgstr ""
+"Finde und rede mit Gleichgesinnten in %%%%site.name%%%% Gruppen. Nachdem du "
+"einer Gruppe beigetreten bis kannst du mit \\\"!Gruppenname\\\" eine "
+"Nachricht an alle Gruppenmitglieder schicken. Du kannst nach einer [Gruppe "
+"suchen](%%%%action.groupsearch%%%%) oder deine eigene [Gruppe aufmachen!](%%%"
+"%action.newgroup%%%%)"
#: actions/groups.php:107 actions/usergroups.php:124 lib/groupeditform.php:122
msgid "Create a new group"
@@ -1817,7 +1844,6 @@ msgid "Error removing the block."
msgstr "Fehler beim Freigeben des Benutzers."
#: actions/imsettings.php:59
-#, fuzzy
msgid "IM settings"
msgstr "IM-Einstellungen"
@@ -1849,7 +1875,6 @@ msgstr ""
"Freundesliste hinzugefügt?)"
#: actions/imsettings.php:124
-#, fuzzy
msgid "IM address"
msgstr "IM-Adresse"
@@ -1915,9 +1940,9 @@ msgid "That is not your Jabber ID."
msgstr "Dies ist nicht deine JabberID."
#: actions/inbox.php:59
-#, fuzzy, php-format
+#, php-format
msgid "Inbox for %1$s - page %2$d"
-msgstr "Posteingang von %s"
+msgstr "Posteingang von %s - Seite %2$d"
#: actions/inbox.php:62
#, php-format
@@ -2008,7 +2033,6 @@ msgstr ""
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Senden"
@@ -2079,14 +2103,13 @@ msgid "You must be logged in to join a group."
msgstr "Du musst angemeldet sein, um Mitglied einer Gruppe zu werden."
#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
msgid "No nickname or ID."
-msgstr "Kein Nutzername."
+msgstr "Kein Benutzername oder ID"
#: actions/joingroup.php:141
-#, fuzzy, php-format
+#, php-format
msgid "%1$s joined group %2$s"
-msgstr "%s ist der Gruppe %s beigetreten"
+msgstr "%1$s ist der Gruppe %2$s beigetreten"
#: actions/leavegroup.php:60
msgid "You must be logged in to leave a group."
@@ -2097,9 +2120,9 @@ msgid "You are not a member of that group."
msgstr "Du bist kein Mitglied dieser Gruppe."
#: actions/leavegroup.php:137
-#, fuzzy, php-format
+#, php-format
msgid "%1$s left group %2$s"
-msgstr "%s hat die Gruppe %s verlassen"
+msgstr "%1$s hat die Gruppe %2$s verlassen"
#: actions/login.php:80 actions/otp.php:62 actions/register.php:137
msgid "Already logged in."
@@ -2156,9 +2179,9 @@ msgid "Only an admin can make another user an admin."
msgstr "Nur Administratoren können andere Nutzer zu Administratoren ernennen."
#: actions/makeadmin.php:96
-#, fuzzy, php-format
+#, php-format
msgid "%1$s is already an admin for group \"%2$s\"."
-msgstr "%s ist bereits ein Administrator der Gruppe „%s“."
+msgstr "%1$s ist bereits Administrator der Gruppe \"%2$s\"."
#: actions/makeadmin.php:133
#, fuzzy, php-format
@@ -2166,37 +2189,33 @@ msgid "Can't get membership record for %1$s in group %2$s."
msgstr "Konnte Benutzer %s aus der Gruppe %s nicht entfernen"
#: actions/makeadmin.php:146
-#, fuzzy, php-format
+#, php-format
msgid "Can't make %1$s an admin for group %2$s."
-msgstr "Konnte %s nicht zum Administrator der Gruppe %s machen"
+msgstr "Konnte %1$s nicht zum Administrator der Gruppe %2$s machen"
#: actions/microsummary.php:69
msgid "No current status"
msgstr "Kein aktueller Status"
#: actions/newapplication.php:52
-#, fuzzy
msgid "New Application"
-msgstr "Unbekannte Nachricht."
+msgstr "Neues Programm"
#: actions/newapplication.php:64
-#, fuzzy
msgid "You must be logged in to register an application."
-msgstr "Du musst angemeldet sein, um eine Gruppe zu erstellen."
+msgstr "Du musst angemeldet sein, um ein Programm zu registrieren."
#: actions/newapplication.php:143
-#, fuzzy
msgid "Use this form to register a new application."
-msgstr "Benutzer dieses Formular, um eine neue Gruppe zu erstellen."
+msgstr "Benutzer dieses Formular, um eine neues Programm zu erstellen."
#: actions/newapplication.php:176
msgid "Source URL is required."
-msgstr ""
+msgstr "Quell-URL ist erforderlich."
#: actions/newapplication.php:258 actions/newapplication.php:267
-#, fuzzy
msgid "Could not create application."
-msgstr "Konnte keinen Favoriten erstellen."
+msgstr "Konnte das Programm nicht erstellen."
#: actions/newgroup.php:53
msgid "New group"
@@ -2234,7 +2253,7 @@ msgid "Message sent"
msgstr "Nachricht gesendet"
#: actions/newmessage.php:185
-#, fuzzy, php-format
+#, php-format
msgid "Direct message to %s sent."
msgstr "Direkte Nachricht an %s abgeschickt"
@@ -2265,9 +2284,9 @@ msgid "Text search"
msgstr "Volltextsuche"
#: actions/noticesearch.php:91
-#, fuzzy, php-format
+#, php-format
msgid "Search results for \"%1$s\" on %2$s"
-msgstr "Suchergebnisse für „%s“ auf %s"
+msgstr "Suchergebnisse für \"%1$s\" auf %2$s"
#: actions/noticesearch.php:121
#, php-format
@@ -2275,6 +2294,8 @@ msgid ""
"Be the first to [post on this topic](%%%%action.newnotice%%%%?"
"status_textarea=%s)!"
msgstr ""
+"Sei der erste der [zu diesem Thema etwas schreibt](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
#: actions/noticesearch.php:124
#, php-format
@@ -2282,6 +2303,9 @@ msgid ""
"Why not [register an account](%%%%action.register%%%%) and be the first to "
"[post on this topic](%%%%action.newnotice%%%%?status_textarea=%s)!"
msgstr ""
+"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"bist der erste der [auf diese Nachricht antwortet](%%%%action.newnotice%%%%?"
+"status_textarea=%s)!"
#: actions/noticesearchrss.php:96
#, php-format
@@ -2309,9 +2333,8 @@ msgid "Nudge sent!"
msgstr "Stups gesendet!"
#: actions/oauthappssettings.php:59
-#, fuzzy
msgid "You must be logged in to list your applications."
-msgstr "Du musst angemeldet sein, um eine Gruppe zu bearbeiten."
+msgstr "Du musst angemeldet sein, um deine Programm anzuzeigen"
#: actions/oauthappssettings.php:74
msgid "OAuth applications"
@@ -2319,38 +2342,41 @@ msgstr "OAuth-Anwendungen"
#: actions/oauthappssettings.php:85
msgid "Applications you have registered"
-msgstr ""
+msgstr "Registrierte Programme"
#: actions/oauthappssettings.php:135
#, php-format
msgid "You have not registered any applications yet."
-msgstr ""
+msgstr "Du hast noch keine Programme registriert"
#: actions/oauthconnectionssettings.php:72
msgid "Connected applications"
-msgstr ""
+msgstr "Verbundene Programme"
#: actions/oauthconnectionssettings.php:83
msgid "You have allowed the following applications to access you account."
msgstr ""
+"Du hast das folgende Programm die Erlaubnis erteilt sich mit deinem Profil "
+"zu verbinden."
#: actions/oauthconnectionssettings.php:175
-#, fuzzy
msgid "You are not a user of that application."
-msgstr "Du bist kein Mitglied dieser Gruppe."
+msgstr "Du bist kein Benutzer dieses Programms."
#: actions/oauthconnectionssettings.php:186
msgid "Unable to revoke access for app: "
-msgstr ""
+msgstr "Kann Zugang dieses Programm nicht entfernen: "
#: actions/oauthconnectionssettings.php:198
#, php-format
msgid "You have not authorized any applications to use your account."
msgstr ""
+"Du hast noch kein Programm die Erlaubnis gegeben dein Profil zu benutzen."
#: actions/oauthconnectionssettings.php:211
msgid "Developers can edit the registration settings for their applications "
msgstr ""
+"Entwickler können die Registrierungseinstellungen ihrer Programme ändern "
#: actions/oembed.php:79 actions/shownotice.php:100
msgid "Notice has no profile"
@@ -2367,10 +2393,10 @@ msgstr "Content-Typ "
#: actions/oembed.php:160
msgid "Only "
-msgstr ""
+msgstr "Nur "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Kein unterstütztes Datenformat."
@@ -2392,7 +2418,7 @@ msgstr "Verwalte zahlreiche andere Einstellungen."
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr "(kostenloser Dienst)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
@@ -2419,9 +2445,8 @@ msgid "No user ID specified."
msgstr "Keine Benutzer ID angegeben"
#: actions/otp.php:83
-#, fuzzy
msgid "No login token specified."
-msgstr "Kein Profil angegeben."
+msgstr "Kein Zugangstoken angegeben."
#: actions/otp.php:90
#, fuzzy
@@ -2434,9 +2459,8 @@ msgid "Invalid login token specified."
msgstr "Token ungültig oder abgelaufen."
#: actions/otp.php:104
-#, fuzzy
msgid "Login token expired."
-msgstr "An Seite anmelden"
+msgstr "Zugangstoken ist abgelaufen."
#: actions/outbox.php:58
#, php-format
@@ -2514,13 +2538,14 @@ msgstr "Konnte neues Passwort nicht speichern"
msgid "Password saved."
msgstr "Passwort gespeichert."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
-msgstr ""
+msgstr "Pfad"
#: actions/pathsadminpanel.php:70
msgid "Path and server settings for this StatusNet site."
-msgstr ""
+msgstr "Pfad- und Serverangaben für diese StatusNet Seite."
#: actions/pathsadminpanel.php:157
#, php-format
@@ -2540,7 +2565,7 @@ msgstr "Hintergrund Verzeichnis ist nicht beschreibbar: %s"
#: actions/pathsadminpanel.php:177
#, php-format
msgid "Locales directory not readable: %s"
-msgstr ""
+msgstr "Sprachverzeichnis nicht lesbar: %s"
#: actions/pathsadminpanel.php:183
msgid "Invalid SSL server. The maximum length is 255 characters."
@@ -2568,11 +2593,11 @@ msgstr "Seitenpfad"
#: actions/pathsadminpanel.php:246
msgid "Path to locales"
-msgstr ""
+msgstr "Sprachverzeichnis"
#: actions/pathsadminpanel.php:246
msgid "Directory path to locales"
-msgstr ""
+msgstr "Pfad zu den Sprachen"
#: actions/pathsadminpanel.php:250
msgid "Fancy URLs"
@@ -2584,15 +2609,15 @@ msgstr "Schicke URLs (lesbarer und besser zu merken) verwenden?"
#: actions/pathsadminpanel.php:259
msgid "Theme"
-msgstr ""
+msgstr "Motiv"
#: actions/pathsadminpanel.php:264
msgid "Theme server"
-msgstr ""
+msgstr "Motiv-Server"
#: actions/pathsadminpanel.php:268
msgid "Theme path"
-msgstr ""
+msgstr "Motiv-Pfad"
#: actions/pathsadminpanel.php:272
msgid "Theme directory"
@@ -2634,7 +2659,7 @@ msgstr "Hintergrund Verzeichnis"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nie"
@@ -2690,11 +2715,11 @@ msgstr "Ungültiger Personen-Tag: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Benutzer die sich selbst mit %1$s getagged haben - Seite %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ungültiger Nachrichteninhalt"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2768,16 +2793,16 @@ msgstr "Teile meine aktuelle Position wenn ich Nachrichten sende"
#: actions/tagother.php:209 lib/subscriptionlist.php:106
#: lib/subscriptionlist.php:108 lib/userprofile.php:209
msgid "Tags"
-msgstr "Tags"
+msgstr "Stichwörter"
#: actions/profilesettings.php:147
msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-"Tags über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas oder "
-"Leerzeichen getrennt"
+"Stichwörter über dich selbst (Buchstaben, Zahlen, -, ., und _) durch Kommas "
+"oder Leerzeichen getrennt"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Sprache"
@@ -2805,7 +2830,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Die Biografie ist zu lang (max. %d Zeichen)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Keine Zeitzone ausgewählt."
@@ -2816,7 +2841,7 @@ msgstr "Die eingegebene Sprache ist zu lang (maximal 50 Zeichen)"
#: actions/profilesettings.php:253 actions/tagother.php:178
#, php-format
msgid "Invalid tag: \"%s\""
-msgstr "Ungültiger Tag: „%s“"
+msgstr "Ungültiges Stichwort: „%s“"
#: actions/profilesettings.php:306
msgid "Couldn't update user for autosubscribe."
@@ -2887,6 +2912,8 @@ msgstr "Sei der erste der etwas schreibt!"
msgid ""
"Why not [register an account](%%action.register%%) and be the first to post!"
msgstr ""
+"Warum nicht ein [Benutzerkonto anlegen](%%action.register%%) und den ersten "
+"Beitrag abschicken!"
#: actions/public.php:242
#, php-format
@@ -2896,6 +2923,11 @@ msgid ""
"tool. [Join now](%%action.register%%) to share notices about yourself with "
"friends, family, and colleagues! ([Read more](%%doc.help%%))"
msgstr ""
+"Das ist %%site.name%%, ein [Mikroblogging](http://de.wikipedia.org/wiki/"
+"Mikroblogging) Dienst auf Basis der freien Software [StatusNet](http://"
+"status.net/). [Melde dich jetzt an](%%action.register%%) und tausche "
+"Nachrichten mit deinen Freunden, Familie oder Kollegen aus! ([Mehr "
+"Informationen](%%doc.help%%))"
#: actions/public.php:247
#, php-format
@@ -2910,23 +2942,23 @@ msgstr ""
#: actions/publictagcloud.php:57
msgid "Public tag cloud"
-msgstr "Öffentliche Tag-Wolke"
+msgstr "Öffentliche Stichwort-Wolke"
#: actions/publictagcloud.php:63
#, php-format
msgid "These are most popular recent tags on %s "
-msgstr "Das sind die beliebtesten Tags auf %s "
+msgstr "Das sind die beliebtesten Stichwörter auf %s "
#: actions/publictagcloud.php:69
#, php-format
msgid "No one has posted a notice with a [hashtag](%%doc.tags%%) yet."
msgstr ""
-"Bis jetzt hat noch niemand eine Nachricht mit dem Tag [hashtag](%%doc.tags%"
-"%) gepostet."
+"Bis jetzt hat noch niemand eine Nachricht mit dem Stichwort [hashtag](%%doc."
+"tags%%) gepostet."
#: actions/publictagcloud.php:72
msgid "Be the first to post one!"
-msgstr ""
+msgstr "Sei der Erste der etwas schreibt!"
#: actions/publictagcloud.php:75
#, php-format
@@ -2934,10 +2966,12 @@ msgid ""
"Why not [register an account](%%action.register%%) and be the first to post "
"one!"
msgstr ""
+"Warum [registrierst Du nicht einen Account](%%%%action.register%%%%) und "
+"bist der erste der eine Nachricht abschickt!"
#: actions/publictagcloud.php:134
msgid "Tag cloud"
-msgstr "Tag-Wolke"
+msgstr "Stichwort-Wolke"
#: actions/recoverpassword.php:36
msgid "You are already logged in!"
@@ -2972,14 +3006,16 @@ msgid ""
"If you have forgotten or lost your password, you can get a new one sent to "
"the email address you have stored in your account."
msgstr ""
+"Wenn du dein Passwort vergessen hast kannst du dir ein neues an deine "
+"hinterlegte Email schicken lassen."
#: actions/recoverpassword.php:158
msgid "You have been identified. Enter a new password below. "
-msgstr ""
+msgstr "Du wurdest identifiziert. Gib ein neues Passwort ein. "
#: actions/recoverpassword.php:188
msgid "Password recovery"
-msgstr ""
+msgstr "Password-Wiederherstellung"
#: actions/recoverpassword.php:191
msgid "Nickname or email address"
@@ -3099,6 +3135,8 @@ msgid ""
"With this form you can create a new account. You can then post notices and "
"link up to friends and colleagues. "
msgstr ""
+"Hier kannst du einen neuen Zugang einrichten. Danach kannst du Nachrichten "
+"und Links an deine Freunde und Kollegen schicken. "
#: actions/register.php:425
msgid "1-64 lowercase letters or numbers, no punctuation or spaces. Required."
@@ -3115,7 +3153,7 @@ msgid "Same as password above. Required."
msgstr "Gleiches Passwort wie zuvor. Pflichteingabe."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-Mail"
@@ -3135,7 +3173,7 @@ msgstr "Meine Texte und Daten sind verfügbar unter"
#: actions/register.php:496
msgid "Creative Commons Attribution 3.0"
-msgstr ""
+msgstr "Creative Commons Namensnennung 3.0"
#: actions/register.php:497
msgid ""
@@ -3146,7 +3184,7 @@ msgstr ""
"Telefonnummer."
#: actions/register.php:538
-#, fuzzy, php-format
+#, php-format
msgid ""
"Congratulations, %1$s! And welcome to %%%%site.name%%%%. From here, you may "
"want to...\n"
@@ -3203,7 +3241,6 @@ msgid "Remote subscribe"
msgstr "Entferntes Abonnement"
#: actions/remotesubscribe.php:124
-#, fuzzy
msgid "Subscribe to a remote user"
msgstr "Abonniere diesen Benutzer"
@@ -3224,7 +3261,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:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonnieren"
@@ -3258,19 +3295,16 @@ msgid "You can't repeat your own notice."
msgstr "Du kannst deine eigene Nachricht nicht wiederholen."
#: actions/repeat.php:90
-#, fuzzy
msgid "You already repeated that notice."
-msgstr "Du hast diesen Benutzer bereits blockiert."
+msgstr "Nachricht bereits wiederholt"
#: actions/repeat.php:114 lib/noticelist.php:674
-#, fuzzy
msgid "Repeated"
-msgstr "Erstellt"
+msgstr "Wiederholt"
#: actions/repeat.php:119
-#, fuzzy
msgid "Repeated!"
-msgstr "Erstellt"
+msgstr "Wiederholt!"
#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3299,12 +3333,12 @@ msgid "Replies feed for %s (Atom)"
msgstr "Feed der Nachrichten von %s (Atom)"
#: actions/replies.php:199
-#, fuzzy, php-format
+#, php-format
msgid ""
"This is the timeline showing replies to %1$s but %2$s hasn't received a "
"notice to his attention yet."
msgstr ""
-"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
+"Dies ist die Zeitleiste für %1$s und Freunde aber bisher hat niemand etwas "
"gepostet."
#: actions/replies.php:204
@@ -3315,12 +3349,12 @@ msgid ""
msgstr ""
#: actions/replies.php:206
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can try to [nudge %1$s](../%2$s) or [post something to his or her "
"attention](%%%%action.newnotice%%%%?status_textarea=%3$s)."
msgstr ""
-"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
+"Du kannst [%1$s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
"zu erregen."
@@ -3329,6 +3363,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Antworten an %1$s auf %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kannst die Rollen von Nutzern dieser Seite nicht widerrufen."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Benutzer verfügt nicht über diese Rolle."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3339,44 +3381,43 @@ msgid "You cannot sandbox users on this site."
msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
#: actions/sandbox.php:72
-#, fuzzy
msgid "User is already sandboxed."
-msgstr "Dieser Benutzer hat dich blockiert."
+msgstr "Benutzer ist schon blockiert."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
-msgstr ""
+msgstr "Sitzung"
#: actions/sessionsadminpanel.php:65
-#, fuzzy
msgid "Session settings for this StatusNet site."
-msgstr "Design-Einstellungen für diese StatusNet-Website."
+msgstr "Sitzungs-Einstellungen für diese StatusNet-Website."
#: actions/sessionsadminpanel.php:175
msgid "Handle sessions"
-msgstr ""
+msgstr "Sitzung verwalten"
#: actions/sessionsadminpanel.php:177
msgid "Whether to handle sessions ourselves."
-msgstr ""
+msgstr "Sitzungsverwaltung selber übernehmen."
#: actions/sessionsadminpanel.php:181
msgid "Session debugging"
-msgstr ""
+msgstr "Sitzung untersuchen"
#: actions/sessionsadminpanel.php:183
msgid "Turn on debugging output for sessions."
-msgstr ""
+msgstr "Fehleruntersuchung für Sitzungen aktivieren"
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Site-Einstellungen speichern"
#: actions/showapplication.php:82
-#, fuzzy
msgid "You must be logged in to view an application."
-msgstr "Du musst angemeldet sein, um aus einer Gruppe auszutreten."
+msgstr "Du musst angemeldet sein, um aus dieses Programm zu betrachten."
#: actions/showapplication.php:157
#, fuzzy
@@ -3385,7 +3426,7 @@ msgstr "Nachricht hat kein Profil"
#: actions/showapplication.php:159 lib/applicationeditform.php:180
msgid "Icon"
-msgstr ""
+msgstr "Symbol"
#: actions/showapplication.php:169 actions/version.php:195
#: lib/applicationeditform.php:195
@@ -3393,36 +3434,35 @@ msgid "Name"
msgstr "Name"
#: actions/showapplication.php:178 lib/applicationeditform.php:222
-#, fuzzy
msgid "Organization"
-msgstr "Seitenerstellung"
+msgstr "Organisation"
#: actions/showapplication.php:187 actions/version.php:198
#: lib/applicationeditform.php:209 lib/groupeditform.php:172
msgid "Description"
msgstr "Beschreibung"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiken"
#: actions/showapplication.php:203
#, php-format
msgid "Created by %1$s - %2$s access by default - %3$d users"
-msgstr ""
+msgstr "Erstellt von %1$s - %2$s Standard Zugang - %3$d Benutzer"
#: actions/showapplication.php:213
msgid "Application actions"
-msgstr ""
+msgstr "Programmaktionen"
#: actions/showapplication.php:236
msgid "Reset key & secret"
-msgstr ""
+msgstr "Schlüssel zurücksetzen"
#: actions/showapplication.php:261
msgid "Application info"
-msgstr ""
+msgstr "Programminformation"
#: actions/showapplication.php:263
msgid "Consumer key"
@@ -3434,32 +3474,32 @@ msgstr ""
#: actions/showapplication.php:273
msgid "Request token URL"
-msgstr ""
+msgstr "Anfrage-Token Adresse"
#: actions/showapplication.php:278
msgid "Access token URL"
-msgstr ""
+msgstr "Zugriffs-Token Adresse"
#: actions/showapplication.php:283
-#, fuzzy
msgid "Authorize URL"
-msgstr "Autor"
+msgstr "Autorisationadresse"
#: actions/showapplication.php:288
msgid ""
"Note: We support HMAC-SHA1 signatures. We do not support the plaintext "
"signature method."
msgstr ""
+"Hinweis: Wir unterstützen HMAC-SHA1 Signaturen. Wir unterstützen keine "
+"Klartext Signaturen."
#: actions/showapplication.php:309
-#, fuzzy
msgid "Are you sure you want to reset your consumer key and secret?"
-msgstr "Bist du sicher, dass du diese Nachricht löschen möchtest?"
+msgstr "Bist du sicher, dass du den Schlüssel zurücksetzen willst?"
#: actions/showfavorites.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s's favorite notices, page %2$d"
-msgstr "%ss favorisierte Nachrichten"
+msgstr "%1$ss favorisierte Nachrichten, Seite %2$d"
#: actions/showfavorites.php:132
msgid "Could not retrieve favorite notices."
@@ -3511,9 +3551,9 @@ msgid "%s group"
msgstr "%s Gruppe"
#: actions/showgroup.php:84
-#, fuzzy, php-format
+#, php-format
msgid "%1$s group, page %2$d"
-msgstr "%s Gruppen-Mitglieder, Seite %d"
+msgstr "%1$s Gruppe, Seite %d"
#: actions/showgroup.php:226
msgid "Group profile"
@@ -3531,51 +3571,51 @@ msgstr "Nachricht"
#: actions/showgroup.php:292 lib/groupeditform.php:184
msgid "Aliases"
-msgstr ""
+msgstr "Pseudonyme"
#: actions/showgroup.php:301
msgid "Group actions"
msgstr "Gruppenaktionen"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Nachrichtenfeed der Gruppe %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Nachrichtenfeed der Gruppe %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Postausgang von %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Mitglieder"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Kein)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle Mitglieder"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Erstellt"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3585,7 +3625,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3598,7 +3638,7 @@ msgstr ""
"Freien Software [StatusNet](http://status.net/). Seine Mitglieder erstellen "
"kurze Nachrichten über Ihr Leben und Interessen. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratoren"
@@ -3630,14 +3670,14 @@ msgid " tagged %s"
msgstr "Nachrichten, die mit %s getagt sind"
#: actions/showstream.php:79
-#, fuzzy, php-format
+#, php-format
msgid "%1$s, page %2$d"
-msgstr "%s blockierte Benutzerprofile, Seite %d"
+msgstr "%1$s, Seite %2$d"
#: actions/showstream.php:122
-#, fuzzy, php-format
+#, php-format
msgid "Notice feed for %1$s tagged %2$s (RSS 1.0)"
-msgstr "Nachrichtenfeed der Gruppe %s"
+msgstr "Nachrichtenfeed für %1$s tagged %2$s (RSS 1.0)"
#: actions/showstream.php:129
#, php-format
@@ -3660,10 +3700,10 @@ msgid "FOAF for %s"
msgstr "FOAF von %s"
#: actions/showstream.php:200
-#, fuzzy, php-format
+#, php-format
msgid "This is the timeline for %1$s but %2$s hasn't posted anything yet."
msgstr ""
-"Dies ist die Zeitleiste für %s und Freunde aber bisher hat niemand etwas "
+"Dies ist die Zeitleiste für %1$s und Freunde aber bisher hat niemand etwas "
"gepostet."
#: actions/showstream.php:205
@@ -3671,16 +3711,17 @@ msgid ""
"Seen anything interesting recently? You haven't posted any notices yet, now "
"would be a good time to start :)"
msgstr ""
+"In letzter Zeit irgendwas interessantes erlebt? Du hast noch nichts "
+"geschrieben, jetzt wäre doch ein guter Zeitpunkt los zu legen :)"
#: actions/showstream.php:207
-#, fuzzy, php-format
+#, php-format
msgid ""
"You can try to nudge %1$s or [post something to his or her attention](%%%%"
"action.newnotice%%%%?status_textarea=%2$s)."
msgstr ""
-"Du kannst [%s in seinem Profil einen Stups geben](../%s) oder [ihm etwas "
-"posten](%%%%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit "
-"zu erregen."
+"Du kannst %1$s in seinem Profil einen Stups geben oder [ihm etwas posten](%%%"
+"%action.newnotice%%%%?status_textarea=%s) um seine Aufmerksamkeit zu erregen."
#: actions/showstream.php:243
#, php-format
@@ -3716,150 +3757,136 @@ msgid "User is already silenced."
msgstr "Nutzer ist bereits ruhig gestellt."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr "Grundeinstellungen für diese StatusNet Seite."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Der Seiten Name darf nicht leer sein."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Du musst eine gültige E-Mail-Adresse haben."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Unbekannte Sprache „%s“"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Minimale Textlänge ist 140 Zeichen."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
-msgstr ""
+msgstr "Duplikatlimit muss mehr als 1 Sekunde sein"
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
-msgstr ""
+msgstr "Allgemein"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Seitenname"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Der Name deiner Seite, sowas wie \"DeinUnternehmen Mircoblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
-msgstr ""
+msgstr "Erstellt von"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
+"Text der für den Credit-Link im Fußbereich auf jeder Seite benutzt wird"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
-msgstr ""
+msgstr "Erstellt von Adresse"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
+"Adresse die für den Credit-Link im Fußbereich auf jeder Seite benutzt wird"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakt-E-Mail-Adresse für Deine Site."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale Ansichten"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
-msgstr ""
+msgstr "Standard Zeitzone"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
-msgstr ""
+msgstr "Standard Zeitzone für die Seite (meistens UTC)."
-#: actions/siteadminpanel.php:281
-#, fuzzy
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Bevorzugte Sprache"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
+#: actions/siteadminpanel.php:271
+msgid "Limits"
+msgstr "Limit"
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
+msgstr "Textlimit"
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
+msgstr "Maximale Anzahl von Zeichen pro Nachricht"
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequenz"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
+msgstr "Wiederholungslimit"
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+"Wie lange muss ein Benutzer warten bis er eine identische Nachricht "
+"abschicken kann (in Sekunden)."
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Seitenbenachrichtigung"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Neue Nachricht"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Konnte Seitenbenachrichtigung nicht speichern"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Maximale Länge von Systembenachrichtigungen ist 255 Zeichen"
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Seitenbenachrichtigung"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Systembenachrichtigung (max. 255 Zeichen; HTML erlaubt)"
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Systemnachricht speichern"
#: actions/smssettings.php:58
-#, fuzzy
msgid "SMS settings"
msgstr "SMS-Einstellungen"
@@ -3889,7 +3916,6 @@ msgid "Enter the code you received on your phone."
msgstr "Gib den Code ein, den du auf deinem Handy via SMS bekommen hast."
#: actions/smssettings.php:138
-#, fuzzy
msgid "SMS phone number"
msgstr "SMS-Telefonnummer"
@@ -3922,7 +3948,6 @@ msgid "That phone number already belongs to another user."
msgstr "Diese Telefonnummer wird bereits von einem anderen Benutzer verwendet."
#: actions/smssettings.php:347
-#, fuzzy
msgid ""
"A confirmation code was sent to the phone number you added. Check your phone "
"for the code and instructions on how to use it."
@@ -3961,6 +3986,66 @@ msgstr ""
msgid "No code entered"
msgstr "Kein Code eingegeben"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Hauptnavigation"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Wann sollen Statistiken zum status.net Server geschickt werden"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequenz"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL melden"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Site-Einstellungen speichern"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du hast dieses Profil nicht abonniert."
@@ -3972,17 +4057,15 @@ msgstr "Konnte Abonnement nicht erstellen."
#: actions/subscribe.php:77
msgid "This action only accepts POST requests."
-msgstr ""
+msgstr "Diese Aktion nimmt nur POST-Requests"
#: actions/subscribe.php:107
-#, fuzzy
msgid "No such profile."
-msgstr "Datei nicht gefunden."
+msgstr "Profil nicht gefunden."
#: actions/subscribe.php:117
-#, fuzzy
msgid "You cannot subscribe to an OMB 0.1 remote profile with this action."
-msgstr "Du hast dieses Profil nicht abonniert."
+msgstr "Du hast dieses OMB 0.1 Profil nicht abonniert."
#: actions/subscribe.php:145
msgid "Subscribed"
@@ -4092,9 +4175,8 @@ msgid "Notice feed for tag %s (Atom)"
msgstr "Nachrichten Feed für Tag %s (Atom)"
#: actions/tagother.php:39
-#, fuzzy
msgid "No ID argument."
-msgstr "Kein id Argument."
+msgstr "Kein ID Argument."
#: actions/tagother.php:65
#, php-format
@@ -4119,8 +4201,8 @@ msgid ""
"Tags for this user (letters, numbers, -, ., and _), comma- or space- "
"separated"
msgstr ""
-"Tags für diesen Benutzer (Buchstaben, Nummer, -, ., und _), durch Komma oder "
-"Leerzeichen getrennt"
+"Stichwörter für diesen Benutzer (Buchstaben, Nummer, -, ., und _), durch "
+"Komma oder Leerzeichen getrennt"
#: actions/tagother.php:193
msgid ""
@@ -4131,7 +4213,7 @@ msgstr ""
#: actions/tagother.php:200
msgid "Could not save tags."
-msgstr "Konnte Tags nicht speichern."
+msgstr "Konnte Stichwörter nicht speichern."
#: actions/tagother.php:236
msgid "Use this form to add tags to your subscribers or subscriptions."
@@ -4141,7 +4223,7 @@ msgstr ""
#: actions/tagrss.php:35
msgid "No such tag."
-msgstr "Tag nicht vorhanden."
+msgstr "Stichwort nicht vorhanden."
#: actions/twitapitrends.php:85
msgid "API method under construction."
@@ -4152,9 +4234,8 @@ msgid "You haven't blocked that user."
msgstr "Du hast diesen Benutzer nicht blockiert."
#: actions/unsandbox.php:72
-#, fuzzy
msgid "User is not sandboxed."
-msgstr "Dieser Benutzer hat dich blockiert."
+msgstr "Benutzer ist nicht blockiert."
#: actions/unsilence.php:72
msgid "User is not silenced."
@@ -4168,17 +4249,16 @@ msgstr "Keine Profil-ID in der Anfrage."
msgid "Unsubscribed"
msgstr "Abbestellt"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
-#, fuzzy, php-format
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
+#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
-"Die Nachrichtenlizenz '%s' ist nicht kompatibel mit der Lizenz der Seite '%"
-"s'."
+"Die Benutzerlizenz ‘%1$s’ ist nicht kompatibel mit der Lizenz der Seite ‘%2"
+"$s’."
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Benutzer"
@@ -4198,7 +4278,7 @@ msgstr "Willkommens-Nachricht ungültig. Maximale Länge sind 255 Zeichen."
#: actions/useradminpanel.php:165
#, php-format
msgid "Invalid default subscripton: '%1$s' is not user."
-msgstr ""
+msgstr "Ungültiges Abonnement: '%1$s' ist kein Benutzer"
#: actions/useradminpanel.php:218 lib/accountsettingsaction.php:108
#: lib/personalgroupnav.php:109
@@ -4207,11 +4287,11 @@ msgstr "Profil"
#: actions/useradminpanel.php:222
msgid "Bio Limit"
-msgstr ""
+msgstr "Bio Limit"
#: actions/useradminpanel.php:223
msgid "Maximum length of a profile bio in characters."
-msgstr ""
+msgstr "Maximale Länge in Zeichen der Profil Bio."
#: actions/useradminpanel.php:231
msgid "New users"
@@ -4219,7 +4299,7 @@ msgstr "Neue Nutzer"
#: actions/useradminpanel.php:235
msgid "New user welcome"
-msgstr ""
+msgstr "Neue Benutzer empfangen"
#: actions/useradminpanel.php:236
msgid "Welcome text for new users (Max 255 chars)."
@@ -4277,9 +4357,8 @@ msgid "Reject"
msgstr "Ablehnen"
#: actions/userauthorization.php:220
-#, fuzzy
msgid "Reject this subscription"
-msgstr "%s Abonnements"
+msgstr "Abonnement ablehnen"
#: actions/userauthorization.php:232
msgid "No authorization request!"
@@ -4290,29 +4369,27 @@ msgid "Subscription authorized"
msgstr "Abonnement autorisiert"
#: actions/userauthorization.php:256
-#, fuzzy
msgid ""
"The subscription has been authorized, but no callback URL was passed. Check "
"with the site’s instructions for details on how to authorize the "
"subscription. Your subscription token is:"
msgstr ""
-"Das Abonnement wurde bestätigt, aber es wurde keine Callback-URL "
-"zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
-"bestätigt werden. Dein Abonnement-Token ist:"
+"Das Abonnement wurde bestätigt, aber es wurde keine Antwort-URL angegeben. "
+"Lies nochmal die Anweisungen auf der Seite wie Abonnements bestätigt werden. "
+"Dein Abonnement-Token ist:"
#: actions/userauthorization.php:266
msgid "Subscription rejected"
msgstr "Abonnement abgelehnt"
#: actions/userauthorization.php:268
-#, fuzzy
msgid ""
"The subscription has been rejected, but no callback URL was passed. Check "
"with the site’s instructions for details on how to fully reject the "
"subscription."
msgstr ""
"Das Abonnement wurde abgelehnt, aber es wurde keine Callback-URL "
-"zurückgegeben. Lies nochmal die Anweisungen der Site, wie Abonnements "
+"zurückgegeben. Lies nochmal die Anweisungen der Seite, wie Abonnements "
"vollständig abgelehnt werden. Dein Abonnement-Token ist:"
#: actions/userauthorization.php:303
@@ -4333,7 +4410,7 @@ msgstr ""
#: actions/userauthorization.php:329
#, php-format
msgid "Profile URL ‘%s’ is for a local user."
-msgstr ""
+msgstr "Profiladresse '%s' ist für einen lokalen Benutzer."
#: actions/userauthorization.php:345
#, php-format
@@ -4359,34 +4436,43 @@ msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Stelle ein wie deine Profilseite aussehen soll. Hintergrundbild und "
+"Farbpalette sind frei wählbar."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
-msgstr ""
+msgstr "Hab Spaß!"
#: actions/usergroups.php:64
-#, fuzzy, php-format
+#, php-format
msgid "%1$s groups, page %2$d"
-msgstr "%s Gruppen-Mitglieder, Seite %d"
+msgstr "%1$s Gruppen, Seite %2$d"
#: actions/usergroups.php:130
msgid "Search for more groups"
msgstr "Suche nach weiteren Gruppen"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s ist in keiner Gruppe Mitglied."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+"Versuche [Gruppen zu finden](%%action.groupsearch%%) und diesen beizutreten."
+
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Aktualisierungen von %1$s auf %2$s!"
#: actions/version.php:73
-#, fuzzy, php-format
+#, php-format
msgid "StatusNet %s"
-msgstr "Statistiken"
+msgstr "StatusNet %s"
#: actions/version.php:153
#, php-format
@@ -4394,10 +4480,12 @@ msgid ""
"This site is powered by %1$s version %2$s, Copyright 2008-2010 StatusNet, "
"Inc. and contributors."
msgstr ""
+"Die Seite wird mit %1$s Version %2$s betrieben. Copyright 2008-2010 "
+"StatusNet, Inc. und Mitarbeiter"
#: actions/version.php:161
msgid "Contributors"
-msgstr ""
+msgstr "Mitarbeiter"
#: actions/version.php:168
msgid ""
@@ -4406,6 +4494,10 @@ msgid ""
"Software Foundation, either version 3 of the License, or (at your option) "
"any later version. "
msgstr ""
+"StatusNet ist freie Software: Sie dürfen es weiter verteilen und/oder "
+"verändern unter Berücksichtigung der Regeln zur GNU General Public License "
+"wie veröffentlicht durch die Free Software Foundation, entweder Version 3 "
+"der Lizenz, oder jede höhere Version."
#: actions/version.php:174
msgid ""
@@ -4421,20 +4513,20 @@ msgid ""
"You should have received a copy of the GNU Affero General Public License "
"along with this program. If not, see %s."
msgstr ""
+"Du hast eine Kopie der GNU Affero General Public License zusammen mit diesem "
+"Programm erhalten. Wenn nicht, siehe %s."
#: actions/version.php:189
msgid "Plugins"
-msgstr ""
+msgstr "Erweiterungen"
-#: actions/version.php:196 lib/action.php:778
-#, fuzzy
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
-msgstr "Eigene"
+msgstr "Version"
#: actions/version.php:197
-#, fuzzy
msgid "Author(s)"
-msgstr "Autor"
+msgstr "Autor(en)"
#: classes/File.php:144
#, php-format
@@ -4442,34 +4534,34 @@ msgid ""
"No file may be larger than %d bytes and the file you sent was %d bytes. Try "
"to upload a smaller version."
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
#, php-format
msgid "A file this large would exceed your user quota of %d bytes."
-msgstr ""
+msgstr "Eine Datei dieser Größe überschreitet deine User Quota von %d Byte."
#: classes/File.php:161
#, php-format
msgid "A file this large would exceed your monthly quota of %d bytes."
msgstr ""
+"Eine Datei dieser Größe würde deine monatliche Quota von %d Byte "
+"überschreiten."
#: classes/Group_member.php:41
-#, fuzzy
msgid "Group join failed."
-msgstr "Gruppenprofil"
+msgstr "Konnte Gruppe nicht beitreten"
#: classes/Group_member.php:53
-#, fuzzy
msgid "Not part of group."
-msgstr "Konnte Gruppe nicht aktualisieren."
+msgstr "Nicht Mitglied der Gruppe"
#: classes/Group_member.php:60
-#, fuzzy
msgid "Group leave failed."
-msgstr "Gruppenprofil"
+msgstr "Konnte Gruppe nicht verlassen"
#: classes/Local_group.php:41
-#, fuzzy
msgid "Could not update local group."
msgstr "Konnte Gruppe nicht aktualisieren."
@@ -4479,9 +4571,8 @@ msgid "Could not create login token for %s"
msgstr "Konnte keinen Favoriten erstellen."
#: classes/Message.php:45
-#, fuzzy
msgid "You are banned from sending direct messages."
-msgstr "Fehler beim Senden der Nachricht"
+msgstr "Direktes senden von Nachrichten wurde blockiert"
#: classes/Message.php:61
msgid "Could not insert message."
@@ -4496,23 +4587,22 @@ msgstr "Konnte Nachricht nicht mit neuer URI versehen."
msgid "DB error inserting hashtag: %s"
msgstr "Datenbankfehler beim Einfügen des Hashtags: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem bei Speichern der Nachricht. Sie ist zu lang."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem bei Speichern der Nachricht. Unbekannter Benutzer."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:254
-#, fuzzy
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4520,24 +4610,23 @@ msgstr ""
"Zu schnell zu viele Nachrichten; atme kurz durch und schicke sie erneut in "
"ein paar Minuten ab."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
"Du wurdest für das Schreiben von Nachrichten auf dieser Seite gesperrt."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:911
-#, fuzzy
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem bei Speichern der Nachricht."
-#: classes/Notice.php:1442
-#, fuzzy, php-format
+#: classes/Notice.php:1459
+#, php-format
msgid "RT @%1$s %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "RT @%1$s %2$s"
#: classes/Subscription.php:66 lib/oauthstore.php:465
msgid "You have been banned from subscribing."
@@ -4557,11 +4646,14 @@ msgid "Not subscribed!"
msgstr "Nicht abonniert!"
#: classes/Subscription.php:163
-#, fuzzy
msgid "Couldn't delete self-subscription."
msgstr "Konnte Abonnement nicht löschen."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Konnte OMB-Abonnement nicht löschen."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Konnte Abonnement nicht löschen."
@@ -4570,20 +4662,20 @@ msgstr "Konnte Abonnement nicht löschen."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Herzlich willkommen bei %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Konnte Gruppe nicht erstellen."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Konnte Gruppenmitgliedschaft nicht setzen."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Konnte Abonnement nicht erstellen."
@@ -4605,9 +4697,8 @@ msgid "Change email handling"
msgstr "Ändere die E-Mail-Verarbeitung"
#: lib/accountsettingsaction.php:124
-#, fuzzy
msgid "Design your profile"
-msgstr "Benutzerprofil"
+msgstr "Passe dein Profil an"
#: lib/accountsettingsaction.php:128
msgid "Other"
@@ -4618,203 +4709,178 @@ msgid "Other options"
msgstr "Sonstige Optionen"
#: lib/action.php:144
-#, fuzzy, php-format
+#, php-format
msgid "%1$s - %2$s"
-msgstr "%1$s (%2$s)"
+msgstr "%1$s - %2$s"
#: lib/action.php:159
msgid "Untitled page"
msgstr "Seite ohne Titel"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Hauptnavigation"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persönliches Profil und Freundes-Zeitleiste"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Eigene"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Ändere deine E-Mail, dein Avatar, Passwort, Profil"
-
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
+msgstr "Ändere deine E-Mail, Avatar, Passwort und Profil"
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Konnte nicht zum Server umleiten: %s"
+msgstr "Zum Dienst verbinden"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Verbinden"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Hauptnavigation"
+msgstr "Seiteneinstellung ändern"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
-msgstr "Admin"
+msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Lade Freunde und Kollegen ein dir auf %s zu folgen"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Einladen"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Von der Seite abmelden"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Abmelden"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Neues Konto erstellen"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Registrieren"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Auf der Seite anmelden"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Anmelden"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hilf mir!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Hilfe"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Suche nach Leuten oder Text"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Suchen"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Seitennachricht"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale Ansichten"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Neue Nachricht"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Unternavigation"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hilfe"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Über"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "AGB"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privatsphäre"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Quellcode"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
-#, fuzzy
+#: lib/action.php:771
msgid "Badge"
-msgstr "Stups"
+msgstr "Plakette"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4823,12 +4889,12 @@ msgstr ""
"**%%site.name%%** ist ein Microbloggingdienst von [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** ist ein Microbloggingdienst."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4839,161 +4905,140 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "StatusNet-Software-Lizenz"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, 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:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
-#, fuzzy
+#: lib/action.php:847
msgid "All "
msgstr "Alle "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "Lizenz."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Seitenerstellung"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Später"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Vorher"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
-msgstr ""
+msgstr "Kann eingebundenen XML Inhalt nicht verarbeiten."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
-#, fuzzy
msgid "You cannot make changes to this site."
-msgstr "Du kannst diesem Benutzer keine Nachricht schicken."
+msgstr "Du kannst keine Änderungen an dieser Seite vornehmen."
#. TRANS: Client error message
#: lib/adminpanelaction.php:110
-#, fuzzy
msgid "Changes to that panel are not allowed."
-msgstr "Registrierung nicht gestattet"
+msgstr "Änderungen an dieser Seite sind nicht erlaubt."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() noch nicht implementiert."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() noch nicht implementiert."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Konnte die Design Einstellungen nicht löschen."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
-#, fuzzy
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
-msgstr "Bestätigung der E-Mail-Adresse"
+msgstr "Basis Seiteneinstellungen"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Seite"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
-#, fuzzy
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
-msgstr "SMS-Konfiguration"
+msgstr "Motiv-Konfiguration"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
-msgstr "Eigene"
+msgstr "Design"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
-#, fuzzy
+#: lib/adminpanelaction.php:364
msgid "User configuration"
-msgstr "SMS-Konfiguration"
+msgstr "Benutzereinstellung"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Benutzer"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
-#, fuzzy
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
-msgstr "SMS-Konfiguration"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Zugang"
+msgstr "Zugangskonfiguration"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
-#, fuzzy
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
-msgstr "SMS-Konfiguration"
-
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Pfad"
+msgstr "Pfadkonfiguration"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
-#, fuzzy
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
-msgstr "SMS-Konfiguration"
+msgstr "Sitzungseinstellungen"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Seitennachricht bearbeiten"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Eigene"
+msgid "Snapshots configuration"
+msgstr "SMS-Konfiguration"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5006,40 +5051,36 @@ msgstr ""
#: lib/applicationeditform.php:136
msgid "Edit application"
-msgstr ""
+msgstr "Programm bearbeiten"
#: lib/applicationeditform.php:184
msgid "Icon for this application"
-msgstr ""
+msgstr "Programmsymbol"
#: lib/applicationeditform.php:204
-#, fuzzy, php-format
+#, php-format
msgid "Describe your application in %d characters"
-msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
+msgstr "Beschreibe dein Programm in %d Zeichen"
#: lib/applicationeditform.php:207
-#, fuzzy
msgid "Describe your application"
-msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
+msgstr "Beschreibe dein Programm"
#: lib/applicationeditform.php:216
-#, fuzzy
msgid "Source URL"
-msgstr "Quellcode"
+msgstr "Quelladresse"
#: lib/applicationeditform.php:218
-#, fuzzy
msgid "URL of the homepage of this application"
-msgstr "URL der Homepage oder Blogs der Gruppe oder des Themas"
+msgstr "Adresse der Homepage dieses Programms"
#: lib/applicationeditform.php:224
msgid "Organization responsible for this application"
msgstr ""
#: lib/applicationeditform.php:230
-#, fuzzy
msgid "URL for the homepage of the organization"
-msgstr "URL der Homepage oder Blogs der Gruppe oder des Themas"
+msgstr "Homepage der Gruppe oder des Themas"
#: lib/applicationeditform.php:236
msgid "URL to redirect to after authentication"
@@ -5047,30 +5088,31 @@ msgstr ""
#: lib/applicationeditform.php:258
msgid "Browser"
-msgstr ""
+msgstr "Browser"
#: lib/applicationeditform.php:274
msgid "Desktop"
-msgstr ""
+msgstr "Arbeitsfläche"
#: lib/applicationeditform.php:275
msgid "Type of application, browser or desktop"
-msgstr ""
+msgstr "Typ der Anwendung, Browser oder Arbeitsfläche"
#: lib/applicationeditform.php:297
msgid "Read-only"
-msgstr ""
+msgstr "Schreibgeschützt"
#: lib/applicationeditform.php:315
msgid "Read-write"
-msgstr ""
+msgstr "Lese/Schreibzugriff"
#: lib/applicationeditform.php:316
msgid "Default access for this application: read-only, or read-write"
msgstr ""
+"Standardeinstellung dieses Programms: Schreibgeschützt oder Lese/"
+"Schreibzugriff"
#: lib/applicationlist.php:154
-#, fuzzy
msgid "Revoke"
msgstr "Entfernen"
@@ -5092,17 +5134,15 @@ msgstr "Nachrichten in denen dieser Anhang erscheint"
#: lib/attachmenttagcloudsection.php:48
msgid "Tags for this attachment"
-msgstr "Tags für diesen Anhang"
+msgstr "Stichworte für diesen Anhang"
#: lib/authenticationplugin.php:220 lib/authenticationplugin.php:225
-#, fuzzy
msgid "Password changing failed"
-msgstr "Passwort geändert"
+msgstr "Passwort konnte nicht geändert werden"
#: lib/authenticationplugin.php:235
-#, fuzzy
msgid "Password changing is not allowed"
-msgstr "Passwort geändert"
+msgstr "Passwort kann nicht geändert werden"
#: lib/channel.php:138 lib/channel.php:158
msgid "Command results"
@@ -5127,12 +5167,12 @@ msgstr "Die bestätigte E-Mail-Adresse konnte nicht gespeichert werden."
#: lib/command.php:92
msgid "It does not make a lot of sense to nudge yourself!"
-msgstr ""
+msgstr "Es macht keinen Sinn dich selbst anzustupsen!"
#: lib/command.php:99
-#, fuzzy, php-format
+#, php-format
msgid "Nudge sent to %s"
-msgstr "Stups abgeschickt"
+msgstr "Stups an %s geschickt"
#: lib/command.php:126
#, php-format
@@ -5141,6 +5181,9 @@ msgid ""
"Subscribers: %2$s\n"
"Notices: %3$s"
msgstr ""
+"Abonnements: %1$s\n"
+"Abonnenten: %2$s\n"
+"Mitteilungen: %3$s"
#: lib/command.php:152 lib/command.php:390 lib/command.php:451
msgid "Notice with that id does not exist"
@@ -5184,12 +5227,12 @@ msgstr "%s hat die Gruppe %s verlassen"
msgid "Fullname: %s"
msgstr "Vollständiger Name: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Standort: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Homepage: %s"
@@ -5222,19 +5265,18 @@ msgid "Already repeated that notice"
msgstr "Nachricht bereits wiederholt"
#: lib/command.php:426
-#, fuzzy, php-format
+#, php-format
msgid "Notice from %s repeated"
-msgstr "Nachricht hinzugefügt"
+msgstr "Nachricht von %s wiederholt"
#: lib/command.php:428
-#, fuzzy
msgid "Error repeating notice."
-msgstr "Problem beim Speichern der Nachricht."
+msgstr "Fehler beim Wiederholen der Nachricht"
#: lib/command.php:482
-#, fuzzy, php-format
+#, php-format
msgid "Notice too long - maximum is %d characters, you sent %d"
-msgstr "Nachricht zu lange - maximal 140 Zeichen erlaubt, du hast %s gesendet"
+msgstr "Nachricht zu lange - maximal %d Zeichen erlaubt, du hast %d gesendet"
#: lib/command.php:491
#, php-format
@@ -5289,22 +5331,21 @@ msgstr "Konnte Benachrichtigung nicht aktivieren."
#: lib/command.php:654
msgid "Login command is disabled"
-msgstr ""
+msgstr "Anmeldung ist abgeschaltet"
#: lib/command.php:665
#, php-format
msgid "This link is useable only once, and is good for only 2 minutes: %s"
-msgstr ""
+msgstr "Der Link ist nur einmal benutzbar und für eine Dauer von 2 Minuten: %s"
#: lib/command.php:692
-#, fuzzy, php-format
+#, php-format
msgid "Unsubscribed %s"
msgstr "%s nicht mehr abonniert"
#: lib/command.php:709
-#, fuzzy
msgid "You are not subscribed to anyone."
-msgstr "Du hast dieses Profil nicht abonniert."
+msgstr "Du hast niemanden abonniert."
#: lib/command.php:711
msgid "You are subscribed to this person:"
@@ -5384,12 +5425,11 @@ msgstr "Ich habe an folgenden Stellen nach Konfigurationsdateien gesucht: "
#: lib/common.php:151
msgid "You may wish to run the installer to fix this."
-msgstr ""
+msgstr "Bitte die Installation erneut starten um das Problem zu beheben."
#: lib/common.php:152
-#, fuzzy
msgid "Go to the installer."
-msgstr "Auf der Seite anmelden"
+msgstr "Zur Installation gehen."
#: lib/connectsettingsaction.php:110
msgid "IM"
@@ -5404,13 +5444,12 @@ msgid "Updates by SMS"
msgstr "Aktualisierungen via SMS"
#: lib/connectsettingsaction.php:120
-#, fuzzy
msgid "Connections"
-msgstr "Verbinden"
+msgstr "Verbindungen"
#: lib/connectsettingsaction.php:121
msgid "Authorized connected applications"
-msgstr ""
+msgstr "Programme mit Zugriffserlaubnis"
#: lib/dberroraction.php:60
msgid "Database error"
@@ -5429,15 +5468,13 @@ msgstr ""
#: lib/designsettings.php:418
msgid "Design defaults restored."
-msgstr ""
+msgstr "Standard Design wieder hergestellt."
#: lib/disfavorform.php:114 lib/disfavorform.php:140
-#, fuzzy
msgid "Disfavor this notice"
msgstr "Aus Favoriten entfernen"
#: lib/favorform.php:114 lib/favorform.php:140
-#, fuzzy
msgid "Favor this notice"
msgstr "Zu den Favoriten hinzufügen"
@@ -5467,44 +5504,45 @@ msgstr "Daten exportieren"
#: lib/galleryaction.php:121
msgid "Filter tags"
-msgstr "Tags filtern"
+msgstr "Stichworte filtern"
#: lib/galleryaction.php:131
msgid "All"
msgstr "Alle"
#: lib/galleryaction.php:139
-#, fuzzy
msgid "Select tag to filter"
-msgstr "Wähle einen Netzanbieter"
+msgstr "Wähle ein Stichwort, um die Liste einzuschränken"
#: lib/galleryaction.php:140
msgid "Tag"
-msgstr "Tag"
+msgstr "Stichwort"
#: lib/galleryaction.php:141
-#, fuzzy
msgid "Choose a tag to narrow list"
-msgstr "Wähle einen Tag, um die Liste einzuschränken"
+msgstr "Wähle ein Stichwort, um die Liste einzuschränken"
#: lib/galleryaction.php:143
msgid "Go"
msgstr "Los geht's"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Teile dem Benutzer die \"%s\" Rolle zu"
+
#: lib/groupeditform.php:163
-#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
-msgstr "URL der Homepage oder Blogs der Gruppe oder des Themas"
+msgstr "Adresse der Homepage oder Blogs der Gruppe oder des Themas"
#: lib/groupeditform.php:168
-#, fuzzy
msgid "Describe the group or topic"
-msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
+msgstr "Beschreibe die Gruppe oder das Thema"
#: lib/groupeditform.php:170
-#, fuzzy, php-format
+#, php-format
msgid "Describe the group or topic in %d characters"
-msgstr "Beschreibe die Gruppe oder das Thema in 140 Zeichen"
+msgstr "Beschreibe die Gruppe oder das Thema in %d Zeichen"
#: lib/groupeditform.php:179
msgid ""
@@ -5560,7 +5598,7 @@ msgstr "Gruppen mit den meisten Beiträgen"
#: lib/grouptagcloudsection.php:56
#, php-format
msgid "Tags in %s group's notices"
-msgstr "Tags in den Nachrichten der Gruppe %s"
+msgstr "Stichworte in den Nachrichten der Gruppe %s"
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
@@ -5629,11 +5667,11 @@ msgstr "Mit Nutzernamen und Passwort anmelden"
msgid "Sign up for a new account"
msgstr "Registriere ein neues Nutzerkonto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Bestätigung der E-Mail-Adresse"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5663,12 +5701,12 @@ msgstr ""
"Vielen Dank!\n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s hat deine Nachrichten auf %2$s abonniert."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5694,17 +5732,17 @@ msgstr ""
"Du kannst Deine E-Mail-Adresse und die Benachrichtigungseinstellungen auf %8"
"$s ändern.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Biografie: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Neue E-Mail-Adresse um auf %s zu schreiben"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5725,21 +5763,21 @@ msgstr ""
"Viele Grüße,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s Status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS-Konfiguration"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Du wurdest von %s angestupst"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5766,12 +5804,12 @@ msgstr ""
"Mit freundlichen Grüßen,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Neue private Nachricht von %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5804,12 +5842,12 @@ msgstr ""
"Mit freundlichen Grüßen,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) hat deine Nachricht als Favorit gespeichert"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5830,12 +5868,13 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
+"%s (@%s) hat dir eine Nachricht gesendet um deine Aufmerksamkeit zu erlangen"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5926,11 +5965,11 @@ msgstr "Upload der Datei wurde wegen der Dateiendung gestoppt."
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota."
-msgstr ""
+msgstr "Dateigröße liegt über dem Benutzerlimit"
#: lib/mediafile.php:196 lib/mediafile.php:233
msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "Datei konnte nicht in das Zielverzeichnis verschoben werden."
#: lib/mediafile.php:201 lib/mediafile.php:237
#, fuzzy
@@ -5940,12 +5979,12 @@ msgstr "Konnte öffentlichen Stream nicht abrufen."
#: lib/mediafile.php:270
#, php-format
msgid " Try using another %s format."
-msgstr ""
+msgstr "Versuche ein anderes %s Format."
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported file type on this server."
-msgstr ""
+msgstr "%s ist kein unterstütztes Dateiformat auf diesem Server."
#: lib/messageform.php:120
msgid "Send a direct notice"
@@ -5960,7 +5999,6 @@ msgid "Available characters"
msgstr "Verfügbare Zeichen"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Senden"
@@ -5976,11 +6014,11 @@ msgstr "Was ist los, %s?"
#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Anhängen"
#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Datei anhängen"
#: lib/noticeform.php:212
msgid "Share my location"
@@ -5995,6 +6033,8 @@ msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Es tut uns Leid, aber die Abfrage deiner GPS Position hat zu lange gedauert. "
+"Bitte versuche es später wieder."
#: lib/noticelist.php:429
#, php-format
@@ -6019,7 +6059,7 @@ msgstr "W"
#: lib/noticelist.php:438
msgid "at"
-msgstr ""
+msgstr "in"
#: lib/noticelist.php:566
msgid "in context"
@@ -6066,9 +6106,8 @@ msgid "Error inserting remote profile"
msgstr "Fehler beim Einfügen des entfernten Profils"
#: lib/oauthstore.php:345
-#, fuzzy
msgid "Duplicate notice"
-msgstr "Notiz löschen"
+msgstr "Doppelte Nachricht"
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
@@ -6086,10 +6125,6 @@ msgstr "Antworten"
msgid "Favorites"
msgstr "Favoriten"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Benutzer"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Posteingang"
@@ -6109,14 +6144,13 @@ msgstr "Deine gesendeten Nachrichten"
#: lib/personaltagcloudsection.php:56
#, php-format
msgid "Tags in %s's notices"
-msgstr "Tags in %ss Nachrichten"
+msgstr "Stichworte in %ss Nachrichten"
#: lib/plugin.php:114
-#, fuzzy
msgid "Unknown"
msgstr "Unbekannter Befehl"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnements"
@@ -6124,23 +6158,23 @@ msgstr "Abonnements"
msgid "All subscriptions"
msgstr "Alle Abonnements"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnenten"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alle Abonnenten"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Nutzer ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Mitglied seit"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle Gruppen"
@@ -6151,7 +6185,7 @@ msgstr "Kein id Argument."
#: lib/profileformaction.php:137
msgid "Unimplemented method."
-msgstr ""
+msgstr "Nicht unterstützte Methode."
#: lib/publicgroupnav.php:78
msgid "Public"
@@ -6163,15 +6197,15 @@ msgstr "Benutzer-Gruppen"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
msgid "Recent tags"
-msgstr "Aktuelle Tags"
+msgstr "Aktuelle Stichworte"
#: lib/publicgroupnav.php:88
msgid "Featured"
-msgstr "Featured"
+msgstr "Beliebte Benutzer"
#: lib/publicgroupnav.php:92
msgid "Popular"
-msgstr "Beliebt"
+msgstr "Beliebte Beiträge"
#: lib/repeatform.php:107
msgid "Repeat this notice?"
@@ -6181,7 +6215,12 @@ msgstr "Diese Nachricht wiederholen?"
msgid "Repeat this notice"
msgstr "Diese Nachricht wiederholen"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Widerrufe die \"%s\" Rolle von diesem Benutzer"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6199,16 +6238,15 @@ msgstr "Site durchsuchen"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Stichwort/Stichwörter"
#: lib/searchaction.php:127
msgid "Search"
msgstr "Suchen"
#: lib/searchaction.php:162
-#, fuzzy
msgid "Search help"
-msgstr "Suchen"
+msgstr "Hilfe suchen"
#: lib/searchgroupnav.php:80
msgid "People"
@@ -6232,7 +6270,7 @@ msgstr "Abschnitt ohne Titel"
#: lib/section.php:106
msgid "More..."
-msgstr ""
+msgstr "Mehr..."
#: lib/silenceform.php:67
msgid "Silence"
@@ -6336,47 +6374,61 @@ msgstr "Nachricht"
msgid "Moderate"
msgstr "Moderieren"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Benutzerrolle"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrator"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderator"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "vor wenigen Sekunden"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "vor einer Minute"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "vor %d Minuten"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "vor einer Stunde"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "vor %d Stunden"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "vor einem Tag"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "vor %d Tagen"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "vor einem Monat"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "vor %d Monaten"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "vor einem Jahr"
diff --git a/locale/el/LC_MESSAGES/statusnet.po b/locale/el/LC_MESSAGES/statusnet.po
index ed9ab7803..0ebe84fe7 100644
--- a/locale/el/LC_MESSAGES/statusnet.po
+++ b/locale/el/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:33+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:37+0000\n"
"Language-Team: Greek\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: el\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Πρόσβαση"
@@ -104,7 +105,7 @@ msgstr "Δεν υπάρχει τέτοια σελίδα"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +121,7 @@ msgstr "%s και οι φίλοι του/της"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -175,7 +176,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Εσείς και οι φίλοι σας"
@@ -202,11 +203,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Η μέθοδος του ΑΡΙ δε βρέθηκε!"
@@ -570,7 +571,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Λογαριασμός"
@@ -659,18 +660,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "χρονοδιάγραμμα του χρήστη %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -681,12 +670,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -706,7 +695,7 @@ msgstr ""
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -746,7 +735,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -934,7 +923,7 @@ msgid "Conversation"
msgstr "Συζήτηση"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -956,7 +945,7 @@ msgstr "Ομάδες με τα περισσότερα μέλη"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1152,8 +1141,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1278,7 +1268,7 @@ msgstr "Το βιογραφικό είναι πολύ μεγάλο (μέγιστ
msgid "Could not update group."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
@@ -1404,7 +1394,7 @@ msgid "Cannot normalize that email address"
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεύθυνσης"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1596,6 +1586,24 @@ msgstr "Αδύνατη η αποθήκευση του προφίλ."
msgid "Cannot read file."
msgstr "Αδύνατη η αποθήκευση του προφίλ."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Μήνυμα"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Ομάδες με τα περισσότερα μέλη"
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1740,12 +1748,18 @@ msgstr "Διαχειριστής"
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "χρονοδιάγραμμα του χρήστη %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2314,8 +2328,8 @@ msgstr "Σύνδεση"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2461,7 +2475,8 @@ msgstr "Αδύνατη η αποθήκευση του νέου κωδικού"
msgid "Password saved."
msgstr "Ο κωδικός αποθηκεύτηκε."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2586,7 +2601,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Αποχώρηση"
@@ -2641,11 +2656,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2722,7 +2737,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2751,7 +2766,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Το βιογραφικό είναι πολύ μεγάλο (μέγιστο 140 χαρακτ.)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3054,7 +3069,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3159,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:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3260,6 +3275,15 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Απέτυχε η ενημέρωση του χρήστη."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3273,7 +3297,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3297,7 +3323,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3331,8 +3357,8 @@ msgstr "Προσκλήσεις"
msgid "Description"
msgstr "Περιγραφή"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3466,45 +3492,45 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Αδύνατη η αποθήκευση του προφίλ."
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Μέλη"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Δημιουργημένος"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3514,7 +3540,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3523,7 +3549,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Διαχειριστές"
@@ -3634,147 +3660,134 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Αδυναμία κανονικοποίησης αυτής της email διεύθυνσης"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Η διεύθυνση του εισερχόμενου email αφαιρέθηκε."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Τοπικός"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Διαγραφή μηνύματος"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Διαγραφή μηνύματος"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Ρυθμίσεις OpenID"
#: actions/smssettings.php:58
#, fuzzy
@@ -3874,6 +3887,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Επιβεβαίωση διεύθυνσης email"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Ρυθμίσεις OpenID"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -4071,7 +4144,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4266,16 +4339,22 @@ msgstr "Αδύνατη η αποθήκευση των νέων πληροφορ
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4319,7 +4398,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Προσωπικά"
@@ -4387,38 +4466,38 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr "Σφάλμα στη βάση δεδομένων κατά την εισαγωγή hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4445,7 +4524,12 @@ msgstr "Απέτυχε η συνδρομή."
msgid "Couldn't delete self-subscription."
msgstr "Απέτυχε η διαγραφή συνδρομής."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Απέτυχε η διαγραφή συνδρομής."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Απέτυχε η διαγραφή συνδρομής."
@@ -4454,21 +4538,21 @@ msgstr "Απέτυχε η διαγραφή συνδρομής."
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Δεν ήταν δυνατή η δημιουργία ομάδας."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Αδύνατη η αποθήκευση των νέων πληροφοριών του προφίλ"
@@ -4510,189 +4594,182 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Προσωπικά"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Αλλάξτε τον κωδικό σας"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Λογαριασμός"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Αδυναμία ανακατεύθηνσης στο διακομιστή: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Σύνδεση"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Διαχειριστής"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Προσκάλεσε φίλους και συναδέλφους σου να γίνουν μέλη στο %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Μήνυμα"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Αποσύνδεση"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Δημιουργία ενός λογαριασμού"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Περιγραφή"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Σύνδεση"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Βοηθήστε με!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Βοήθεια"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr ""
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Βοήθεια"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Περί"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Συχνές ερωτήσεις"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Επικοινωνία"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, fuzzy, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4701,13 +4778,13 @@ msgstr ""
"To **%%site.name%%** είναι μία υπηρεσία microblogging (μικρο-ιστολογίου) που "
"έφερε κοντά σας το [%%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, fuzzy, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
"Το **%%site.name%%** είναι μία υπηρεσία microblogging (μικρο-ιστολογίου). "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4715,53 +4792,53 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4776,94 +4853,85 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Προσωπικά"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Πρόσβαση"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Επιβεβαίωση διεύθυνσης email"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Προσωπικά"
+msgid "Edit site notice"
+msgstr "Διαγραφή μηνύματος"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Επιβεβαίωση διεύθυνσης email"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5051,12 +5119,12 @@ msgstr "ομάδες των χρηστών %s"
msgid "Fullname: %s"
msgstr "Ονοματεπώνυμο"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5356,6 +5424,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5492,11 +5565,11 @@ msgstr "Σύνδεση με όνομα χρήστη και κωδικό"
msgid "Sign up for a new account"
msgstr "Εγγραφή για ένα νέο λογαριασμό"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Επιβεβαίωση διεύθυνσης email"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5513,12 +5586,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr ""
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5533,19 +5606,19 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Βιογραφικό: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5558,21 +5631,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Κατάσταση του/της %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5588,12 +5661,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5612,12 +5685,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr ""
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5638,12 +5711,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5887,10 +5960,6 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -5916,7 +5985,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5924,23 +5993,23 @@ msgstr ""
msgid "All subscriptions"
msgstr "Όλες οι συνδρομές"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr ""
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Μέλος από"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5982,7 +6051,12 @@ msgstr "Αδυναμία διαγραφής αυτού του μηνύματος
msgid "Repeat this notice"
msgstr "Αδυναμία διαγραφής αυτού του μηνύματος."
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6140,47 +6214,63 @@ msgstr "Μήνυμα"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
-msgid "a few seconds ago"
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Προφίλ χρήστη"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Διαχειριστές"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
msgstr ""
#: lib/util.php:1015
-msgid "about a minute ago"
+msgid "a few seconds ago"
msgstr ""
#: lib/util.php:1017
+msgid "about a minute ago"
+msgstr ""
+
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/locale/en_GB/LC_MESSAGES/statusnet.po b/locale/en_GB/LC_MESSAGES/statusnet.po
index d0ba439ba..8d846c4e2 100644
--- a/locale/en_GB/LC_MESSAGES/statusnet.po
+++ b/locale/en_GB/LC_MESSAGES/statusnet.po
@@ -2,6 +2,7 @@
#
# Author@translatewiki.net: Bruce89
# Author@translatewiki.net: CiaranG
+# Author@translatewiki.net: Reedy
# --
# This file is distributed under the same license as the StatusNet package.
#
@@ -9,19 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:36+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:40+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: en-gb\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Access"
@@ -102,7 +104,7 @@ msgstr "No such page"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -118,7 +120,7 @@ msgstr "%1$s and friends, page %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +182,7 @@ msgstr ""
"post a notice to his or her attention."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "You and friends"
@@ -207,11 +209,11 @@ msgstr "Updates from %1$s and friends on %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API method not found."
@@ -574,7 +576,7 @@ msgstr ""
"the ability to <strong>%3$s</strong> your %4$s account data. You should only "
"give access to your %4$s account to third parties you trust."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
@@ -661,18 +663,6 @@ msgstr "%1$s / Favourites from %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates favourited by %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s timeline"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Updates from %1$s on %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -683,12 +673,12 @@ msgstr "%1$s / Updates mentioning %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s public timeline"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates from everyone!"
@@ -708,7 +698,7 @@ msgstr "Repeats of %s"
msgid "Notices tagged with %s"
msgstr "Notices tagged with %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Updates tagged with %1$s on %2$s!"
@@ -748,7 +738,7 @@ msgstr "You can upload your personal avatar. The maximum file size is %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "User without matching profile"
@@ -934,7 +924,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notices"
@@ -953,7 +943,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "There was a problem with your session token."
@@ -1149,8 +1139,9 @@ msgstr "Reset back to default"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1266,7 +1257,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Could not create aliases"
@@ -1388,7 +1379,7 @@ msgid "Cannot normalize that email address"
msgstr "Cannot normalise that e-mail address"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Not a valid e-mail address."
@@ -1579,6 +1570,25 @@ msgstr "No such file."
msgid "Cannot read file."
msgstr "Cannot read file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Invalid token."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "You cannot sandbox users on this site."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "User is already silenced."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1725,12 +1735,18 @@ msgstr "Make admin"
msgid "Make this user an admin"
msgstr "Make this user an admin"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s timeline"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Updates from members of %1$s on %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groups"
@@ -2339,8 +2355,8 @@ msgstr "content type "
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Not a supported data format."
@@ -2479,7 +2495,8 @@ msgstr "Can't save new password."
msgid "Password saved."
msgstr "Password saved."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2599,7 +2616,7 @@ msgstr ""
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Never"
@@ -2654,11 +2671,11 @@ msgstr "Not a valid people tag: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Users self-tagged with %1$s - page %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Invalid notice content"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Notice licence ‘1%$s’ is not compatible with site licence ‘%2$s’."
@@ -2736,7 +2753,7 @@ msgid ""
msgstr ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Language"
@@ -2763,7 +2780,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Bio is too long (max %d chars)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Timezone not selected."
@@ -3072,7 +3089,7 @@ msgid "Same as password above. Required."
msgstr "Same as password above. Required."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3177,7 +3194,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:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscribe"
@@ -3277,6 +3294,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Replies to %1$s on %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "You cannot silence users on this site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "User without matching profile."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3289,7 +3316,9 @@ msgstr "You cannot sandbox users on this site."
msgid "User is already sandboxed."
msgstr "User is already sandboxed."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3313,7 +3342,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Save site settings"
@@ -3344,8 +3373,8 @@ msgstr "Organization"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistics"
@@ -3484,45 +3513,45 @@ msgstr ""
msgid "Group actions"
msgstr "Group actions"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Notice feed for %s group (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Notice feed for %s group (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Notice feed for %s group (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Outbox for %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Members"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(None)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "All members"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Created"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3537,7 +3566,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:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3550,7 +3579,7 @@ msgstr ""
"[StatusNet](http://status.net/) tool. Its members share short messages about "
"their life and interests. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Admins"
@@ -3665,145 +3694,136 @@ msgid "User is already silenced."
msgstr "User is already silenced."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Design settings for this StausNet site."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "You must have a valid contact email address."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Minimum text limit is 140 characters."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Site name"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Contact e-mail address for your site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Default site language"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "New message"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Unable to save your design settings!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Site notice"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Site notice"
#: actions/smssettings.php:58
msgid "SMS settings"
@@ -3904,6 +3924,66 @@ msgstr ""
msgid "No code entered"
msgstr "No code entered"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Change site configuration"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Save site settings"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "You are not subscribed to that profile."
@@ -4100,7 +4180,7 @@ msgstr "No profile id in request."
msgid "Unsubscribed"
msgstr "Unsubscribed"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4287,6 +4367,8 @@ msgid ""
"Customize the way your profile looks with a background image and a colour "
"palette of your choice."
msgstr ""
+"Customise the way your profile looks with a background image and a colour "
+"palette of your choice."
#: actions/userdesignsettings.php:282
msgid "Enjoy your hotdog!"
@@ -4301,16 +4383,22 @@ msgstr "%1$s groups, page %2$d"
msgid "Search for more groups"
msgstr "Search for more groups"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s is not a member of any group."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Updates from %1$s on %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4364,7 +4452,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4427,21 +4515,21 @@ msgstr "Could not update message with new URI."
msgid "DB error inserting hashtag: %s"
msgstr "DB error inserting hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem saving notice. Too long."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem saving notice. Unknown user."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Too many notices too fast; take a breather and post again in a few minutes."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4449,19 +4537,19 @@ msgstr ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "You are banned from posting notices on this site."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem saving notice."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem saving group inbox."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4487,7 +4575,12 @@ msgstr "Not subscribed!"
msgid "Couldn't delete self-subscription."
msgstr "Couldn't delete self-subscription."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Couldn't delete subscription."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Couldn't delete subscription."
@@ -4496,19 +4589,19 @@ msgstr "Couldn't delete subscription."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welcome to %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Could not create group."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Could not set group URI."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Could not set group membership."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Could not save local group info."
@@ -4549,194 +4642,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Untitled page"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primary site navigation"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personal profile and friends timeline"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Change your e-mail, avatar, password, profile"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Account"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connect to services"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Connect"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Change site configuration"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Admin"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invite friends and colleagues to join you on %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invite"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logout from the site"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Logout"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Create an account"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Register"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Login to the site"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Login"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Help"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Search for people or text"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Search"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Site notice"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Local views"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Page notice"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secondary site navigation"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Help"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "F.A.Q."
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet software licence"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4745,12 +4831,12 @@ msgstr ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is a microblogging service."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4761,53 +4847,53 @@ msgstr ""
"s, available under the [GNU Affero General Public Licence](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Site content license"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "After"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Before"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4822,90 +4908,80 @@ msgid "Changes to that panel are not allowed."
msgstr "Changes to that panel are not allowed."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() not implemented."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() not implemented."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Unable to delete design setting."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Basic site configuration"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Site"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Design configuration"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Design"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "User configuration"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "User"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Access configuration"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Access"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Paths configuration"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Sessions configuration"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Version"
+msgid "Edit site notice"
+msgstr "Site notice"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Paths configuration"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5089,12 +5165,12 @@ msgstr "%s left group %s"
msgid "Fullname: %s"
msgstr "Fullname: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Location: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Homepage: %s"
@@ -5387,6 +5463,11 @@ msgstr "Choose a tag to narrow list"
msgid "Go"
msgstr "Go"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL of the homepage or blog of the group or topic"
@@ -5523,11 +5604,11 @@ msgstr "Login with a username and password"
msgid "Sign up for a new account"
msgstr "Sign up for a new account"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "E-mail address confirmation"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5544,12 +5625,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s is now listening to your notices on %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5574,17 +5655,17 @@ msgstr ""
"----\n"
"Change your email address or notification options at %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Bio: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "New e-mail address for posting to %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5605,21 +5686,21 @@ msgstr ""
"Faithfully yours,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS confirmation"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "You've been nudged by %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5635,12 +5716,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "New private message from %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5659,12 +5740,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) added your notice as a favorite"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5685,12 +5766,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5929,10 +6010,6 @@ msgstr "Replies"
msgid "Favorites"
msgstr "Favourites"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "User"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Inbox"
@@ -5958,7 +6035,7 @@ msgstr "Tags in %s's notices"
msgid "Unknown"
msgstr "Unknown"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscriptions"
@@ -5966,23 +6043,23 @@ msgstr "Subscriptions"
msgid "All subscriptions"
msgstr "All subscriptions"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscribers"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "All subscribers"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "User ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Member since"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "All groups"
@@ -6022,7 +6099,12 @@ msgstr "Repeat this notice?"
msgid "Repeat this notice"
msgstr "Repeat this notice"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Block this user from this group"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6176,47 +6258,63 @@ msgstr "Message"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "User profile"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Admins"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "a few seconds ago"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "about a minute ago"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "about %d minutes ago"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "about an hour ago"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "about %d hours ago"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "about a day ago"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "about %d days ago"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "about a month ago"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "about %d months ago"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "about a year ago"
diff --git a/locale/es/LC_MESSAGES/statusnet.po b/locale/es/LC_MESSAGES/statusnet.po
index fe861905d..cdc0184e4 100644
--- a/locale/es/LC_MESSAGES/statusnet.po
+++ b/locale/es/LC_MESSAGES/statusnet.po
@@ -13,19 +13,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:39+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:43+0000\n"
"Language-Team: Spanish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: es\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acceder"
@@ -106,7 +107,7 @@ msgstr "No existe tal página"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -122,7 +123,7 @@ msgstr "%1$s y amigos, página %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -185,7 +186,7 @@ msgstr ""
"su atención ](%%%%action.newnotice%%%%?status_textarea=%3$s)."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tú y amigos"
@@ -212,11 +213,11 @@ msgstr "¡Actualizaciones de %1$s y amigos en %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método de API no encontrado."
@@ -582,7 +583,7 @@ msgstr ""
"permiso para <strong>%3$s</strong> la información de tu cuenta %4$s. Sólo "
"debes dar acceso a tu cuenta %4$s a terceras partes en las que confíes."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Cuenta"
@@ -671,18 +672,6 @@ msgstr "%1$s / Favoritos de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizaciones favoritas de %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "línea temporal de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "¡Actualizaciones de %1$s en %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -693,12 +682,12 @@ msgstr "%1$s / Actualizaciones que mencionan %2$s"
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"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "línea temporal pública de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "¡Actualizaciones de todos en %s!"
@@ -718,7 +707,7 @@ msgstr "Repeticiones de %s"
msgid "Notices tagged with %s"
msgstr "Avisos marcados con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualizaciones etiquetadas con %1$s en %2$s!"
@@ -758,7 +747,7 @@ msgstr "Puedes subir tu imagen personal. El tamaño máximo de archivo es %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Usuario sin perfil equivalente"
@@ -945,7 +934,7 @@ msgid "Conversation"
msgstr "Conversación"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avisos"
@@ -964,7 +953,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Hubo problemas con tu clave de sesión."
@@ -1160,8 +1149,9 @@ msgstr "Volver a los valores predeterminados"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1277,7 +1267,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "No fue posible crear alias."
@@ -1402,7 +1392,7 @@ msgid "Cannot normalize that email address"
msgstr "No se puede normalizar esta dirección de correo electrónico."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correo electrónico no válido"
@@ -1595,6 +1585,25 @@ msgstr "No existe tal archivo."
msgid "Cannot read file."
msgstr "No se puede leer archivo."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Token inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "No puedes enviar mensaje a este usuario."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "El usuario te ha bloqueado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1744,12 +1753,18 @@ msgstr "Convertir en administrador"
msgid "Make this user an admin"
msgstr "Convertir a este usuario en administrador"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "línea temporal de %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "¡Actualizaciones de miembros de %1$s en %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -2374,8 +2389,8 @@ msgstr "tipo de contenido "
msgid "Only "
msgstr "Sólo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "No es un formato de dato soportado"
@@ -2515,7 +2530,8 @@ msgstr "No se puede guardar la nueva contraseña."
msgid "Password saved."
msgstr "Se guardó Contraseña."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Rutas"
@@ -2637,7 +2653,7 @@ msgstr "Directorio del fondo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2693,11 +2709,11 @@ msgstr "No es una etiqueta válida para personas: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuarios auto marcados con %s - página %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "El contenido del aviso es inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2776,7 +2792,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "Tags para ti (letras, números, -, ., y _), coma - o espacio - separado"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2804,7 +2820,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografía es muy larga (máx. %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Zona horaria no seleccionada"
@@ -3121,7 +3137,7 @@ msgid "Same as password above. Required."
msgstr "Igual a la contraseña de arriba. Requerida"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo electrónico"
@@ -3228,7 +3244,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "El URL de tu perfil en otro servicio de microblogueo compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Suscribirse"
@@ -3326,6 +3342,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respuestas a %1$s en %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "No puedes enviar mensaje a este usuario."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuario sin perfil coincidente."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3340,7 +3366,9 @@ msgstr "No puedes enviar mensaje a este usuario."
msgid "User is already sandboxed."
msgstr "El usuario te ha bloqueado."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sesiones"
@@ -3364,7 +3392,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Guardar la configuración del sitio"
@@ -3396,8 +3424,8 @@ msgstr "Organización"
msgid "Description"
msgstr "Descripción"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estadísticas"
@@ -3530,46 +3558,46 @@ msgstr "Alias"
msgid "Group actions"
msgstr "Acciones del grupo"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed de avisos de grupo %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Bandeja de salida para %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Miembros"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ninguno)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos los miembros"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Creado"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3579,7 +3607,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3590,7 +3618,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:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradores"
@@ -3705,149 +3733,140 @@ msgid "User is already silenced."
msgstr "El usuario te ha bloqueado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configuración básica de este sitio StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "No es una dirección de correo electrónico válida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Idioma desconocido \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "La frecuencia de captura debe ser un número."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nombre del sitio"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nueva dirección de correo para postear a %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Vistas locales"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Zona horaria predeterminada"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Zona horaria predeterminada del sitio; generalmente UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma predeterminado del sitio"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Capturas"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "En un trabajo programado"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Capturas de datos"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frecuencia"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Las capturas se enviarán a este URL"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Límites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Límite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Cantidad máxima de caracteres para los mensajes."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr "Cuántos segundos es necesario esperar para publicar lo mismo de nuevo."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso de sitio"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nuevo Mensaje "
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "No se pudo grabar tu configuración de diseño."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso de sitio"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso de sitio"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configuración de SMS"
@@ -3950,6 +3969,66 @@ msgstr ""
msgid "No code entered"
msgstr "No ingresó código"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Capturas"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Cambiar la configuración del sitio"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La frecuencia de captura debe ser un número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "En un trabajo programado"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Capturas de datos"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frecuencia"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Las capturas se enviarán a este URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Guardar la configuración del sitio"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "No te has suscrito a ese perfil."
@@ -4152,7 +4231,7 @@ msgstr "No hay id de perfil solicitado."
msgid "Unsubscribed"
msgstr "Desuscrito"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4354,16 +4433,22 @@ msgstr "Miembros del grupo %s, página %d"
msgid "Search for more groups"
msgstr "Buscar más grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "No eres miembro de ese grupo"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "¡Actualizaciones de %1$s en %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4409,7 +4494,7 @@ msgstr ""
msgid "Plugins"
msgstr "Complementos"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Sesiones"
@@ -4476,22 +4561,22 @@ msgstr "No se pudo actualizar mensaje con nuevo URI."
msgid "DB error inserting hashtag: %s"
msgstr "Error de la BD al insertar la etiqueta clave: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Ha habido un problema al guardar el mensaje. Es muy largo."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Ha habido un problema al guardar el mensaje. Usuario desconocido."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4500,20 +4585,20 @@ msgstr ""
"Demasiados avisos demasiado rápido; para y publicar nuevamente en unos "
"minutos."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Tienes prohibido publicar avisos en este sitio."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Hubo un problema al guardar el aviso."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4540,7 +4625,12 @@ msgstr "¡No estás suscrito!"
msgid "Couldn't delete self-subscription."
msgstr "No se pudo eliminar la suscripción."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "No se pudo eliminar la suscripción."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "No se pudo eliminar la suscripción."
@@ -4549,21 +4639,21 @@ msgstr "No se pudo eliminar la suscripción."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenido a %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "No se pudo crear grupo."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "No se pudo configurar miembros de grupo."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "No se pudo configurar miembros de grupo."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "No se ha podido guardar la suscripción."
@@ -4605,194 +4695,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Página sin título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegación de sitio primario"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil personal y línea de tiempo de amigos"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambia tu correo electrónico, avatar, contraseña, perfil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Cuenta"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Conectar a los servicios"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Conectarse"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Cambiar la configuración del sitio"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Admin"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invita a amigos y colegas a unirse a %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invitar"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Salir de sitio"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Salir"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear una cuenta"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrarse"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ingresar a sitio"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Inicio de sesión"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ayúdame!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ayuda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Buscar personas o texto"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Buscar"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso de sitio"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locales"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso de página"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegación de sitio secundario"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Ayuda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Acerca de"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas Frecuentes"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidad"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Fuente"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Ponerse en contacto"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Insignia"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencia de software de StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4801,12 +4884,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblogueo de [%%site.broughtby%%**](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblogueo."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4817,55 +4900,55 @@ msgstr ""
"disponible bajo la [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licencia de contenido del sitio"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Derechos de autor de contenido y datos por los colaboradores. Todos los "
"derechos reservados."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Todo"
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "Licencia."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginación"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Después"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Antes"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4881,95 +4964,84 @@ msgid "Changes to that panel are not allowed."
msgstr "Registro de usuario no permitido."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Todavía no se implementa comando."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Todavía no se implementa comando."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "¡No se pudo guardar tu configuración de Twitter!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuración básica del sitio"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Sitio"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuración del diseño"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Diseño"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuración de usuario"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Usuario"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuración de acceso"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Acceder"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS confirmación"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Rutas"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuración de sesiones"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sesiones"
+msgid "Edit site notice"
+msgstr "Aviso de sitio"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS confirmación"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5158,12 +5230,12 @@ msgstr "%s dejó grupo %s"
msgid "Fullname: %s"
msgstr "Nombre completo: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Lugar: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Página de inicio: %s"
@@ -5462,6 +5534,11 @@ msgstr "Elegir tag para reducir lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5600,11 +5677,11 @@ msgstr "Ingresar con un nombre de usuario y contraseña."
msgid "Sign up for a new account"
msgstr "Registrarse para una nueva cuenta"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmación de correo electrónico"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5621,12 +5698,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s ahora está escuchando tus avisos en %2$s"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5647,19 +5724,19 @@ msgstr ""
"Atentamente,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Bio: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nueva dirección de correo para postear a %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5680,21 +5757,21 @@ msgstr ""
"Attentamente, \n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "estado de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS confirmación"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s te mandó un zumbido "
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5710,12 +5787,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nuevo mensaje privado de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5734,12 +5811,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) agregó tu aviso como un favorito"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5760,12 +5837,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6012,10 +6089,6 @@ msgstr "Respuestas"
msgid "Favorites"
msgstr "Favoritos"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usuario"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Bandeja de Entrada"
@@ -6042,7 +6115,7 @@ msgstr "Tags en avisos de %s"
msgid "Unknown"
msgstr "Acción desconocida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Suscripciones"
@@ -6050,24 +6123,24 @@ msgstr "Suscripciones"
msgid "All subscriptions"
msgstr "Todas las suscripciones"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Suscriptores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Todos los suscriptores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de usuario"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Miembro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos los grupos"
@@ -6110,7 +6183,12 @@ msgstr "Responder este aviso."
msgid "Repeat this notice"
msgstr "Responder este aviso."
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear este usuario de este grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6271,47 +6349,64 @@ msgstr "Mensaje"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil de usuario"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "hace unos segundos"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "hace un minuto"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "hace %d minutos"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "hace una hora"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "hace %d horas"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "hace un día"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "hace %d días"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "hace un mes"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "hace %d meses"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "hace un año"
diff --git a/locale/fa/LC_MESSAGES/statusnet.po b/locale/fa/LC_MESSAGES/statusnet.po
index bb453f582..955efd243 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:45+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:48+0000\n"
"Last-Translator: Ahmad Sufi Mahmudi\n"
"Language-Team: Persian\n"
"MIME-Version: 1.0\n"
@@ -20,11 +20,12 @@ msgstr ""
"X-Language-Code: fa\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "دسترسی"
@@ -108,7 +109,7 @@ msgstr "چنین صفحه‌ای وجود ندارد"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -124,7 +125,7 @@ msgstr "%s کاربران مسدود شده، صفحه‌ی %d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -185,7 +186,7 @@ msgstr ""
"را جلب کنید."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "شما و دوستان"
@@ -212,11 +213,11 @@ msgstr "به روز رسانی از %1$ و دوستان در %2$"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "رابط مورد نظر پیدا نشد."
@@ -574,7 +575,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "حساب کاربری"
@@ -663,18 +664,6 @@ msgstr "%s / دوست داشتنی از %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s به روز رسانی های دوست داشتنی %s / %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "خط زمانی %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "به روز رسانی‌های %1$s در %2$s"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -685,12 +674,12 @@ msgstr "%$1s / به روز رسانی های شامل %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s به روز رسانی هایی که در پاسخ به $2$s / %3$s"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s خط‌زمانی عمومی"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s به روز رسانی های عموم"
@@ -710,7 +699,7 @@ msgstr "تکرار %s"
msgid "Notices tagged with %s"
msgstr "پیام‌هایی که با %s نشانه گزاری شده اند."
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "پیام‌های نشانه گزاری شده با %1$s در %2$s"
@@ -751,7 +740,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "کاربر بدون مشخصات"
@@ -939,7 +928,7 @@ msgid "Conversation"
msgstr "مکالمه"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "پیام‌ها"
@@ -961,7 +950,7 @@ msgstr "شما یک عضو این گروه نیستید."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1160,8 +1149,9 @@ msgstr "برگشت به حالت پیش گزیده"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1287,7 +1277,7 @@ msgstr "توصیف بسیار زیاد است (حداکثر %d حرف)."
msgid "Could not update group."
msgstr "نمی‌توان گروه را به‌هنگام‌سازی کرد."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "نمی‌توان نام‌های مستعار را ساخت."
@@ -1410,7 +1400,7 @@ msgid "Cannot normalize that email address"
msgstr "نمی‌توان نشانی را قانونی کرد"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "یک آدرس ایمیل معتبر نیست."
@@ -1600,6 +1590,25 @@ msgstr "چنین پرونده‌ای وجود ندارد."
msgid "Cannot read file."
msgstr "نمی‌توان پرونده را خواند."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "اندازه‌ی نادرست"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "شما نمی توانید کاربری را در این سایت ساکت کنید."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "کاربر قبلا ساکت شده است."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1741,12 +1750,18 @@ msgstr "مدیر شود"
msgid "Make this user an admin"
msgstr "این کاربر یک مدیر شود"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "خط زمانی %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "به روز رسانی کابران %1$s در %2$s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "گروه‌ها"
@@ -2340,8 +2355,8 @@ msgstr "نوع محتوا "
msgid "Only "
msgstr " فقط"
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "یک قالب دادهٔ پشتیبانی‌شده نیست."
@@ -2487,7 +2502,8 @@ msgstr "نمی‌توان گذرواژه جدید را ذخیره کرد."
msgid "Password saved."
msgstr "گذرواژه ذخیره شد."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "مسیر ها"
@@ -2607,7 +2623,7 @@ msgstr "شاخهٔ تصاویر پیش‌زمینه"
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "هیچ وقت"
@@ -2663,11 +2679,11 @@ msgstr "یک برچسب کاربری معتبر نیست: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "کاربران خود برچسب‌گذاری شده با %s - صفحهٔ %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "محتوای آگهی نامعتبر"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2745,7 +2761,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "زبان"
@@ -2771,7 +2787,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "منطقه‌ی زمانی انتخاب نشده است."
@@ -3073,7 +3089,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "پست الکترونیکی"
@@ -3161,7 +3177,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3259,6 +3275,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "شما نمی توانید کاربری را در این سایت ساکت کنید."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "کاربر بدون مشخصات"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3272,7 +3298,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3297,7 +3325,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr ""
@@ -3332,8 +3360,8 @@ msgstr "صفحه بندى"
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "آمار"
@@ -3467,45 +3495,45 @@ msgstr "نام های مستعار"
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "اعضا"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "هیچ"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "همه ی اعضا"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "ساخته شد"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3515,7 +3543,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3524,7 +3552,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3638,149 +3666,140 @@ msgid "User is already silenced."
msgstr "کاربر قبلا ساکت شده است."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "تنظیمات پایه ای برای این سایت StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "نام سایت باید طولی غیر صفر داشته باشد."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "شما باید یک آدرس ایمیل قابل قبول برای ارتباط داشته باشید"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "نام وب‌گاه"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "نام وب‌گاه شما، مانند «میکروبلاگ شرکت شما»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "أورده شده به وسیله ی"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "محلی"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "منطقه ی زمانی پیش فرض"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "منظقه ی زمانی پیش فرض برای سایت؛ معمولا UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "زبان پیش فرض سایت"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr ""
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "محدودیت ها"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "محدودیت متن"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "بیشینهٔ تعداد حروف برای آگهی‌ها"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"چه مدت کاربران باید منتظر بمانند ( به ثانیه ) تا همان چیز را مجددا ارسال "
"کنند."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "خبر سایت"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "پیام جدید"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "نمی‌توان تنظیمات طرح‌تان را ذخیره کرد."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "خبر سایت"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "خبر سایت"
+
#: actions/smssettings.php:58
#, fuzzy
msgid "SMS settings"
@@ -3877,6 +3896,66 @@ msgstr ""
msgid "No code entered"
msgstr "کدی وارد نشد"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "تغییر پیکربندی سایت"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "تنظیمات چهره"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "شما به این پروفيل متعهد نشدید"
@@ -4072,7 +4151,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4263,16 +4342,22 @@ msgstr "اعضای گروه %s، صفحهٔ %d"
msgid "Search for more groups"
msgstr "جستجو برای گروه های بیشتر"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "به روز رسانی‌های %1$s در %2$s"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4316,7 +4401,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "شخصی"
@@ -4383,22 +4468,22 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "مشکل در ذخیره کردن پیام. بسیار طولانی."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "مشکل در ذخیره کردن پیام. کاربر نا شناخته."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"تعداد خیلی زیاد آگهی و بسیار سریع؛ استراحت کنید و مجددا دقایقی دیگر ارسال "
"کنید."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4406,20 +4491,20 @@ msgstr ""
"تعداد زیاد پیام های دو نسخه ای و بسرعت؛ استراحت کنید و دقایقی دیگر مجددا "
"ارسال کنید."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "شما از فرستادن پست در این سایت مردود شدید ."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "مشکل در ذخیره کردن آگهی."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4444,7 +4529,12 @@ msgstr "تایید نشده!"
msgid "Couldn't delete self-subscription."
msgstr ""
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "نمی‌توان تصدیق پست الکترونیک را پاک کرد."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr ""
@@ -4453,20 +4543,20 @@ msgstr ""
msgid "Welcome to %1$s, @%2$s!"
msgstr "خوش امدید به %1$s , @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "نمیتوان گروه را تشکیل داد"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "نمیتوان گروه را تشکیل داد"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "نمی‌توان شناس‌نامه را ذخیره کرد."
@@ -4508,205 +4598,198 @@ msgstr "%s گروه %s را ترک کرد."
msgid "Untitled page"
msgstr "صفحه ی بدون عنوان"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "شخصی"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "آدرس ایمیل، آواتار، کلمه ی عبور، پروفایل خود را تغییر دهید"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "حساب کاربری"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "متصل شدن به خدمات"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "وصل‌شدن"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "تغییر پیکربندی سایت"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "مدیر"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr " به شما ملحق شوند %s دوستان و همکاران را دعوت کنید تا در"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "دعوت‌کردن"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "خارج شدن از سایت ."
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "خروج"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "یک حساب کاربری بسازید"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "ثبت نام"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "ورود به وب‌گاه"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "ورود"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "به من کمک کنید!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "کمک"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "جستجو برای شخص با متن"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "جست‌وجو"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "خبر سایت"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "دید محلی"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "خبر صفحه"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "کمک"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "دربارهٔ"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "سوال‌های رایج"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "خصوصی"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "منبع"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "تماس"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet مجوز نرم افزار"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4714,53 +4797,53 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "مجوز محتویات سایت"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "همه "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "مجوز."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "صفحه بندى"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "بعد از"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "قبل از"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4776,94 +4859,83 @@ msgid "Changes to that panel are not allowed."
msgstr "اجازه‌ی ثبت نام داده نشده است."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "نمی توان تنظیمات طراحی شده را پاک کرد ."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "پیکره بندی اصلی سایت"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "سایت"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "طرح"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "پیکره بندی اصلی سایت"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "کاربر"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "پیکره بندی اصلی سایت"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "دسترسی"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "مسیر ها"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "پیکره بندی اصلی سایت"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "شخصی"
+msgid "Edit site notice"
+msgstr "خبر سایت"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "پیکره بندی اصلی سایت"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5054,12 +5126,12 @@ msgstr "%s گروه %s را ترک کرد."
msgid "Fullname: %s"
msgstr "نام کامل : %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "موقعیت : %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "صفحه خانگی : %s"
@@ -5354,6 +5426,11 @@ msgstr ""
msgid "Go"
msgstr "برو"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5490,11 +5567,11 @@ msgstr "وارد شدن با یک نام کاربری و کلمه ی عبور"
msgid "Sign up for a new account"
msgstr "عضویت برای حساب کاربری جدید"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "تاییدیه ی آدرس ایمیل"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5511,12 +5588,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%2$s از حالا به خبر های شما گوش میده %1$s"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5531,17 +5608,17 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "موقعیت : %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "%s ادرس ایمیل جدید برای"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5560,21 +5637,21 @@ msgstr ""
", ازروی وفاداری خود شما \n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "وضعیت %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "تایید پیامک"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5590,12 +5667,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5614,12 +5691,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr " خبر شما را به علایق خود اضافه کرد %s (@%s)"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5640,12 +5717,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "به توجه شما یک خبر فرستاده شده %s (@%s)"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5889,10 +5966,6 @@ msgstr "پاسخ ها"
msgid "Favorites"
msgstr "چیزهای مورد علاقه"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "کاربر"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "صندوق دریافتی"
@@ -5918,7 +5991,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "اشتراک‌ها"
@@ -5926,23 +5999,23 @@ msgstr "اشتراک‌ها"
msgid "All subscriptions"
msgstr "تمام اشتراک‌ها"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "مشترک‌ها"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "تمام مشترک‌ها"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "شناسه کاربر"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "عضو شده از"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "تمام گروه‌ها"
@@ -5983,7 +6056,12 @@ msgstr "به این آگهی جواب دهید"
msgid "Repeat this notice"
msgstr ""
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "دسترسی کاربر را به گروه مسدود کن"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6137,47 +6215,62 @@ msgstr "پیام"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "پروفایل کاربر"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "چند ثانیه پیش"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "حدود یک دقیقه پیش"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "حدود %d دقیقه پیش"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "حدود یک ساعت پیش"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "حدود %d ساعت پیش"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "حدود یک روز پیش"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "حدود %d روز پیش"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "حدود یک ماه پیش"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "حدود %d ماه پیش"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "حدود یک سال پیش"
diff --git a/locale/fi/LC_MESSAGES/statusnet.po b/locale/fi/LC_MESSAGES/statusnet.po
index 97ab7038b..68a63537b 100644
--- a/locale/fi/LC_MESSAGES/statusnet.po
+++ b/locale/fi/LC_MESSAGES/statusnet.po
@@ -10,19 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:42+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:46+0000\n"
"Language-Team: Finnish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fi\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Hyväksy"
@@ -109,7 +110,7 @@ msgstr "Sivua ei ole."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -125,7 +126,7 @@ msgstr "%s ja kaverit, sivu %d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -186,7 +187,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Sinä ja kaverit"
@@ -213,11 +214,11 @@ msgstr "Käyttäjän %1$s ja kavereiden päivitykset palvelussa %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metodia ei löytynyt!"
@@ -589,7 +590,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Käyttäjätili"
@@ -680,18 +681,6 @@ msgstr "%s / Käyttäjän %s suosikit"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr " Palvelun %s päivitykset, jotka %s / %s on merkinnyt suosikikseen."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s aikajana"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -703,12 +692,12 @@ msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
"%1$s -päivitykset, jotka on vastauksia käyttäjän %2$s / %3$s päivityksiin."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s julkinen aikajana"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s päivitykset kaikilta!"
@@ -728,7 +717,7 @@ msgstr "Vastaukset käyttäjälle %s"
msgid "Notices tagged with %s"
msgstr "Päivitykset joilla on tagi %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 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!"
@@ -768,7 +757,7 @@ msgstr "Voit ladata oman profiilikuvasi. Maksimikoko on %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Käyttäjälle ei löydy profiilia"
@@ -954,7 +943,7 @@ msgid "Conversation"
msgstr "Keskustelu"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Päivitykset"
@@ -977,7 +966,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Istuntoavaimesi kanssa oli ongelma."
@@ -1178,8 +1167,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1308,7 +1298,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Ei voitu lisätä aliasta."
@@ -1435,7 +1425,7 @@ msgid "Cannot normalize that email address"
msgstr "Ei voida normalisoida sähköpostiosoitetta"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Tuo ei ole kelvollinen sähköpostiosoite."
@@ -1629,6 +1619,25 @@ msgstr "Tiedostoa ei ole."
msgid "Cannot read file."
msgstr "Tiedostoa ei voi lukea."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Koko ei kelpaa."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Et voi lähettää viestiä tälle käyttäjälle."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Käyttäjä on asettanut eston sinulle."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1773,12 +1782,18 @@ msgstr "Tee ylläpitäjäksi"
msgid "Make this user an admin"
msgstr "Tee tästä käyttäjästä ylläpitäjä"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s aikajana"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Ryhmän %1$s käyttäjien päivitykset palvelussa %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Ryhmät"
@@ -2403,8 +2418,8 @@ msgstr "Yhdistä"
msgid "Only "
msgstr "Vain "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Tuo ei ole tuettu tietomuoto."
@@ -2550,7 +2565,8 @@ msgstr "Uutta salasanaa ei voida tallentaa."
msgid "Password saved."
msgstr "Salasana tallennettu."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Polut"
@@ -2678,7 +2694,7 @@ msgstr "Taustakuvan hakemisto"
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Palauta"
@@ -2739,11 +2755,11 @@ msgstr "Ei sallittu henkilötagi: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Käyttäjät joilla henkilötagi %s - sivu %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Päivityksen sisältö ei kelpaa"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2825,7 +2841,7 @@ msgstr ""
"Kuvaa itseäsi henkilötageilla (sanoja joissa voi olla muita kirjaimia kuin "
"ääkköset, numeroita, -, ., ja _), pilkulla tai välilyönnillä erotettuna"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Kieli"
@@ -2853,7 +2869,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "\"Tietoja\" on liian pitkä (max 140 merkkiä)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aikavyöhykettä ei ole valittu."
@@ -3162,7 +3178,7 @@ msgid "Same as password above. Required."
msgstr "Sama kuin ylläoleva salasana. Pakollinen."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Sähköposti"
@@ -3272,7 +3288,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Profiilisi URL-osoite toisessa yhteensopivassa mikroblogauspalvelussa"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Tilaa"
@@ -3382,6 +3398,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Et voi lähettää viestiä tälle käyttäjälle."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Käyttäjälle ei löydy profiilia"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3397,7 +3423,9 @@ msgstr "Et voi lähettää viestiä tälle käyttäjälle."
msgid "User is already sandboxed."
msgstr "Käyttäjä on asettanut eston sinulle."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3422,7 +3450,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3458,8 +3486,8 @@ msgstr "Sivutus"
msgid "Description"
msgstr "Kuvaus"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tilastot"
@@ -3592,45 +3620,45 @@ msgstr "Aliakset"
msgid "Group actions"
msgstr "Ryhmän toiminnot"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syöte ryhmän %s päivityksille (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syöte ryhmän %s päivityksille (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Käyttäjän %s lähetetyt viestit"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Jäsenet"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Tyhjä)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Kaikki jäsenet"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Luotu"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3640,7 +3668,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3651,7 +3679,7 @@ msgstr ""
"**%s** on ryhmä palvelussa %%%%site.name%%%%, joka on [mikroblogauspalvelu]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Ylläpitäjät"
@@ -3769,150 +3797,140 @@ msgid "User is already silenced."
msgstr "Käyttäjä on asettanut eston sinulle."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Ulkoasuasetukset tälle StatusNet palvelulle."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Tuo ei ole kelvollinen sähköpostiosoite"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Uusi sähköpostiosoite päivityksien lähettämiseen palveluun %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Paikalliset näkymät"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ensisijainen kieli"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Uusi viesti"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Twitter-asetuksia ei voitu tallentaa!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Palvelun ilmoitus"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Palvelun ilmoitus"
#: actions/smssettings.php:58
#, fuzzy
@@ -4016,6 +4034,66 @@ msgstr ""
msgid "No code entered"
msgstr "Koodia ei ole syötetty."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Ensisijainen sivunavigointi"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Profiilikuva-asetukset"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Et ole tilannut tämän käyttäjän päivityksiä."
@@ -4221,7 +4299,7 @@ msgstr "Ei profiili id:tä kyselyssä."
msgid "Unsubscribed"
msgstr "Tilaus lopetettu"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4432,16 +4510,22 @@ msgstr "Ryhmän %s jäsenet, sivu %d"
msgid "Search for more groups"
msgstr "Hae lisää ryhmiä"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Sinä et kuulu tähän ryhmään."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Käyttäjän %1$s päivitykset palvelussa %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4485,7 +4569,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Omat"
@@ -4554,23 +4638,23 @@ msgstr "Viestin päivittäminen uudella URI-osoitteella ei onnistunut."
msgid "DB error inserting hashtag: %s"
msgstr "Tietokantavirhe tallennettaessa risutagiä: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Virhe tapahtui päivityksen tallennuksessa. Tuntematon käyttäjä."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Liian monta päivitystä liian nopeasti; pidä pieni hengähdystauko ja jatka "
"päivityksien lähettämista muutaman minuutin päästä."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4578,20 +4662,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:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Päivityksesi tähän palveluun on estetty."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Ongelma päivityksen tallentamisessa."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4619,7 +4703,12 @@ msgstr "Ei ole tilattu!."
msgid "Couldn't delete self-subscription."
msgstr "Ei voitu poistaa tilausta."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Ei voitu poistaa tilausta."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Ei voitu poistaa tilausta."
@@ -4628,20 +4717,20 @@ msgstr "Ei voitu poistaa tilausta."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Viesti käyttäjälle %1$s, %2$s"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Ryhmän luonti ei onnistunut."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Ryhmän jäsenyystietoja ei voitu asettaa."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Tilausta ei onnistuttu tallentamaan."
@@ -4684,195 +4773,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Nimetön sivu"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Ensisijainen sivunavigointi"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Henkilökohtainen profiili ja kavereiden aikajana"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Omat"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Muuta sähköpostiosoitettasi, kuvaasi, salasanaasi, profiiliasi"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Käyttäjätili"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ei voitu uudelleenohjata palvelimelle: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Yhdistä"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Ensisijainen sivunavigointi"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Ylläpito"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Kutsu kavereita ja työkavereita liittymään palveluun %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Kutsu"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Kirjaudu ulos palvelusta"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Kirjaudu ulos"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Luo uusi käyttäjätili"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Rekisteröidy"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Kirjaudu sisään palveluun"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Kirjaudu sisään"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Auta minua!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ohjeet"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Hae ihmisiä tai tekstiä"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Haku"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Palvelun ilmoitus"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Paikalliset näkymät"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sivuilmoitus"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Toissijainen sivunavigointi"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Ohjeet"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Tietoa"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "UKK"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Yksityisyys"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Lähdekoodi"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Ota yhteyttä"
-#: lib/action.php:782
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tönäise"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4881,12 +4963,12 @@ msgstr ""
"**%%site.name%%** on mikroblogipalvelu, jonka tarjoaa [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** on mikroblogipalvelu. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4897,54 +4979,54 @@ msgstr ""
"versio %s, saatavilla lisenssillä [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet-ohjelmiston lisenssi"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Kaikki "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "lisenssi."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Sivutus"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Myöhemmin"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Aiemmin"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4961,100 +5043,89 @@ msgid "Changes to that panel are not allowed."
msgstr "Rekisteröityminen ei ole sallittu."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Komentoa ei ole vielä toteutettu."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Komentoa ei ole vielä toteutettu."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Twitter-asetuksia ei voitu tallentaa!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Sähköpostiosoitteen vahvistus"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Kutsu"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS vahvistus"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Ulkoasu"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS vahvistus"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Käyttäjä"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS vahvistus"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Hyväksy"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS vahvistus"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Polut"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS vahvistus"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Omat"
+msgid "Edit site notice"
+msgstr "Palvelun ilmoitus"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS vahvistus"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5247,12 +5318,12 @@ msgstr "%s erosi ryhmästä %s"
msgid "Fullname: %s"
msgstr "Koko nimi: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Kotipaikka: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Kotisivu: %s"
@@ -5557,6 +5628,11 @@ msgstr "Valitse tagi lyhentääksesi listaa"
msgid "Go"
msgstr "Mene"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "Ryhmän tai aiheen kotisivun tai blogin osoite"
@@ -5696,11 +5772,11 @@ msgstr "Kirjaudu sisään käyttäjätunnuksella ja salasanalla"
msgid "Sign up for a new account"
msgstr "Luo uusi käyttäjätili"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Sähköpostiosoitteen vahvistus"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5717,12 +5793,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s seuraa nyt päivityksiäsi palvelussa %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5747,19 +5823,19 @@ msgstr ""
"----\n"
"Voit vaihtaa sähköpostiosoitetta tai ilmoitusasetuksiasi %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Tietoja: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Uusi sähköpostiosoite päivityksien lähettämiseen palveluun %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5780,21 +5856,21 @@ msgstr ""
"Terveisin,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s päivitys"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS vahvistus"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s tönäisi sinua"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5810,12 +5886,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Uusi yksityisviesti käyttäjältä %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5834,12 +5910,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s lisäsi päivityksesi suosikkeihinsa"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5860,12 +5936,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6114,10 +6190,6 @@ msgstr "Vastaukset"
msgid "Favorites"
msgstr "Suosikit"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Käyttäjä"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Saapuneet"
@@ -6144,7 +6216,7 @@ msgstr "Tagit käyttäjän %s päivityksissä"
msgid "Unknown"
msgstr "Tuntematon toiminto"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tilaukset"
@@ -6152,24 +6224,24 @@ msgstr "Tilaukset"
msgid "All subscriptions"
msgstr "Kaikki tilaukset"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Tilaajat"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Kaikki tilaajat"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Käyttäjä"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Käyttäjänä alkaen"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Kaikki ryhmät"
@@ -6212,7 +6284,12 @@ msgstr "Vastaa tähän päivitykseen"
msgid "Repeat this notice"
msgstr "Vastaa tähän päivitykseen"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Estä tätä käyttäjää osallistumassa tähän ryhmään"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6376,47 +6453,63 @@ msgstr "Viesti"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Käyttäjän profiili"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Ylläpitäjät"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "muutama sekunti sitten"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "noin minuutti sitten"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "noin %d minuuttia sitten"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "noin tunti sitten"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "noin %d tuntia sitten"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "noin päivä sitten"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "noin %d päivää sitten"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "noin kuukausi sitten"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "noin %d kuukautta sitten"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "noin vuosi sitten"
diff --git a/locale/fr/LC_MESSAGES/statusnet.po b/locale/fr/LC_MESSAGES/statusnet.po
index 68e210ff1..4c9429e21 100644
--- a/locale/fr/LC_MESSAGES/statusnet.po
+++ b/locale/fr/LC_MESSAGES/statusnet.po
@@ -14,19 +14,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:48+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:51+0000\n"
"Language-Team: French\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: fr\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accès"
@@ -47,7 +48,6 @@ msgstr "Interdire aux utilisateurs anonymes (non connectés) de voir le site ?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privé"
@@ -78,7 +78,6 @@ msgid "Save access settings"
msgstr "Sauvegarder les paramètres d’accès"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Enregistrer"
@@ -107,7 +106,7 @@ msgstr "Page non trouvée"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +122,7 @@ msgstr "%1$s et ses amis, page %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -187,7 +186,7 @@ msgstr ""
"un clin d’œil à %s ou poster un avis à son intention."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Vous et vos amis"
@@ -214,11 +213,11 @@ msgstr "Statuts de %1$s et ses amis dans %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Méthode API non trouvée !"
@@ -590,7 +589,7 @@ msgstr ""
"devriez donner l’accès à votre compte %4$s qu’aux tiers à qui vous faites "
"confiance."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Compte"
@@ -679,18 +678,6 @@ msgstr "%1$s / Favoris de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s statuts favoris de %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Activité de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Statuts de %1$s dans %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -701,12 +688,12 @@ msgstr "%1$s / Mises à jour mentionnant %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Activité publique %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s statuts de tout le monde !"
@@ -726,7 +713,7 @@ msgstr "Reprises de %s"
msgid "Notices tagged with %s"
msgstr "Avis marqués avec %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 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 !"
@@ -768,7 +755,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Utilisateur sans profil correspondant"
@@ -954,7 +941,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Avis"
@@ -973,7 +960,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Un problème est survenu avec votre jeton de session."
@@ -1169,8 +1156,9 @@ msgstr "Revenir aux valeurs par défaut"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1286,7 +1274,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Impossible de créer les alias."
@@ -1410,7 +1398,7 @@ msgid "Cannot normalize that email address"
msgstr "Impossible d’utiliser cette adresse courriel"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse courriel invalide."
@@ -1602,6 +1590,22 @@ msgstr "Fichier non trouvé."
msgid "Cannot read file."
msgstr "Impossible de lire le fichier"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Rôle invalide."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Ce rôle est réservé et ne peut pas être défini."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Vous ne pouvez pas attribuer des rôles aux utilisateurs sur ce site."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "L'utilisateur a déjà ce rôle."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1750,12 +1754,18 @@ msgstr "Faire un administrateur"
msgid "Make this user an admin"
msgstr "Faire de cet utilisateur un administrateur"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Activité de %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Mises à jour des membres de %1$s dans %2$s !"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groupes"
@@ -2023,7 +2033,6 @@ msgstr "Ajouter un message personnel à l’invitation (optionnel)."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Envoyer"
@@ -2394,8 +2403,8 @@ msgstr "type de contenu "
msgid "Only "
msgstr "Seulement "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Format de données non supporté."
@@ -2535,7 +2544,8 @@ msgstr "Impossible de sauvegarder le nouveau mot de passe."
msgid "Password saved."
msgstr "Mot de passe enregistré."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Chemins"
@@ -2655,7 +2665,7 @@ msgstr "Dossier des arrière plans"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Jamais"
@@ -2711,11 +2721,11 @@ msgstr "Cette marque est invalide : %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utilisateurs marqués par eux-mêmes avec %1$s - page %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contenu de l’avis invalide"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2797,7 +2807,7 @@ msgstr ""
"Marques pour vous-même (lettres, chiffres, -, ., et _), séparées par des "
"virgules ou des espaces"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Langue"
@@ -2825,7 +2835,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La bio est trop longue (%d caractères maximum)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Aucun fuseau horaire n’a été choisi."
@@ -3148,7 +3158,7 @@ msgid "Same as password above. Required."
msgstr "Identique au mot de passe ci-dessus. Requis."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Courriel"
@@ -3257,7 +3267,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de votre profil sur un autre service de micro-blogging compatible"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "S’abonner"
@@ -3362,6 +3372,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Réponses à %1$s sur %2$s !"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Vous ne pouvez pas révoquer les rôles des utilisateurs sur ce site."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "L'utilisateur ne possède pas ce rôle."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3375,7 +3393,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr "L’utilisateur est déjà dans le bac à sable."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessions"
@@ -3399,7 +3419,7 @@ msgstr "Déboguage de session"
msgid "Turn on debugging output for sessions."
msgstr "Activer la sortie de déboguage pour les sessions."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Sauvegarder les paramètres du site"
@@ -3430,8 +3450,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiques"
@@ -3573,45 +3593,45 @@ msgstr "Alias"
msgid "Group actions"
msgstr "Actions du groupe"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fil des avis du groupe %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fil des avis du groupe %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fil des avis du groupe %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "ami d’un ami pour le groupe %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membres"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(aucun)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tous les membres"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Créé"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3627,7 +3647,7 @@ msgstr ""
"action.register%%%%) pour devenir membre de ce groupe et bien plus ! ([En "
"lire plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3640,7 +3660,7 @@ msgstr ""
"logiciel libre [StatusNet](http://status.net/). Ses membres partagent des "
"messages courts à propos de leur vie et leurs intérêts. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administrateurs"
@@ -3765,148 +3785,135 @@ msgid "User is already silenced."
msgstr "Cet utilisateur est déjà réduit au silence."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Paramètres basiques pour ce site StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Paramètres basiques pour ce site StatusNet"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Le nom du site ne peut pas être vide."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Vous devez avoir une adresse électronique de contact valide."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Langue « %s » inconnue."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL de rapport d’instantanés invalide."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valeur de lancement d’instantanés invalide."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "La fréquence des instantanés doit être un nombre."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "La limite minimale de texte est de 140 caractères."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "La limite de doublon doit être d’une seconde ou plus."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Général"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nom du site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Le nom de votre site, comme « Microblog de votre compagnie »"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Apporté par"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texte utilisé pour le lien de crédits au bas de chaque page"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Apporté par URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL utilisée pour le lien de crédits au bas de chaque page"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Adresse de courriel de contact de votre site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Zone horaire par défaut"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Zone horaire par défaut pour ce site ; généralement UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr "Langue du site par défaut"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantanés"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Au hasard lors des requêtes web"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Dans une tâche programée"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantanés de données"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quand envoyer des données statistiques aux serveurs status.net"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Langue par défaut"
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Fréquence"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Les instantanés seront envoyés une fois tous les N requêtes"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL de rapport"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Les instantanés seront envoyés à cette URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+"Langue du site lorsque la détection automatique des paramètres du navigateur "
+"n'est pas disponible"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texte"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Nombre maximal de caractères pour les avis."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de doublons"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Combien de temps (en secondes) les utilisateurs doivent attendre pour poster "
"la même chose de nouveau."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Avis du site"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Modifier un message portant sur tout le site"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Impossible d'enregistrer l'avis du site."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "La longueur maximale pour l'avis du site est de 255 caractères"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Texte de l'avis du site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Texte de l'avis portant sur tout le site (max. 255 caractères ; HTML activé)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Enregistrer l'avis du site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Paramètres SMS"
@@ -4010,6 +4017,64 @@ msgstr ""
msgid "No code entered"
msgstr "Aucun code entré"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantanés"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Gérer la configuration des instantanés"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valeur de lancement d’instantanés invalide."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La fréquence des instantanés doit être un nombre."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL de rapport d’instantanés invalide."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Au hasard lors des requêtes web"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Dans une tâche programée"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantanés de données"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quand envoyer des données statistiques aux serveurs status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Fréquence"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Les instantanés seront envoyés une fois tous les N requêtes"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL de rapport"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Les instantanés seront envoyés à cette URL"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Sauvegarder les paramètres des instantanés"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Vous n’êtes pas abonné(e) à ce profil."
@@ -4220,7 +4285,7 @@ msgstr "Aucune identité de profil dans la requête."
msgid "Unsubscribed"
msgstr "Désabonné"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4230,7 +4295,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Utilisateur"
@@ -4427,18 +4491,24 @@ msgstr "Groupes %1$s, page %2$d"
msgid "Search for more groups"
msgstr "Rechercher pour plus de groupes"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s n’est pas membre d’un groupe."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Essayez de [rechercher un groupe](%%action.groupsearch%%) et de vous y "
"inscrire."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Statuts de %1$s dans %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4494,7 +4564,7 @@ msgstr ""
msgid "Plugins"
msgstr "Extensions"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4559,22 +4629,22 @@ msgstr "Impossible de mettre à jour le message avec un nouvel URI."
msgid "DB error inserting hashtag: %s"
msgstr "Erreur de base de donnée en insérant la marque (hashtag) : %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problème lors de l’enregistrement de l’avis ; trop long."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Erreur lors de l’enregistrement de l’avis. Utilisateur inconnu."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Trop d’avis, trop vite ! Faites une pause et publiez à nouveau dans quelques "
"minutes."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4582,19 +4652,19 @@ msgstr ""
"Trop de messages en double trop vite ! Prenez une pause et publiez à nouveau "
"dans quelques minutes."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Il vous est interdit de poster des avis sur ce site."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problème lors de l’enregistrement de l’avis."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problème lors de l’enregistrement de la boîte de réception du groupe."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4619,7 +4689,11 @@ msgstr "Pas abonné !"
msgid "Couldn't delete self-subscription."
msgstr "Impossible de supprimer l’abonnement à soi-même."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossible de supprimer le jeton OMB de l'abonnement ."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Impossible de cesser l’abonnement"
@@ -4628,20 +4702,19 @@ msgstr "Impossible de cesser l’abonnement"
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bienvenue à %1$s, @%2$s !"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Impossible de créer le groupe."
-#: classes/User_group.php:471
-#, fuzzy
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Impossible de définir l'URI du groupe."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Impossible d’établir l’inscription au groupe."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Impossible d’enregistrer les informations du groupe local."
@@ -4682,194 +4755,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Page sans nom"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigation primaire du site"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profil personnel et flux des amis"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Personnel"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Modifier votre courriel, avatar, mot de passe, profil"
-
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Compte"
+msgstr "Modifier votre adresse électronique, avatar, mot de passe, profil"
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Se connecter aux services"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Connecter"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modifier la configuration du site"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Administrer"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr "Inviter des amis et collègues à vous rejoindre dans %s"
+msgstr "Inviter des amis et collègues à vous rejoindre sur %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Inviter"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Fermer la session"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
-msgstr "Fermeture de session"
+msgstr "Déconnexion"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Créer un compte"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
-msgstr "Créer un compte"
+msgstr "S'inscrire"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Ouvrir une session"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
-msgstr "Ouvrir une session"
+msgstr "Connexion"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "À l’aide !"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Aide"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Rechercher des personnes ou du texte"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Rechercher"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Notice du site"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Vues locales"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Avis de la page"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navigation secondaire du site"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Aide"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "À propos"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "CGU"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Confidentialité"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Source"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Insigne"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licence du logiciel StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4878,12 +4927,12 @@ msgstr ""
"**%%site.name%%** est un service de microblogging qui vous est proposé par "
"[%%site.broughtby%%](%%site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** est un service de micro-blogging."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4894,57 +4943,57 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licence du contenu du site"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur de %1$s. Tous droits "
"réservés."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Le contenu et les données sont sous le droit d’auteur du contributeur. Tous "
"droits réservés."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Tous "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licence."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Après"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Avant"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Impossible de gérer le contenu distant pour le moment."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Impossible de gérer le contenu XML embarqué pour le moment."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Impossible de gérer le contenu en Base64 embarqué pour le moment."
@@ -4959,91 +5008,76 @@ msgid "Changes to that panel are not allowed."
msgstr "La modification de ce panneau n’est pas autorisée."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() n’a pas été implémentée."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() n’a pas été implémentée."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossible de supprimer les paramètres de conception."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuration basique du site"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Site"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuration de la conception"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Conception"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuration utilisateur"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Utilisateur"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuration d’accès"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Accès"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuration des chemins"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Chemins"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuration des sessions"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessions"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Modifier l'avis du site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Configuration des instantanés"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5236,12 +5270,12 @@ msgstr "%s a quitté le groupe %s"
msgid "Fullname: %s"
msgstr "Nom complet : %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Emplacement : %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Site Web : %s"
@@ -5581,6 +5615,11 @@ msgstr "Choissez une marque pour réduire la liste"
msgid "Go"
msgstr "Aller"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Accorder le rôle « %s » à cet utilisateur"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL du site Web ou blogue du groupe ou sujet "
@@ -5721,11 +5760,11 @@ msgstr "Ouvrez une session avec un identifiant et un mot de passe"
msgid "Sign up for a new account"
msgstr "Créer un nouveau compte"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmation de l’adresse courriel"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5755,12 +5794,12 @@ msgstr ""
"Merci de votre attention,\n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s suit maintenant vos avis sur %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5785,17 +5824,17 @@ msgstr ""
"----\n"
"Changez votre adresse de courriel ou vos options de notification sur %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Bio : %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nouvelle adresse courriel pour poster dans %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5816,21 +5855,21 @@ msgstr ""
"Cordialement,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Statut de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmation SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Vous avez reçu un clin d’œil de %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5857,12 +5896,12 @@ msgstr ""
"Bien à vous,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nouveau message personnel de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5895,12 +5934,12 @@ msgstr ""
"Bien à vous,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) a ajouté un de vos avis à ses favoris"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5938,12 +5977,12 @@ msgstr ""
"Cordialement,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) vous a envoyé un avis"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6075,7 +6114,6 @@ msgid "Available characters"
msgstr "Caractères restants"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Envoyer"
@@ -6202,10 +6240,6 @@ msgstr "Réponses"
msgid "Favorites"
msgstr "Favoris"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Utilisateur"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Boîte de réception"
@@ -6231,7 +6265,7 @@ msgstr "Marques dans les avis de %s"
msgid "Unknown"
msgstr "Inconnu"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnements"
@@ -6239,23 +6273,23 @@ msgstr "Abonnements"
msgid "All subscriptions"
msgstr "Tous les abonnements"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnés"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tous les abonnés"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID de l’utilisateur"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membre depuis"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tous les groupes"
@@ -6295,7 +6329,12 @@ msgstr "Reprendre cet avis ?"
msgid "Repeat this notice"
msgstr "Reprendre cet avis"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Révoquer le rôle « %s » de cet utilisateur"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Aucun utilisateur unique défini pour le mode mono-utilisateur."
@@ -6449,47 +6488,61 @@ msgstr "Message"
msgid "Moderate"
msgstr "Modérer"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Rôle de l'utilisateur"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrateur"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Modérateur"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "il y a quelques secondes"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "il y a 1 minute"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "il y a %d minutes"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "il y a 1 heure"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "il y a %d heures"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "il y a 1 jour"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "il y a %d jours"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "il y a 1 mois"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "il y a %d mois"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "il y a environ 1 an"
diff --git a/locale/ga/LC_MESSAGES/statusnet.po b/locale/ga/LC_MESSAGES/statusnet.po
index 0b62fe337..dea9dd11c 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:51+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:54+0000\n"
"Language-Team: Irish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -21,7 +21,8 @@ msgstr ""
"4;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Aceptar"
@@ -109,7 +110,7 @@ msgstr "Non existe a etiqueta."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -125,7 +126,7 @@ msgstr "%s e amigos"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +181,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s e amigos"
@@ -208,11 +209,11 @@ msgstr "Actualizacións dende %1$s e amigos en %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Método da API non atopado"
@@ -585,7 +586,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Sobre"
@@ -679,18 +680,6 @@ msgstr "%s / Favoritos dende %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s updates favorited by %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Liña de tempo de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualizacións dende %1$s en %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -701,12 +690,12 @@ msgstr "%1$s / Chíos que respostan a %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Liña de tempo pública de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s chíos de calquera!"
@@ -726,7 +715,7 @@ msgstr "Replies to %s"
msgid "Notices tagged with %s"
msgstr "Chíos tagueados con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 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!"
@@ -767,7 +756,7 @@ msgstr "Podes actualizar a túa información do perfil persoal aquí"
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Usuario sen un perfil que coincida."
@@ -965,7 +954,7 @@ msgid "Conversation"
msgstr "Código de confirmación."
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Chíos"
@@ -987,7 +976,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:1228
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Houbo un problema co teu token de sesión. Tentao de novo, anda..."
@@ -1196,8 +1185,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1329,7 +1319,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Non se puido crear o favorito."
@@ -1457,7 +1447,7 @@ msgid "Cannot normalize that email address"
msgstr "Esa dirección de correo non se pode normalizar "
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non é un enderezo de correo válido."
@@ -1653,6 +1643,25 @@ msgstr "Ningún chío."
msgid "Cannot read file."
msgstr "Bloqueo de usuario fallido."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Tamaño inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Non podes enviar mensaxes a este usurio."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O usuario bloqueoute."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1807,12 +1816,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Liña de tempo de %s"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualizacións dende %1$s en %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2434,8 +2449,8 @@ msgstr "Conectar"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Non é un formato de datos soportado."
@@ -2583,7 +2598,8 @@ msgstr "Non se pode gardar a contrasinal."
msgid "Password saved."
msgstr "Contrasinal gardada."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2711,7 +2727,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Recuperar"
@@ -2770,11 +2786,11 @@ msgstr "%s non é unha etiqueta de xente válida"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuarios auto-etiquetados como %s - páxina %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contido do chío inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2857,7 +2873,7 @@ msgstr ""
"Etiquetas para o teu usuario (letras, números, -, ., e _), separados por "
"coma ou espazo"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Linguaxe"
@@ -2885,7 +2901,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "O teu Bio é demasiado longo (max 140 car.)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso Horario non seleccionado"
@@ -3205,7 +3221,7 @@ msgid "Same as password above. Required."
msgstr "A mesma contrasinal que arriba. Requerido."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correo Electrónico"
@@ -3313,7 +3329,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Enderezo do teu perfil en outro servizo de microblogaxe compatíbel"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscribir"
@@ -3418,6 +3434,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Mensaxe de %1$s en %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Non podes enviar mensaxes a este usurio."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuario sen un perfil que coincida."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3433,7 +3459,9 @@ msgstr "Non podes enviar mensaxes a este usurio."
msgid "User is already sandboxed."
msgstr "O usuario bloqueoute."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3457,7 +3485,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3494,8 +3522,8 @@ msgstr "Invitación(s) enviada(s)."
msgid "Description"
msgstr "Subscricións"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3631,48 +3659,48 @@ msgstr ""
msgid "Group actions"
msgstr "Outras opcions"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de chíos para %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Band. Saída para %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Membro dende"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
#, fuzzy
msgid "(None)"
msgstr "(nada)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Crear"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3686,7 +3714,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3699,7 +3727,7 @@ msgstr ""
"(http://status.net/). [Únete agora](%%action.register%%) para compartir "
"chíos cos teus amigos, colegas e familia! ([Ler mais](%%doc.help%%))"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3820,150 +3848,139 @@ msgid "User is already silenced."
msgstr "O usuario bloqueoute."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Non é unha dirección de correo válida"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Novo chío"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nova dirección de email para posterar en %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Localización"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Linguaxe preferida"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nova mensaxe"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Non se puideron gardar os teus axustes de Twitter!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Novo chío"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Novo chío"
#: actions/smssettings.php:58
#, fuzzy
@@ -4068,6 +4085,66 @@ msgstr ""
msgid "No code entered"
msgstr "Non se inseriu ningún código"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Navegación de subscricións"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Configuracións de Twitter"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Non estás suscrito a ese perfil"
@@ -4275,7 +4352,7 @@ msgstr "Non hai identificador de perfil na peticion."
msgid "Unsubscribed"
msgstr "De-suscribido"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4488,16 +4565,22 @@ msgstr "Tódalas subscricións"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "%1s non é unha orixe fiable."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualizacións dende %1$s en %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4541,7 +4624,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persoal"
@@ -4610,23 +4693,23 @@ msgstr "Non se puido actualizar a mensaxe coa nova URI."
msgid "DB error inserting hashtag: %s"
msgstr "Erro ó inserir o hashtag na BD: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Aconteceu un erro ó gardar o chío. Usuario descoñecido."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4635,20 +4718,20 @@ msgstr ""
"Demasiados chíos en pouco tempo; tomate un respiro e envíao de novo dentro "
"duns minutos."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Tes restrinxido o envio de chíos neste sitio."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Aconteceu un erro ó gardar o chío."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4676,7 +4759,12 @@ msgstr "Non está suscrito!"
msgid "Couldn't delete self-subscription."
msgstr "Non se pode eliminar a subscrición."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Non se pode eliminar a subscrición."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Non se pode eliminar a subscrición."
@@ -4685,22 +4773,22 @@ msgstr "Non se pode eliminar a subscrición."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Mensaxe de %1$s en %2$s"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Non se puido crear o favorito."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Non se pode gardar a subscrición."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Non se pode gardar a subscrición."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Non se pode gardar a subscrición."
@@ -4744,62 +4832,54 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Persoal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambiar contrasinal"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Sobre"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Non se pode redireccionar ao servidor: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Conectar"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Navegación de subscricións"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
@@ -4807,131 +4887,132 @@ msgstr ""
"Emprega este formulario para invitar ós teus amigos e colegas a empregar "
"este servizo."
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invitar"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Sair"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear nova conta"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Rexistrar"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Inicio de sesión"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Axuda"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Axuda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Buscar"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Novo chío"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Novo chío"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Navegación de subscricións"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Axuda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Preguntas frecuentes"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4940,12 +5021,12 @@ msgstr ""
"**%%site.name%%** é un servizo de microbloguexo que che proporciona [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é un servizo de microbloguexo."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4956,57 +5037,57 @@ msgstr ""
"%s, dispoñible baixo licenza [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Atopar no contido dos chíos"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
#, fuzzy
msgid "All "
msgstr "Todos"
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Despois"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Antes »"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -5023,99 +5104,89 @@ msgid "Changes to that panel are not allowed."
msgstr "Non se permite o rexistro neste intre."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Comando non implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Comando non implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Non se puideron gardar os teus axustes de Twitter!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Confirmar correo electrónico"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Invitar"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Confirmación de SMS"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Persoal"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Confirmación de SMS"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Usuario"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Confirmación de SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Aceptar"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Confirmación de SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Confirmación de SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Persoal"
+msgid "Edit site notice"
+msgstr "Novo chío"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Confirmación de SMS"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5312,12 +5383,12 @@ msgstr "%s / Favoritos dende %s"
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Ubicación: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Páxina persoal: %s"
@@ -5659,6 +5730,11 @@ msgstr "Elixe unha etiqueta para reducila lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5805,11 +5881,11 @@ msgstr "Accede co teu nome de usuario e contrasinal."
msgid "Sign up for a new account"
msgstr "Crear nova conta"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmar correo electrónico"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5838,12 +5914,12 @@ msgstr ""
"Grazas polo teu tempo, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s está a escoitar os teus chíos %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5864,17 +5940,17 @@ msgstr ""
"Atentamente todo seu,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "Ubicación: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nova dirección de email para posterar en %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5895,21 +5971,21 @@ msgstr ""
"Sempre teu...,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Estado de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmación de SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s douche un toque"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5935,12 +6011,12 @@ msgstr ""
"With kind regards,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "%s enviouche unha nova mensaxe privada"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5973,12 +6049,12 @@ msgstr ""
"With kind regards,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s gustoulle o teu chío"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, fuzzy, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -6011,12 +6087,12 @@ msgstr ""
"Fielmente teu,\n"
"%5$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6273,10 +6349,6 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritos"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usuario"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Band. Entrada"
@@ -6303,7 +6375,7 @@ msgstr "O usuario non ten último chio."
msgid "Unknown"
msgstr "Acción descoñecida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscricións"
@@ -6311,25 +6383,25 @@ msgstr "Subscricións"
msgid "All subscriptions"
msgstr "Tódalas subscricións"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Usuario"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro dende"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
#, fuzzy
msgid "All groups"
msgstr "Tódalas etiquetas"
@@ -6374,7 +6446,12 @@ msgstr "Non se pode eliminar este chíos."
msgid "Repeat this notice"
msgstr "Non se pode eliminar este chíos."
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6546,47 +6623,62 @@ msgstr "Nova mensaxe"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "O usuario non ten perfil."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fai uns segundos"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fai un minuto"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fai %d minutos"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fai unha hora"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fai %d horas"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fai un día"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fai %d días"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fai un mes"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fai %d meses"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fai un ano"
diff --git a/locale/he/LC_MESSAGES/statusnet.po b/locale/he/LC_MESSAGES/statusnet.po
index 89fd4dd7a..49f229a96 100644
--- a/locale/he/LC_MESSAGES/statusnet.po
+++ b/locale/he/LC_MESSAGES/statusnet.po
@@ -7,19 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:54+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:49:57+0000\n"
"Language-Team: Hebrew\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: he\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "קבל"
@@ -106,7 +107,7 @@ msgstr "אין הודעה כזו."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -122,7 +123,7 @@ msgstr "%s וחברים"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -177,7 +178,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s וחברים"
@@ -205,11 +206,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "קוד האישור לא נמצא."
@@ -578,7 +579,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "אודות"
@@ -670,18 +671,6 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "מיקרובלוג מאת %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -692,12 +681,12 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -717,7 +706,7 @@ msgstr "תגובת עבור %s"
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "מיקרובלוג מאת %s"
@@ -759,7 +748,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -954,7 +943,7 @@ msgid "Conversation"
msgstr "מיקום"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "הודעות"
@@ -976,7 +965,7 @@ msgstr "לא שלחנו אלינו את הפרופיל הזה"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1180,8 +1169,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1307,7 +1297,7 @@ msgstr "הביוגרפיה ארוכה מידי (לכל היותר 140 אותיו
msgid "Could not update group."
msgstr "עידכון המשתמש נכשל."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "שמירת מידע התמונה נכשל"
@@ -1431,7 +1421,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1626,6 +1616,25 @@ msgstr "אין הודעה כזו."
msgid "Cannot read file."
msgstr "אין הודעה כזו."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "גודל לא חוקי."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "לא שלחנו אלינו את הפרופיל הזה"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "למשתמש אין פרופיל."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1778,12 +1787,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "מיקרובלוג מאת %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "קבוצות"
@@ -2365,8 +2380,8 @@ msgstr "התחבר"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2514,7 +2529,8 @@ msgstr "לא ניתן לשמור את הסיסמה"
msgid "Password saved."
msgstr "הסיסמה נשמרה."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2641,7 +2657,7 @@ msgstr ""
msgid "SSL"
msgstr "סמס"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "שיחזור"
@@ -2700,11 +2716,11 @@ msgstr "לא עומד בכללים ל-OpenID."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "מיקרובלוג מאת %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "תוכן ההודעה לא חוקי"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2782,7 +2798,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "שפה"
@@ -2808,7 +2824,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "הביוגרפיה ארוכה מידי (לכל היותר 140 אותיות)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3113,7 +3129,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -3201,7 +3217,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "כתובת הפרופיל שלך בשרות ביקרובלוג תואם אחר"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "הירשם כמנוי"
@@ -3304,6 +3320,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "תגובת עבור %s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "לא שלחנו אלינו את הפרופיל הזה"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "למשתמש אין פרופיל."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3319,7 +3345,9 @@ msgstr "לא שלחנו אלינו את הפרופיל הזה"
msgid "User is already sandboxed."
msgstr "למשתמש אין פרופיל."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3343,7 +3371,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3379,8 +3407,8 @@ msgstr "מיקום"
msgid "Description"
msgstr "הרשמות"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "סטטיסטיקה"
@@ -3514,47 +3542,47 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "הזנת הודעות של %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "חבר מאז"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "צור"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3564,7 +3592,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3573,7 +3601,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3685,147 +3713,136 @@ msgid "User is already silenced."
msgstr "למשתמש אין פרופיל."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "מיקום"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "בעיה בשמירת ההודעה."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "הודעה חדשה"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "הודעה חדשה"
#: actions/smssettings.php:58
#, fuzzy
@@ -3922,6 +3939,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "הרשמות"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "הגדרות"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
@@ -4130,7 +4207,7 @@ msgstr "השרת לא החזיר כתובת פרופיל"
msgid "Unsubscribed"
msgstr "בטל מנוי"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4337,16 +4414,22 @@ msgstr "כל המנויים"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "לא שלחנו אלינו את הפרופיל הזה"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4390,7 +4473,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "אישי"
@@ -4458,41 +4541,41 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "בעיה בשמירת ההודעה."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4520,7 +4603,12 @@ msgstr "לא מנוי!"
msgid "Couldn't delete self-subscription."
msgstr "מחיקת המנוי לא הצליחה."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "מחיקת המנוי לא הצליחה."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "מחיקת המנוי לא הצליחה."
@@ -4529,22 +4617,22 @@ msgstr "מחיקת המנוי לא הצליחה."
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "שמירת מידע התמונה נכשל"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "יצירת המנוי נכשלה."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "יצירת המנוי נכשלה."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "יצירת המנוי נכשלה."
@@ -4588,192 +4676,185 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "אישי"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "שנה סיסמה"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "אודות"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "נכשלה ההפניה לשרת: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "התחבר"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "הרשמות"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "גודל לא חוקי."
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "צא"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "צור חשבון חדש"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "הירשם"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "היכנס"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "עזרה"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "עזרה"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "חיפוש"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "הודעה חדשה"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "הודעה חדשה"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "הרשמות"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "עזרה"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "אודות"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "רשימת שאלות נפוצות"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "פרטיות"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "מקור"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "צור קשר"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4782,12 +4863,12 @@ msgstr ""
"**%%site.name%%** הוא שרות ביקרובלוג הניתן על ידי [%%site.broughtby%%](%%"
"site.broughtbyurl%%)."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** הוא שרות ביקרובלוג."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4798,56 +4879,56 @@ msgstr ""
"s, המופצת תחת רשיון [GNU Affero General Public License](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)"
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "הודעה חדשה"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "<< אחרי"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "לפני >>"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4862,95 +4943,85 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "הרשמות"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "הודעה חדשה"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "אישי"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "הרשמות"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "מתשמש"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "הרשמות"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "קבל"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "הרשמות"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "הרשמות"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "אישי"
+msgid "Edit site notice"
+msgstr "הודעה חדשה"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "הרשמות"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5145,12 +5216,12 @@ msgstr "הסטטוס של %1$s ב-%2$s "
msgid "Fullname: %s"
msgstr "שם מלא"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5455,6 +5526,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5600,11 +5676,11 @@ msgstr "שם המשתמש או הסיסמה לא חוקיים"
msgid "Sign up for a new account"
msgstr "צור חשבון חדש"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr ""
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5621,12 +5697,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s כעת מאזין להודעות שלך ב-%2$s"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5646,17 +5722,17 @@ msgstr ""
" שלך,\n"
" %4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "אודות: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5669,21 +5745,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr ""
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5699,12 +5775,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5723,12 +5799,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%1$s כעת מאזין להודעות שלך ב-%2$s"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5749,12 +5825,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6005,10 +6081,6 @@ msgstr "תגובות"
msgid "Favorites"
msgstr "מועדפים"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "מתשמש"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -6034,7 +6106,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "הרשמות"
@@ -6042,25 +6114,25 @@ msgstr "הרשמות"
msgid "All subscriptions"
msgstr "כל המנויים"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "מנויים"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "מנויים"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "מתשמש"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "חבר מאז"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -6104,7 +6176,12 @@ msgstr "אין הודעה כזו."
msgid "Repeat this notice"
msgstr "אין הודעה כזו."
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "אין משתמש כזה."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6269,47 +6346,62 @@ msgstr "הודעה חדשה"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "למשתמש אין פרופיל."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "לפני מספר שניות"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "לפני כדקה"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "לפני כ-%d דקות"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "לפני כשעה"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "לפני כ-%d שעות"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "לפני כיום"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "לפני כ-%d ימים"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "לפני כחודש"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "לפני כ-%d חודשים"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "לפני כשנה"
diff --git a/locale/hsb/LC_MESSAGES/statusnet.po b/locale/hsb/LC_MESSAGES/statusnet.po
index f46e7357a..91d9c9c73 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:02:57+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:00+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -22,7 +22,8 @@ msgstr ""
"n%100==4) ? 2 : 3)\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Přistup"
@@ -106,7 +107,7 @@ msgstr "Strona njeeksistuje"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -122,7 +123,7 @@ msgstr "%1$s a přećeljo, strona %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -177,7 +178,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ty a přećeljo"
@@ -204,11 +205,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metoda njenamakana."
@@ -563,7 +564,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -650,18 +651,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -672,12 +661,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -697,7 +686,7 @@ msgstr ""
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -738,7 +727,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Wužiwar bjez hodźaceho so profila"
@@ -921,7 +910,7 @@ msgid "Conversation"
msgstr "Konwersacija"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Zdźělenki"
@@ -942,7 +931,7 @@ 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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1133,8 +1122,9 @@ msgstr "Na standard wróćo stajić"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1252,7 +1242,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Aliasy njejsu so dali wutworić."
@@ -1372,7 +1362,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Njepłaćiwa e-mejlowa adresa."
@@ -1556,6 +1546,25 @@ msgstr "Dataja njeeksistuje."
msgid "Cannot read file."
msgstr "Dataja njeda so čitać."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Njepłaćiwa wulkosć."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Wužiwar nima profil."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1698,12 +1707,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr "Tutoho wužiwarja k administratorej činić"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Skupiny"
@@ -2258,8 +2273,8 @@ msgstr ""
msgid "Only "
msgstr "Jenož "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Njeje podpěrany datowy format."
@@ -2398,7 +2413,8 @@ msgstr ""
msgid "Password saved."
msgstr "Hesło składowane."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Šćežki"
@@ -2518,7 +2534,7 @@ msgstr "Pozadkowy zapis"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ženje"
@@ -2571,11 +2587,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Njepłaćiwy wobsah zdźělenki"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2651,7 +2667,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Rěč"
@@ -2677,7 +2693,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Biografija je předołha (maks. %d znamješkow)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Časowe pasmo njeje wubrane."
@@ -2976,7 +2992,7 @@ msgid "Same as password above. Required."
msgstr "Jenake kaž hesło horjeka. Trěbne."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mejl"
@@ -3060,7 +3076,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonować"
@@ -3156,6 +3172,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Njemóžeš tutomu wužiwarju powěsć pósłać."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Wužiwar bjez hodźaceho so profila."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3168,7 +3194,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Posedźenja"
@@ -3193,7 +3221,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Sydłowe nastajenja składować"
@@ -3224,8 +3252,8 @@ msgstr "Organizacija"
msgid "Description"
msgstr "Wopisanje"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistika"
@@ -3358,45 +3386,45 @@ msgstr "Aliasy"
msgid "Group actions"
msgstr "Skupinske akcije"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Čłonojo"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Žadyn)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Wšitcy čłonojo"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Wutworjeny"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3406,7 +3434,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3415,7 +3443,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratorojo"
@@ -3525,146 +3553,137 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr ""
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
+msgstr "Designowe nastajenja za tute sydło StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Dyrbiš płaćiwu kontaktowu e-mejlowu adresu měć."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Njeznata rěč \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Powšitkowny"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Sydłowe mjeno"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalny"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardne časowe pasmo"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Standardna sydłowa rěč"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frekwenca"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limity"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstowy limit"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksimalna ličba znamješkow za zdźělenki."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Zdźělenki"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nowa powěsć"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Wužiwar nima poslednju powěsć"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Njepłaćiwy wobsah zdźělenki"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Sydłowe nastajenja składować"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS-nastajenja"
@@ -3757,6 +3776,66 @@ msgstr ""
msgid "No code entered"
msgstr "Žadyn kod zapodaty"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "SMS-wobkrućenje"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frekwenca"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Sydłowe nastajenja składować"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Njejsy tón profil abonował."
@@ -3952,7 +4031,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr "Wotskazany"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4143,16 +4222,22 @@ msgstr "%1$s skupinskich čłonow, strona %2$d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4196,7 +4281,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersija"
@@ -4260,38 +4345,38 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4316,7 +4401,12 @@ msgstr "Njeje abonowany!"
msgid "Couldn't delete self-subscription."
msgstr "Sebjeabonement njeje so dał zničić."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Abonoment njeje so dał zničić."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Abonoment njeje so dał zničić."
@@ -4325,20 +4415,20 @@ msgstr "Abonoment njeje so dał zničić."
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Skupina njeje so dała aktualizować."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Profil njeje so składować dał."
@@ -4380,63 +4470,55 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bjez titula"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Wosobinski"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Změń swoje hesło."
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Zwiski"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Zwjazać"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "SMS-wobkrućenje"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
@@ -4444,143 +4526,144 @@ msgstr ""
"Wužij tutón formular, zo by swojich přećelow a kolegow přeprosył, zo bychu "
"tutu słužbu wužiwali."
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Přeprosyć"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Šat za sydło."
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Logo"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Konto załožić"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrować"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Při sydle přizjewić"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Přizjewić"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomhaj!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Pomoc"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Za ludźimi abo tekstom pytać"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Pytać"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Pomoc"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Wo"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Huste prašenja"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Priwatnosć"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Žórło"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4588,53 +4671,53 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4649,94 +4732,83 @@ msgid "Changes to that panel are not allowed."
msgstr "Změny na tutym woknje njejsu dowolene."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Sydło"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Design"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS-wobkrućenje"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Wužiwar"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS-wobkrućenje"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Přistup"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Šćežki"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS-wobkrućenje"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Posedźenja"
+msgid "Edit site notice"
+msgstr "Dwójna zdźělenka"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS-wobkrućenje"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -4920,12 +4992,12 @@ msgstr "%s je skupinu %s wopušćił"
msgid "Fullname: %s"
msgstr "Dospołne mjeno: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Městno: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5224,6 +5296,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5359,11 +5436,11 @@ msgstr "Přizjewjenje z wužiwarskim mjenom a hesłom"
msgid "Sign up for a new account"
msgstr "Nowe konto registrować"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Wobkrućenje e-mejloweje adresy"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5380,12 +5457,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr ""
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5400,17 +5477,17 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Biografija: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5423,21 +5500,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr ""
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS-wobkrućenje"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5453,12 +5530,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nowa priwatna powěsć wot %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5477,12 +5554,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) je twoju zdźělenku jako faworit přidał"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5503,12 +5580,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5748,10 +5825,6 @@ msgstr "Wotmołwy"
msgid "Favorites"
msgstr "Fawority"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Wužiwar"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -5777,7 +5850,7 @@ msgstr ""
msgid "Unknown"
msgstr "Njeznaty"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonementy"
@@ -5785,23 +5858,23 @@ msgstr "Abonementy"
msgid "All subscriptions"
msgstr "Wšě abonementy"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonenća"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Wšitcy abonenća"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Wužiwarski ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Čłon wot"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Wšě skupiny"
@@ -5841,7 +5914,12 @@ msgstr "Tutu zdźělenku wospjetować?"
msgid "Repeat this notice"
msgstr "Tutu zdźělenku wospjetować"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Tutoho wužiwarja za tutu skupinu blokować"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5995,47 +6073,63 @@ msgstr "Powěsć"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Wužiwarski profil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratorojo"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "před něšto sekundami"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "před něhdźe jednej mjeńšinu"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "před %d mjeńšinami"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "před něhdźe jednej hodźinu"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "před něhdźe %d hodźinami"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "před něhdźe jednym dnjom"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "před něhdźe %d dnjemi"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "před něhdźe jednym měsacom"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "před něhdźe %d měsacami"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "před něhdźe jednym lětom"
diff --git a/locale/ia/LC_MESSAGES/statusnet.po b/locale/ia/LC_MESSAGES/statusnet.po
index cc6af7f0f..7a96686ed 100644
--- a/locale/ia/LC_MESSAGES/statusnet.po
+++ b/locale/ia/LC_MESSAGES/statusnet.po
@@ -8,19 +8,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:00+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:08+0000\n"
"Language-Team: Interlingua\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ia\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accesso"
@@ -101,7 +102,7 @@ msgstr "Pagina non existe"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -117,7 +118,7 @@ msgstr "%1$s e amicos, pagina %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +181,7 @@ msgstr ""
"pulsata a %s o publicar un message a su attention."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tu e amicos"
@@ -207,11 +208,11 @@ msgstr "Actualisationes de %1$s e su amicos in %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Methodo API non trovate."
@@ -575,7 +576,7 @@ msgstr ""
"<strong>%3$s</strong> le datos de tu conto de %4$s. Tu debe solmente dar "
"accesso a tu conto de %4$s a tertie personas in le quales tu ha confidentia."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conto"
@@ -665,18 +666,6 @@ msgstr "%1$s / Favorites de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualisationes favoritisate per %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Chronologia de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualisationes de %1$s in %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -688,12 +677,12 @@ msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
"Actualisationes de %1$s que responde al actualisationes de %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Chronologia public de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Actualisationes de totes in %s!"
@@ -713,7 +702,7 @@ msgstr "Repetitiones de %s"
msgid "Notices tagged with %s"
msgstr "Notas con etiquetta %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Actualisationes con etiquetta %1$s in %2$s!"
@@ -754,7 +743,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Usator sin profilo correspondente"
@@ -940,7 +929,7 @@ msgid "Conversation"
msgstr "Conversation"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notas"
@@ -959,7 +948,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Il habeva un problema con tu indicio de session."
@@ -1155,8 +1144,9 @@ msgstr "Revenir al predefinitiones"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1272,7 +1262,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Non poteva crear aliases."
@@ -1395,7 +1385,7 @@ msgid "Cannot normalize that email address"
msgstr "Non pote normalisar iste adresse de e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Adresse de e-mail invalide."
@@ -1587,6 +1577,25 @@ msgstr "File non existe."
msgid "Cannot read file."
msgstr "Non pote leger file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Indicio invalide."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Usator es ja silentiate."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1734,12 +1743,18 @@ msgstr "Facer administrator"
msgid "Make this user an admin"
msgstr "Facer iste usator administrator"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Chronologia de %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualisationes de membros de %1$s in %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppos"
@@ -2366,8 +2381,8 @@ msgstr "typo de contento "
msgid "Only "
msgstr "Solmente "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Formato de datos non supportate."
@@ -2507,7 +2522,8 @@ msgstr "Non pote salveguardar le nove contrasigno."
msgid "Password saved."
msgstr "Contrasigno salveguardate."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Camminos"
@@ -2627,7 +2643,7 @@ msgstr "Directorio al fundos"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunquam"
@@ -2682,11 +2698,11 @@ msgstr "Etiquetta de personas invalide: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usatores auto-etiquettate con %1$s - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Le contento del nota es invalide"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2768,7 +2784,7 @@ msgstr ""
"Etiquettas pro te (litteras, numeros, -, ., e _), separate per commas o "
"spatios"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2795,7 +2811,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Bio es troppo longe (max %d chars)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horari non seligite."
@@ -3112,7 +3128,7 @@ msgid "Same as password above. Required."
msgstr "Identic al contrasigno hic supra. Requirite."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3219,7 +3235,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL de tu profilo in un altere servicio de microblogging compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscriber"
@@ -3323,6 +3339,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Responsas a %1$s in %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Tu non pote silentiar usatores in iste sito."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usator sin profilo correspondente"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3335,7 +3361,9 @@ msgstr "Tu non pote mitter usatores in le cassa de sablo in iste sito."
msgid "User is already sandboxed."
msgstr "Usator es ja in cassa de sablo."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessiones"
@@ -3359,7 +3387,7 @@ msgstr "Cercar defectos de session"
msgid "Turn on debugging output for sessions."
msgstr "Producer informationes technic pro cercar defectos in sessiones."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salveguardar configurationes del sito"
@@ -3390,8 +3418,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Description"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statisticas"
@@ -3533,45 +3561,45 @@ msgstr "Aliases"
msgid "Group actions"
msgstr "Actiones del gruppo"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Syndication de notas pro le gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Syndication de notas pro le gruppo %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Amico de un amico pro le gruppo %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nulle)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tote le membros"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Create"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3586,7 +3614,7 @@ msgstr ""
"lor vita e interesses. [Crea un conto](%%%%action.register%%%%) pro devenir "
"parte de iste gruppo e multe alteres! ([Lege plus](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3599,7 +3627,7 @@ msgstr ""
"[StatusNet](http://status.net/). Su membros condivide breve messages super "
"lor vita e interesses. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratores"
@@ -3722,148 +3750,139 @@ msgid "User is already silenced."
msgstr "Usator es ja silentiate."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurationes de base pro iste sito de StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Le longitude del nomine del sito debe esser plus que zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Tu debe haber un valide adresse de e-mail pro contacto."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" incognite."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Le URL pro reportar instantaneos es invalide."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valor de execution de instantaneo invalide."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Le frequentia de instantaneos debe esser un numero."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Le limite minimal del texto es 140 characteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Le limite de duplicatos debe esser 1 o plus secundas."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "General"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nomine del sito"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Le nomine de tu sito, como \"Le microblog de TuCompania\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Realisate per"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Le texto usate pro le ligamine al creditos in le pede de cata pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL pro \"Realisate per\""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usate pro le ligamine al creditos in le pede de cata pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Le adresse de e-mail de contacto pro tu sito"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horari predefinite"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horari predefinite pro le sito; normalmente UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Lingua predefinite del sito"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantaneos"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatorimente durante un accesso web"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "In un processo planificate"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantaneos de datos"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviar datos statistic al servitores de status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentia"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Un instantaneo essera inviate a cata N accessos web"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL pro reporto"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Le instantaneos essera inviate a iste URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Numero maximal de characteres pro notas."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatos"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quante tempore (in secundas) le usatores debe attender ante de poter "
"publicar le mesme cosa de novo."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso del sito"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nove message"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Impossibile salveguardar le configurationes del apparentia."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso del sito"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso del sito"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Parametros de SMS"
@@ -3963,6 +3982,66 @@ msgstr ""
msgid "No code entered"
msgstr "Nulle codice entrate"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantaneos"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Modificar le configuration del sito"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valor de execution de instantaneo invalide."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Le frequentia de instantaneos debe esser un numero."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Le URL pro reportar instantaneos es invalide."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatorimente durante un accesso web"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "In un processo planificate"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantaneos de datos"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando inviar datos statistic al servitores de status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentia"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Un instantaneo essera inviate a cata N accessos web"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL pro reporto"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Le instantaneos essera inviate a iste URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Salveguardar configurationes del sito"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Tu non es subscribite a iste profilo."
@@ -4173,7 +4252,7 @@ msgstr "Nulle ID de profilo in requesta."
msgid "Unsubscribed"
msgstr "Subscription cancellate"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4376,17 +4455,23 @@ msgstr "Gruppos %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Cercar altere gruppos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s non es membro de alcun gruppo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Tenta [cercar gruppos](%%action.groupsearch%%) e facer te membro de illos."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualisationes de %1$s in %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4442,7 +4527,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4508,22 +4593,22 @@ msgstr "Non poteva actualisar message con nove URI."
msgid "DB error inserting hashtag: %s"
msgstr "Error in base de datos durante insertion del marca (hashtag): %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema salveguardar nota. Troppo longe."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema salveguardar nota. Usator incognite."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppo de notas troppo rapidemente; face un pausa e publica de novo post "
"alcun minutas."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4531,19 +4616,19 @@ msgstr ""
"Troppo de messages duplicate troppo rapidemente; face un pausa e publica de "
"novo post alcun minutas."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Il te es prohibite publicar notas in iste sito."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema salveguardar nota."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problema salveguardar le cassa de entrata del gruppo."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4568,7 +4653,12 @@ msgstr "Non subscribite!"
msgid "Couldn't delete self-subscription."
msgstr "Non poteva deler auto-subscription."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Non poteva deler subscription."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Non poteva deler subscription."
@@ -4577,20 +4667,20 @@ msgstr "Non poteva deler subscription."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenite a %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Non poteva crear gruppo."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Non poteva configurar le membrato del gruppo."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Non poteva configurar le membrato del gruppo."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Non poteva salveguardar le subscription."
@@ -4632,194 +4722,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Pagina sin titulo"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigation primari del sito"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personal e chronologia de amicos"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Cambiar tu e-mail, avatar, contrasigno, profilo"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Conto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connecter con servicios"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Connecter"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modificar le configuration del sito"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, 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:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invitar"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Terminar le session del sito"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Clauder session"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crear un conto"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Crear conto"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Identificar te a iste sito"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Aperir session"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Adjuta me!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Adjuta"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cercar personas o texto"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Cercar"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso del sito"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas local"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso de pagina"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navigation secundari del sito"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Adjuta"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "A proposito"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "CdS"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Confidentialitate"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Insignia"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licentia del software StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4828,12 +4911,12 @@ msgstr ""
"**%%site.name%%** es un servicio de microblog offerite per [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** es un servicio de microblog. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4844,54 +4927,54 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licentia del contento del sito"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, 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:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Contento e datos sub copyright del contributores. Tote le derectos reservate."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Totes "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licentia."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Pagination"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Post"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Ante"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4906,91 +4989,80 @@ msgid "Changes to that panel are not allowed."
msgstr "Le modification de iste pannello non es permittite."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() non implementate."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() non implementate."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossibile deler configuration de apparentia."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuration basic del sito"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Sito"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuration del apparentia"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Apparentia"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuration del usator"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Usator"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuration del accesso"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Accesso"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuration del camminos"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Camminos"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuration del sessiones"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessiones"
+msgid "Edit site notice"
+msgstr "Aviso del sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuration del camminos"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5183,12 +5255,12 @@ msgstr "%s quitava le gruppo %s"
msgid "Fullname: %s"
msgstr "Nomine complete: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Loco: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pagina personal: %s"
@@ -5522,6 +5594,11 @@ msgstr "Selige etiquetta pro reducer lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL del pagina initial o blog del gruppo o topico"
@@ -5659,11 +5736,11 @@ msgstr "Aperir session con nomine de usator e contrasigno"
msgid "Sign up for a new account"
msgstr "Crear un nove conto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmation del adresse de e-mail"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5692,12 +5769,12 @@ msgstr ""
"Gratias pro tu attention,\n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s seque ora tu notas in %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5722,17 +5799,17 @@ msgstr ""
"----\n"
"Cambia tu adresse de e-mail o optiones de notification a %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Bio: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nove adresse de e-mail pro publicar in %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5753,21 +5830,21 @@ msgstr ""
"Cordialmente,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Stato de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmation SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s te ha pulsate"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5794,12 +5871,12 @@ msgstr ""
"Con salutes cordial,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nove message private de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5832,12 +5909,12 @@ msgstr ""
"Con salutes cordial,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) ha addite tu nota como favorite"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5875,12 +5952,12 @@ msgstr ""
"Cordialmente,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) ha inviate un nota a tu attention"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6140,10 +6217,6 @@ msgstr "Responsas"
msgid "Favorites"
msgstr "Favorites"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usator"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Cassa de entrata"
@@ -6169,7 +6242,7 @@ msgstr "Etiquettas in le notas de %s"
msgid "Unknown"
msgstr "Incognite"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscriptiones"
@@ -6177,23 +6250,23 @@ msgstr "Subscriptiones"
msgid "All subscriptions"
msgstr "Tote le subscriptiones"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscriptores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tote le subscriptores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID del usator"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro depost"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tote le gruppos"
@@ -6233,7 +6306,12 @@ msgstr "Repeter iste nota?"
msgid "Repeat this notice"
msgstr "Repeter iste nota"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Blocar iste usator de iste gruppo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Nulle signule usator definite pro le modo de singule usator."
@@ -6387,47 +6465,64 @@ msgstr "Message"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Profilo del usator"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "alcun secundas retro"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "circa un minuta retro"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minutas retro"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "circa un hora retro"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "circa %d horas retro"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "circa un die retro"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "circa %d dies retro"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "circa un mense retro"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "circa %d menses retro"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "circa un anno retro"
diff --git a/locale/is/LC_MESSAGES/statusnet.po b/locale/is/LC_MESSAGES/statusnet.po
index aaf79c8f7..3c8f33565 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:04+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:12+0000\n"
"Language-Team: Icelandic\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -22,7 +22,8 @@ msgstr ""
"n % 100 != 81 && n % 100 != 91);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Samþykkja"
@@ -109,7 +110,7 @@ msgstr "Ekkert þannig merki."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -125,7 +126,7 @@ msgstr "%s og vinirnir, síða %d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +181,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr ""
@@ -207,11 +208,11 @@ msgstr "Færslur frá %1$s og vinum á %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Aðferð í forritsskilum fannst ekki!"
@@ -580,7 +581,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Aðgangur"
@@ -671,18 +672,6 @@ msgstr "%s / Uppáhaldsbabl frá %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s færslur gerðar að uppáhaldsbabli af %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Rás %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Færslur frá %1$s á %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -693,12 +682,12 @@ msgstr ""
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Almenningsrás %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s færslur frá öllum!"
@@ -718,7 +707,7 @@ msgstr "Svör við %s"
msgid "Notices tagged with %s"
msgstr "Babl merkt með %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -758,7 +747,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Notandi með enga persónulega síðu sem passar við"
@@ -947,7 +936,7 @@ msgid "Conversation"
msgstr ""
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Babl"
@@ -969,7 +958,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Það komu upp vandamál varðandi setutókann þinn."
@@ -1169,8 +1158,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1298,7 +1288,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr ""
@@ -1422,7 +1412,7 @@ msgid "Cannot normalize that email address"
msgstr "Get ekki staðlað þetta tölvupóstfang"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ekki tækt tölvupóstfang."
@@ -1618,6 +1608,25 @@ msgstr "Ekkert svoleiðis babl."
msgid "Cannot read file."
msgstr "Týndum skránni okkar"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ótæk stærð."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Þú getur ekki sent þessum notanda skilaboð."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Notandi hefur enga persónulega síðu."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1760,12 +1769,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Rás %s"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Færslur frá %1$s á %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Hópar"
@@ -2385,8 +2400,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Enginn stuðningur við gagnasnið."
@@ -2533,7 +2548,8 @@ msgstr "Get ekki vistað nýja lykilorðið."
msgid "Password saved."
msgstr "Lykilorð vistað."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2660,7 +2676,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Endurheimta"
@@ -2719,11 +2735,11 @@ msgstr "Ekki gilt persónumerki: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Notendur sjálfmerktir með %s - síða %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ótækt bablinnihald"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2806,7 +2822,7 @@ msgstr ""
"Merki fyrir þig (bókstafir, tölustafir, -, ., og _), aðskilin með kommu eða "
"bili"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Tungumál"
@@ -2834,7 +2850,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Lýsingin er of löng (í mesta lagi 140 tákn)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tímabelti ekki valið."
@@ -3138,7 +3154,7 @@ msgid "Same as password above. Required."
msgstr "Sama og lykilorðið hér fyrir ofan. Nauðsynlegt."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Tölvupóstur"
@@ -3243,7 +3259,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Veffang persónulegrar síðu á samvirkandi örbloggsþjónustu"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Gerast áskrifandi"
@@ -3349,6 +3365,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Skilaboð til %1$s á %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Þú getur ekki sent þessum notanda skilaboð."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Notandi með enga persónulega síðu sem passar við"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3363,7 +3389,9 @@ msgstr "Þú getur ekki sent þessum notanda skilaboð."
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3387,7 +3415,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3423,8 +3451,8 @@ msgstr "Uppröðun"
msgid "Description"
msgstr "Lýsing"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Tölfræði"
@@ -3557,45 +3585,45 @@ msgstr ""
msgid "Group actions"
msgstr "Hópsaðgerðir"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s hópurinn"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Meðlimir"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ekkert)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Allir meðlimir"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr ""
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3605,7 +3633,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3614,7 +3642,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3726,150 +3754,139 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ekki tækt tölvupóstfang"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Nýtt tölvupóstfang til að senda á %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Staðbundin sýn"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Tungumál (ákjósanlegt)"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ný skilaboð"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Vandamál komu upp við að vista babl."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Babl vefsíðunnar"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Babl vefsíðunnar"
#: actions/smssettings.php:58
#, fuzzy
@@ -3971,6 +3988,66 @@ msgstr ""
msgid "No code entered"
msgstr "Enginn lykill sleginn inn"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Stikl aðalsíðu"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Stillingar fyrir mynd"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Þú ert ekki áskrifandi."
@@ -4176,7 +4253,7 @@ msgstr "Ekkert einkenni persónulegrar síðu í beiðni."
msgid "Unsubscribed"
msgstr "Ekki lengur áskrifandi"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4385,16 +4462,22 @@ msgstr "Hópmeðlimir %s, síða %d"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Færslur frá %1$s á %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4438,7 +4521,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Persónulegt"
@@ -4507,41 +4590,41 @@ msgstr "Gat ekki uppfært skilaboð með nýju veffangi."
msgid "DB error inserting hashtag: %s"
msgstr "Gagnagrunnsvilla við innsetningu myllumerkis: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Gat ekki vistað babl. Óþekktur notandi."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Of mikið babl í einu; slakaðu aðeins á og haltu svo áfram eftir nokkrar "
"mínútur."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Það hefur verið lagt bann við babli frá þér á þessari síðu."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Vandamál komu upp við að vista babl."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4569,7 +4652,12 @@ msgstr "Ekki í áskrift!"
msgid "Couldn't delete self-subscription."
msgstr "Gat ekki eytt áskrift."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Gat ekki eytt áskrift."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Gat ekki eytt áskrift."
@@ -4578,20 +4666,20 @@ msgstr "Gat ekki eytt áskrift."
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Gat ekki búið til hóp."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Gat ekki skráð hópmeðlimi."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Gat ekki skráð hópmeðlimi."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Gat ekki vistað áskrift."
@@ -4633,25 +4721,25 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ónafngreind síða"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Stikl aðalsíðu"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persónuleg síða og vinarás"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Persónulegt"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
@@ -4659,170 +4747,163 @@ msgstr ""
"Breyttu tölvupóstinum þínum, einkennismyndinni þinni, lykilorðinu þínu, "
"persónulegu síðunni þinni"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Aðgangur"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Gat ekki framsent til vefþjóns: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Tengjast"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Stikl aðalsíðu"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Stjórnandi"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Bjóða vinum og vandamönnum að slást í hópinn á %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Bjóða"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Skrá þig út af síðunni"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Útskráning"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Búa til aðgang"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Nýskrá"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Skrá þig inn á síðuna"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Innskráning"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjálp!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Hjálp"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Leita að fólki eða texta"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Leita"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Babl vefsíðunnar"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Staðbundin sýn"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Babl síðunnar"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Stikl undirsíðu"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hjálp"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Um"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Spurt og svarað"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Friðhelgi"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Frumþula"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Tengiliður"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4831,12 +4912,12 @@ msgstr ""
"**%%site.name%%** er örbloggsþjónusta í boði [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er örbloggsþjónusta."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4847,54 +4928,54 @@ msgstr ""
"sem er gefinn út undir [GNU Affero almenningsleyfinu](http://www.fsf.org/"
"licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Hugbúnaðarleyfi StatusNet"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Allt "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "leyfi."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Uppröðun"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Eftir"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Áður"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4911,98 +4992,88 @@ msgid "Changes to that panel are not allowed."
msgstr "Nýskráning ekki leyfð."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Skipun hefur ekki verið fullbúin"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Skipun hefur ekki verið fullbúin"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Staðfesting tölvupóstfangs"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Bjóða"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS staðfesting"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Persónulegt"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS staðfesting"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Notandi"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS staðfesting"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Samþykkja"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS staðfesting"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS staðfesting"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Persónulegt"
+msgid "Edit site notice"
+msgstr "Babl vefsíðunnar"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS staðfesting"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5194,12 +5265,12 @@ msgstr "%s gekk úr hópnum %s"
msgid "Fullname: %s"
msgstr "Fullt nafn: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Staðsetning: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Heimasíða: %s"
@@ -5503,6 +5574,11 @@ msgstr "Veldu merki til að þrengja lista"
msgid "Go"
msgstr "Áfram"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "Vefslóð vefsíðu hópsins eða umfjöllunarefnisins"
@@ -5640,11 +5716,11 @@ msgstr "Skráðu þig inn með notendanafni og lykilorði"
msgid "Sign up for a new account"
msgstr "Búðu til nýjan aðgang"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Staðfesting tölvupóstfangs"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5661,12 +5737,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s er að hlusta á bablið þitt á %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5681,19 +5757,19 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Lýsing: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nýtt tölvupóstfang til að senda á %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5714,21 +5790,21 @@ msgstr ""
"Með kærri kveðju,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Staða %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS staðfesting"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s ýtti við þér"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5744,12 +5820,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Ný persónuleg skilaboð frá %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5768,12 +5844,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s heldur upp á babl frá þér"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5794,12 +5870,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6047,10 +6123,6 @@ msgstr "Svör"
msgid "Favorites"
msgstr "Uppáhald"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Notandi"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Innhólf"
@@ -6077,7 +6149,7 @@ msgstr "Merki í babli %s"
msgid "Unknown"
msgstr "Óþekkt aðgerð"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Áskriftir"
@@ -6085,23 +6157,23 @@ msgstr "Áskriftir"
msgid "All subscriptions"
msgstr "Allar áskriftir"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Áskrifendur"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Allir áskrifendur"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Meðlimur síðan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Allir hópar"
@@ -6144,7 +6216,12 @@ msgstr "Svara þessu babli"
msgid "Repeat this notice"
msgstr "Svara þessu babli"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6304,47 +6381,62 @@ msgstr "Skilaboð"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Persónuleg síða notanda"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "fyrir nokkrum sekúndum"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "fyrir um einni mínútu síðan"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "fyrir um %d mínútum síðan"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "fyrir um einum klukkutíma síðan"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "fyrir um %d klukkutímum síðan"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "fyrir um einum degi síðan"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "fyrir um %d dögum síðan"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "fyrir um einum mánuði síðan"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "fyrir um %d mánuðum síðan"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "fyrir um einu ári síðan"
diff --git a/locale/it/LC_MESSAGES/statusnet.po b/locale/it/LC_MESSAGES/statusnet.po
index 61d4cfaf9..1bd3f26ad 100644
--- a/locale/it/LC_MESSAGES/statusnet.po
+++ b/locale/it/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:07+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:15+0000\n"
"Language-Team: Italian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: it\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Accesso"
@@ -44,7 +45,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privato"
@@ -75,7 +75,6 @@ msgid "Save access settings"
msgstr "Salva impostazioni di accesso"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Salva"
@@ -104,7 +103,7 @@ msgstr "Pagina inesistente."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +119,7 @@ msgstr "%1$s e amici, pagina %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -184,7 +183,7 @@ msgstr ""
"un messaggio alla sua attenzione."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Tu e i tuoi amici"
@@ -211,11 +210,11 @@ msgstr "Messaggi da %1$s e amici su %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Metodo delle API non trovato."
@@ -579,7 +578,7 @@ msgstr ""
"<strong>%3$s</strong> ai dati del tuo account %4$s. È consigliato fornire "
"accesso al proprio account %4$s solo ad applicazioni di cui ci si può fidare."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Account"
@@ -667,18 +666,6 @@ msgstr "%1$s / Preferiti da %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s aggiornamenti preferiti da %2$s / %3$s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Attività di %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Messaggi da %1$s su %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -689,12 +676,12 @@ msgstr "%1$s / Messaggi che citano %2$s"
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"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Attività pubblica di %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Aggiornamenti di %s da tutti!"
@@ -714,7 +701,7 @@ msgstr "Ripetizioni di %s"
msgid "Notices tagged with %s"
msgstr "Messaggi etichettati con %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Messaggi etichettati con %1$s su %2$s!"
@@ -755,7 +742,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Utente senza profilo corrispondente"
@@ -941,7 +928,7 @@ msgid "Conversation"
msgstr "Conversazione"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Messaggi"
@@ -960,7 +947,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Si è verificato un problema con il tuo token di sessione."
@@ -1155,8 +1142,9 @@ msgstr "Reimposta i valori predefiniti"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1272,7 +1260,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Impossibile creare gli alias."
@@ -1398,7 +1386,7 @@ msgid "Cannot normalize that email address"
msgstr "Impossibile normalizzare quell'indirizzo email"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Non è un indirizzo email valido."
@@ -1591,6 +1579,22 @@ msgstr "Nessun file."
msgid "Cannot read file."
msgstr "Impossibile leggere il file."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ruolo non valido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Questo ruolo è riservato e non può essere impostato."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Non puoi concedere i ruoli agli utenti su questo sito."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "L'utente ricopre già questo ruolo."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1738,12 +1742,18 @@ msgstr "Rendi amm."
msgid "Make this user an admin"
msgstr "Rende questo utente un amministratore"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Attività di %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Messaggi dai membri di %1$s su %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Gruppi"
@@ -2004,7 +2014,6 @@ msgstr "Puoi aggiungere un messaggio personale agli inviti."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Invia"
@@ -2363,8 +2372,8 @@ msgstr "tipo di contenuto "
msgid "Only "
msgstr "Solo "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Non è un formato di dati supportato."
@@ -2505,7 +2514,8 @@ msgstr "Impossibile salvare la nuova password."
msgid "Password saved."
msgstr "Password salvata."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Percorsi"
@@ -2625,7 +2635,7 @@ msgstr "Directory dello sfondo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Mai"
@@ -2680,11 +2690,11 @@ msgstr "Non è un'etichetta valida di persona: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utenti auto-etichettati con %1$s - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Contenuto del messaggio non valido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2766,7 +2776,7 @@ msgid ""
msgstr ""
"Le tue etichette (lettere, numeri, -, . e _), separate da virgole o spazi"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Lingua"
@@ -2794,7 +2804,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "La biografia è troppo lunga (max %d caratteri)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso orario non selezionato"
@@ -3111,7 +3121,7 @@ msgid "Same as password above. Required."
msgstr "Stessa password di sopra; richiesta"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3218,7 +3228,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL del tuo profilo su un altro servizio di microblog compatibile"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abbonati"
@@ -3322,6 +3332,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Risposte a %1$s su %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Non puoi revocare i ruoli degli utenti su questo sito."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "L'utente non ricopre questo ruolo."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3334,7 +3352,9 @@ msgstr "Non puoi mettere in \"sandbox\" gli utenti su questo sito."
msgid "User is already sandboxed."
msgstr "L'utente è già nella \"sandbox\"."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessioni"
@@ -3358,7 +3378,7 @@ msgstr "Debug delle sessioni"
msgid "Turn on debugging output for sessions."
msgstr "Abilita il debug per le sessioni"
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salva impostazioni"
@@ -3389,8 +3409,8 @@ msgstr "Organizzazione"
msgid "Description"
msgstr "Descrizione"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistiche"
@@ -3531,45 +3551,45 @@ msgstr "Alias"
msgid "Group actions"
msgstr "Azioni dei gruppi"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Feed dei messaggi per il gruppo %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Feed dei messaggi per il gruppo %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF per il gruppo %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membri"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(nessuno)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Tutti i membri"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Creato"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3585,7 +3605,7 @@ msgstr ""
"stesso](%%%%action.register%%%%) per far parte di questo gruppo e di molti "
"altri! ([Maggiori informazioni](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3597,7 +3617,7 @@ msgstr ""
"(http://it.wikipedia.org/wiki/Microblogging) basato sul software libero "
"[StatusNet](http://status.net/)."
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Amministratori"
@@ -3719,148 +3739,134 @@ msgid "User is already silenced."
msgstr "L'utente è già stato zittito."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Impostazioni di base per questo sito StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Impostazioni di base per questo sito StatusNet"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Il nome del sito non deve avere lunghezza parti a zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Devi avere un'email di contatto valida."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Lingua \"%s\" sconosciuta."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL di segnalazione snapshot non valido."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valore di esecuzione dello snapshot non valido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "La frequenza degli snapshot deve essere un numero."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Il limite minimo del testo è di 140 caratteri."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Il limite per i duplicati deve essere di 1 o più secondi."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Generale"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome del sito"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Il nome del tuo sito, topo \"Acme Microblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Offerto da"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Testo usato per i crediti nel piè di pagina di ogni pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL per offerto da"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usato per i crediti nel piè di pagina di ogni pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Indirizzo email di contatto per il sito"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Locale"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso orario predefinito"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso orario predefinito; tipicamente UTC"
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Lingua predefinita"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Snapshot"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "A caso quando avviene un web hit"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "In un job pianificato"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Snapshot dei dati"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando inviare dati statistici a status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequenza"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Gli snapshot verranno inviati ogni N web hit"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL per la segnalazione"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Gli snapshot verranno inviati a questo URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+"Lingua del sito quando il rilevamento automatico del browser non è "
+"disponibile"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limiti"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limiti del testo"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Numero massimo di caratteri per messaggo"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite duplicati"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo gli utenti devono attendere (in secondi) prima di inviare "
"nuovamente lo stesso messaggio"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Modifica il messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Impossibile salvare il messaggio del sito."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "La dimensione massima del messaggio del sito è di 255 caratteri"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Testo messaggio del sito"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Testo messaggio del sito (massimo 255 caratteri, HTML consentito)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Salva messaggio"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Impostazioni SMS"
@@ -3960,6 +3966,64 @@ msgstr ""
msgid "No code entered"
msgstr "Nessun codice inserito"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Snapshot"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Gestisci configurazione snapshot"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valore di esecuzione dello snapshot non valido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "La frequenza degli snapshot deve essere un numero."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL di segnalazione snapshot non valido."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "A caso quando avviene un web hit"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "In un job pianificato"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Snapshot dei dati"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando inviare dati statistici a status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequenza"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Gli snapshot verranno inviati ogni N web hit"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL per la segnalazione"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Gli snapshot verranno inviati a questo URL"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Salva impostazioni snapshot"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Non hai una abbonamento a quel profilo."
@@ -4169,7 +4233,7 @@ msgstr "Nessun ID di profilo nella richiesta."
msgid "Unsubscribed"
msgstr "Abbonamento annullato"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4179,7 +4243,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Utente"
@@ -4373,16 +4436,22 @@ msgstr "Gruppi di %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Cerca altri gruppi"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s non fa parte di alcun gruppo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Prova a [cercare dei gruppi](%%action.groupsearch%%) e iscriviti."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Messaggi da %1$s su %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4438,7 +4507,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugin"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versione"
@@ -4505,22 +4574,22 @@ msgstr "Impossibile aggiornare il messaggio con il nuovo URI."
msgid "DB error inserting hashtag: %s"
msgstr "Errore del DB nell'inserire un hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema nel salvare il messaggio. Troppo lungo."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema nel salvare il messaggio. Utente sconosciuto."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Troppi messaggi troppo velocemente; fai una pausa e scrivi di nuovo tra "
"qualche minuto."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4528,19 +4597,19 @@ msgstr ""
"Troppi messaggi duplicati troppo velocemente; fai una pausa e scrivi di "
"nuovo tra qualche minuto."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Ti è proibito inviare messaggi su questo sito."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema nel salvare il messaggio."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problema nel salvare la casella della posta del gruppo."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4565,7 +4634,11 @@ msgstr "Non hai l'abbonamento!"
msgid "Couldn't delete self-subscription."
msgstr "Impossibile eliminare l'auto-abbonamento."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Impossibile eliminare il token di abbonamento OMB."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Impossibile eliminare l'abbonamento."
@@ -4574,19 +4647,19 @@ msgstr "Impossibile eliminare l'abbonamento."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Benvenuti su %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Impossibile creare il gruppo."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Impossibile impostare l'URI del gruppo."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Impossibile impostare la membership al gruppo."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Impossibile salvare le informazioni del gruppo locale."
@@ -4627,194 +4700,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Pagina senza nome"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Esplorazione sito primaria"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profilo personale e attività degli amici"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Personale"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Modifica la tua email, immagine, password o il tuo profilo"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Account"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Connettiti con altri servizi"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Connetti"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Modifica la configurazione del sito"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Amministra"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Invita amici e colleghi a seguirti su %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Invita"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Termina la tua sessione sul sito"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Esci"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Crea un account"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Registrati"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Accedi al sito"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Accedi"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Aiutami!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Aiuto"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Cerca persone o del testo"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Cerca"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Messaggio del sito"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Viste locali"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Pagina messaggio"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Esplorazione secondaria del sito"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Aiuto"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Informazioni"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Sorgenti"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contatti"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Badge"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licenza del software StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4823,12 +4872,12 @@ msgstr ""
"**%%site.name%%** è un servizio di microblog offerto da [%%site.broughtby%%]"
"(%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** è un servizio di microblog. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4839,56 +4888,56 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licenza del contenuto del sito"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"I contenuti e i dati sono copyright di %1$s. Tutti i diritti riservati."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"I contenuti e i dati sono forniti dai collaboratori. Tutti i diritti "
"riservati."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Tutti "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licenza."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginazione"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Successivi"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Precedenti"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Impossibile gestire contenuti remoti."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Impossibile gestire contenuti XML incorporati."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Impossibile gestire contenuti Base64."
@@ -4903,91 +4952,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Le modifiche al pannello non sono consentite."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() non implementata."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() non implementata."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Impossibile eliminare le impostazioni dell'aspetto."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configurazione di base"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Sito"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configurazione aspetto"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Aspetto"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configurazione utente"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Utente"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configurazione di accesso"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Accesso"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configurazione percorsi"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Percorsi"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configurazione sessioni"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessioni"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Modifica messaggio del sito"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Configurazione snapshot"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5179,12 +5213,12 @@ msgstr "%1$s ha lasciato il gruppo %2$s"
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Posizione: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Pagina web: %s"
@@ -5522,6 +5556,11 @@ msgstr "Scegli un'etichetta per ridurre l'elenco"
msgid "Go"
msgstr "Vai"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Concedi a questo utente il ruolo \"%s\""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL della pagina web, blog del gruppo o l'argomento"
@@ -5658,11 +5697,11 @@ msgstr "Accedi con nome utente e password"
msgid "Sign up for a new account"
msgstr "Iscriviti per un nuovo account"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Conferma indirizzo email"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5692,12 +5731,12 @@ msgstr ""
"Grazie per il tuo tempo, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s sta ora seguendo i tuoi messaggi su %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5722,17 +5761,17 @@ msgstr ""
"----\n"
"Modifica il tuo indirizzo email o le opzioni di notifica presso %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Biografia: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nuovo indirizzo email per inviare messaggi a %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5753,21 +5792,21 @@ msgstr ""
"Cordiali saluti,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "stato di %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Conferma SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s ti ha richiamato"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5794,12 +5833,12 @@ msgstr ""
"Cordiali saluti,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nuovo messaggio privato da %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5832,12 +5871,12 @@ msgstr ""
"Cordiali saluti,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) ha aggiunto il tuo messaggio tra i suoi preferiti"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5875,12 +5914,12 @@ msgstr ""
"Cordiali saluti,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) ti ha inviato un messaggio"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6137,10 +6176,6 @@ msgstr "Risposte"
msgid "Favorites"
msgstr "Preferiti"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Utente"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "In arrivo"
@@ -6166,7 +6201,7 @@ msgstr "Etichette nei messaggi di %s"
msgid "Unknown"
msgstr "Sconosciuto"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abbonamenti"
@@ -6174,23 +6209,23 @@ msgstr "Abbonamenti"
msgid "All subscriptions"
msgstr "Tutti gli abbonamenti"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abbonati"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tutti gli abbonati"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID utente"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro dal"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Tutti i gruppi"
@@ -6230,7 +6265,12 @@ msgstr "Ripetere questo messaggio?"
msgid "Repeat this notice"
msgstr "Ripeti questo messaggio"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Revoca il ruolo \"%s\" a questo utente"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Nessun utente singolo definito per la modalità single-user."
@@ -6384,47 +6424,61 @@ msgstr "Messaggio"
msgid "Moderate"
msgstr "Modera"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Ruolo dell'utente"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Amministratore"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderatore"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "pochi secondi fa"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "circa un minuto fa"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "circa %d minuti fa"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "circa un'ora fa"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "circa %d ore fa"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "circa un giorno fa"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "circa %d giorni fa"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "circa un mese fa"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "circa %d mesi fa"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "circa un anno fa"
diff --git a/locale/ja/LC_MESSAGES/statusnet.po b/locale/ja/LC_MESSAGES/statusnet.po
index acbcb457d..847f24c59 100644
--- a/locale/ja/LC_MESSAGES/statusnet.po
+++ b/locale/ja/LC_MESSAGES/statusnet.po
@@ -11,19 +11,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:10+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:18+0000\n"
"Language-Team: Japanese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ja\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "アクセス"
@@ -104,7 +105,7 @@ msgstr "そのようなページはありません。"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +121,7 @@ msgstr "%1$s と友人、ページ %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -181,7 +182,7 @@ msgstr ""
"せを送ってみませんか。"
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "あなたと友人"
@@ -208,11 +209,11 @@ msgstr "%2$s に %1$s と友人からの更新があります!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API メソッドが見つかりません。"
@@ -573,7 +574,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "アカウント"
@@ -660,18 +661,6 @@ msgstr "%1$s / %2$s からのお気に入り"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s は %2$s でお気に入りを更新しました / %2$s。"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s のタイムライン"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%1$s から %2$s 上の更新をしました!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -682,12 +671,12 @@ msgstr "%1$s / %2$s について更新"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%2$s からアップデートに答える %1$s アップデート"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s のパブリックタイムライン"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "皆からの %s アップデート!"
@@ -707,7 +696,7 @@ msgstr "%s の返信"
msgid "Notices tagged with %s"
msgstr "%s とタグ付けされたつぶやき"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s に %1$s による更新があります!"
@@ -747,7 +736,7 @@ msgstr "自分のアバターをアップロードできます。最大サイズ
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "合っているプロフィールのないユーザ"
@@ -934,7 +923,7 @@ msgid "Conversation"
msgstr "会話"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "つぶやき"
@@ -953,7 +942,7 @@ msgstr "このアプリケーションのオーナーではありません。"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "あなたのセッショントークンに関する問題がありました。"
@@ -1149,8 +1138,9 @@ msgstr "デフォルトへリセットする"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1266,7 +1256,7 @@ msgstr "記述が長すぎます。(最長 %d 字)"
msgid "Could not update group."
msgstr "グループを更新できません。"
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "別名を作成できません。"
@@ -1391,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "そのメールアドレスを正規化できません"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "有効なメールアドレスではありません。"
@@ -1585,6 +1575,25 @@ msgstr "そのようなファイルはありません。"
msgid "Cannot read file."
msgstr "ファイルを読み込めません。"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "不正なトークン。"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "あなたはこのサイトのサンドボックスユーザができません。"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "ユーザは既に黙っています。"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1731,12 +1740,18 @@ msgstr "管理者にする"
msgid "Make this user an admin"
msgstr "このユーザを管理者にする"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s のタイムライン"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$s 上の %1$s のメンバーから更新する"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "グループ"
@@ -2355,8 +2370,8 @@ msgstr "内容種別 "
msgid "Only "
msgstr "だけ "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "サポートされていないデータ形式。"
@@ -2497,7 +2512,8 @@ msgstr "新しいパスワードを保存できません。"
msgid "Password saved."
msgstr "パスワードが保存されました。"
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "パス"
@@ -2617,7 +2633,7 @@ msgstr "バックグラウンドディレクトリ"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2672,11 +2688,11 @@ msgstr "正しいタグではありません: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "ユーザ自身がつけたタグ %1$s - ページ %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "不正なつぶやき内容"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2757,7 +2773,7 @@ msgstr ""
"自分自身についてのタグ (アルファベット、数字、-、.、_)、カンマまたは空白区切"
"りで"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "言語"
@@ -2783,7 +2799,7 @@ msgstr "自分をフォローしている者を自動的にフォローする (B
msgid "Bio is too long (max %d chars)."
msgstr "自己紹介が長すぎます (最長140文字)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "タイムゾーンが選ばれていません。"
@@ -3101,7 +3117,7 @@ msgid "Same as password above. Required."
msgstr "上のパスワードと同じです。 必須。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "メール"
@@ -3205,7 +3221,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "プロファイルサービスまたはマイクロブロギングサービスのURL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "フォロー"
@@ -3310,6 +3326,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%2$s 上の %1$s への返信!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "あなたはこのサイトでユーザを黙らせることができません。"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "合っているプロフィールのないユーザ"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3322,7 +3348,9 @@ msgstr "あなたはこのサイトのサンドボックスユーザができま
msgid "User is already sandboxed."
msgstr "ユーザはすでにサンドボックスです。"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "セッション"
@@ -3346,7 +3374,7 @@ msgstr "セッションデバッグ"
msgid "Turn on debugging output for sessions."
msgstr "セッションのためのデバッグ出力をオン。"
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "サイト設定の保存"
@@ -3377,8 +3405,8 @@ msgstr "組織"
msgid "Description"
msgstr "概要"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "統計データ"
@@ -3521,45 +3549,45 @@ msgstr "別名"
msgid "Group actions"
msgstr "グループアクション"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s グループのつぶやきフィード (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s グループのつぶやきフィード (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s グループのつぶやきフィード (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s グループの FOAF"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "メンバー"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(なし)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "全てのメンバー"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "作成日"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3574,7 +3602,7 @@ msgstr ""
"する短いメッセージを共有します。[今すぐ参加](%%%%action.register%%%%) してこ"
"のグループの一員になりましょう! ([もっと読む](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3587,7 +3615,7 @@ msgstr ""
"wikipedia.org/wiki/Micro-blogging) サービス。メンバーは彼らの暮らしと興味に関"
"する短いメッセージを共有します。"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "管理者"
@@ -3709,151 +3737,142 @@ msgid "User is already silenced."
msgstr "ユーザは既に黙っています。"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "この StatusNet サイトの基本設定。"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "サイト名は長さ0ではいけません。"
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "有効な連絡用メールアドレスがなければなりません。"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "不明な言語 \"%s\""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "不正なスナップショットレポートURL。"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "不正なスナップショットランバリュー"
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "スナップショット頻度は数でなければなりません。"
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "最小のテキスト制限は140字です。"
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "デュープ制限は1秒以上でなければなりません。"
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "一般"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "サイト名"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "あなたのサイトの名前、\"Yourcompany Microblog\"のような。"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "持って来られます"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"クレジットに使用されるテキストは、それぞれのページのフッターでリンクされま"
"す。"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URLで、持って来られます"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"クレジットに使用されるURLは、それぞれのページのフッターでリンクされます。"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "あなたのサイトにコンタクトするメールアドレス"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "ローカル"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "デフォルトタイムゾーン"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "サイトのデフォルトタイムゾーン; 通常UTC。"
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "デフォルトサイト言語"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "スナップショット"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "予定されているジョブで"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "データスナップショット"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "いつ status.net サーバに統計データを送りますか"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "頻度"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "レポート URL"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "レポート URL"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "このURLにスナップショットを送るでしょう"
-
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "制限"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "テキスト制限"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "つぶやきの文字の最大数"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "デュープ制限"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"どれくらい長い間(秒)、ユーザは、再び同じものを投稿するのを待たなければならな"
"いか。"
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "サイトつぶやき"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "新しいメッセージ"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "あなたのデザイン設定を保存できません。"
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "サイトつぶやき"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "サイトつぶやき"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS 設定"
@@ -3954,6 +3973,66 @@ msgstr ""
msgid "No code entered"
msgstr "コードが入力されていません"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "スナップショット"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "サイト設定の変更"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "不正なスナップショットランバリュー"
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "スナップショット頻度は数でなければなりません。"
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "不正なスナップショットレポートURL。"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "予定されているジョブで"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "データスナップショット"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "いつ status.net サーバに統計データを送りますか"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "頻度"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "レポート URL"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "レポート URL"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "このURLにスナップショットを送るでしょう"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "サイト設定の保存"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "あなたはそのプロファイルにフォローされていません。"
@@ -4162,7 +4241,7 @@ msgstr "リクエスト内にプロファイルIDがありません。"
msgid "Unsubscribed"
msgstr "フォロー解除済み"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4366,16 +4445,22 @@ msgstr "%1$s グループ、ページ %2$d"
msgid "Search for more groups"
msgstr "もっとグループを検索"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s はどのグループのメンバーでもありません。"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "[グループを探して](%%action.groupsearch%%)それに加入してください。"
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%1$s から %2$s 上の更新をしました!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4421,7 +4506,7 @@ msgstr ""
msgid "Plugins"
msgstr "プラグイン"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "バージョン"
@@ -4490,21 +4575,21 @@ msgstr "新しいURIでメッセージをアップデートできませんでし
msgid "DB error inserting hashtag: %s"
msgstr "ハッシュタグ追加 DB エラー: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "つぶやきを保存する際に問題が発生しました。長すぎです。"
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "つぶやきを保存する際に問題が発生しました。不明なユーザです。"
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"多すぎるつぶやきが速すぎます; 数分間の休みを取ってから再投稿してください。"
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4512,19 +4597,19 @@ msgstr ""
"多すぎる重複メッセージが速すぎます; 数分間休みを取ってから再度投稿してくださ"
"い。"
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "あなたはこのサイトでつぶやきを投稿するのが禁止されています。"
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "つぶやきを保存する際に問題が発生しました。"
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "グループ受信箱を保存する際に問題が発生しました。"
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4549,7 +4634,12 @@ msgstr "フォローしていません!"
msgid "Couldn't delete self-subscription."
msgstr "自己フォローを削除できません。"
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "フォローを削除できません"
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "フォローを削除できません"
@@ -4558,20 +4648,20 @@ msgstr "フォローを削除できません"
msgid "Welcome to %1$s, @%2$s!"
msgstr "ようこそ %1$s、@%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "グループを作成できません。"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "グループメンバーシップをセットできません。"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "グループメンバーシップをセットできません。"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "フォローを保存できません。"
@@ -4613,194 +4703,187 @@ msgstr ""
msgid "Untitled page"
msgstr "名称未設定ページ"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "プライマリサイトナビゲーション"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "パーソナルプロファイルと友人のタイムライン"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "パーソナル"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "メールアドレス、アバター、パスワード、プロパティの変更"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "アカウント"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "サービスへ接続"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "接続"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "サイト設定の変更"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "管理者"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "友人や同僚が %s で加わるよう誘ってください。"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "招待"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "サイトからログアウト"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "ログアウト"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "アカウントを作成"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "登録"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "サイトへログイン"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "ログイン"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "助けて!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "ヘルプ"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "人々かテキストを検索"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "検索"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "サイトつぶやき"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "ローカルビュー"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "ページつぶやき"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "セカンダリサイトナビゲーション"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "ヘルプ"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "About"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "よくある質問"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "プライバシー"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "ソース"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "連絡先"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "バッジ"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet ソフトウェアライセンス"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4809,12 +4892,12 @@ msgstr ""
"**%%site.name%%** は [%%site.broughtby%%](%%site.broughtbyurl%%) が提供するマ"
"イクロブログサービスです。 "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** はマイクロブログサービスです。 "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4825,53 +4908,53 @@ msgstr ""
"いています。 ライセンス [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)。"
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "サイト内容ライセンス"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "全て "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "ライセンス。"
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "ページ化"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "<<後"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "前>>"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4886,91 +4969,80 @@ msgid "Changes to that panel are not allowed."
msgstr "そのパネルへの変更は許可されていません。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() は実装されていません。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() は実装されていません。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "デザイン設定を削除できません。"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "基本サイト設定"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "サイト"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "デザイン設定"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "デザイン"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "ユーザ設定"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "ユーザ"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "アクセス設定"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "アクセス"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "パス設定"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "パス"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "セッション設定"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "セッション"
+msgid "Edit site notice"
+msgstr "サイトつぶやき"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "パス設定"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5161,12 +5233,12 @@ msgstr "%s はグループ %s に残りました。"
msgid "Fullname: %s"
msgstr "フルネーム: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "場所: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "ホームページ: %s"
@@ -5460,6 +5532,11 @@ msgstr "タグを選んで、リストを狭くしてください"
msgid "Go"
msgstr "移動"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "グループやトピックのホームページやブログの URL"
@@ -5595,11 +5672,11 @@ msgstr "ユーザ名とパスワードでログイン"
msgid "Sign up for a new account"
msgstr "新しいアカウントでサインアップ"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "メールアドレス確認"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5628,12 +5705,12 @@ msgstr ""
"ありがとうございます。\n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s は %2$s であなたのつぶやきを聞いています。"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5658,17 +5735,17 @@ msgstr ""
"----\n"
"%8$s でメールアドレスか通知オプションを変えてください。\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "自己紹介: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "%s へ投稿のための新しいメールアドレス"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, fuzzy, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5689,21 +5766,21 @@ msgstr ""
"忠実である、あなたのもの、\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s の状態"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS確認"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "あなたは %s に合図されています"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, fuzzy, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5730,12 +5807,12 @@ msgstr ""
"敬具\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "%s からの新しいプライベートメッセージ"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, fuzzy, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5768,12 +5845,12 @@ msgstr ""
"敬具\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) はお気に入りとしてあなたのつぶやきを加えました"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, fuzzy, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5811,12 +5888,12 @@ msgstr ""
"忠実である、あなたのもの、\n"
"%6%s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) はあなた宛てにつぶやきを送りました"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6081,10 +6158,6 @@ msgstr "返信"
msgid "Favorites"
msgstr "お気に入り"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "ユーザ"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "受信箱"
@@ -6110,7 +6183,7 @@ msgstr "%s のつぶやきのタグ"
msgid "Unknown"
msgstr "不明"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "フォロー"
@@ -6118,23 +6191,23 @@ msgstr "フォロー"
msgid "All subscriptions"
msgstr "すべてのフォロー"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "フォローされている"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "すべてのフォローされている"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ユーザID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "利用開始日"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "全てのグループ"
@@ -6174,7 +6247,12 @@ msgstr "このつぶやきを繰り返しますか?"
msgid "Repeat this notice"
msgstr "このつぶやきを繰り返す"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "このグループからこのユーザをブロック"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "single-user モードのためのシングルユーザが定義されていません。"
@@ -6329,47 +6407,64 @@ msgstr "メッセージ"
msgid "Moderate"
msgstr "管理"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "ユーザプロファイル"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "管理者"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "管理"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "数秒前"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "約 1 分前"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "約 %d 分前"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "約 1 時間前"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "約 %d 時間前"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "約 1 日前"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "約 %d 日前"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "約 1 ヵ月前"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "約 %d ヵ月前"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "約 1 年前"
diff --git a/locale/ko/LC_MESSAGES/statusnet.po b/locale/ko/LC_MESSAGES/statusnet.po
index aca8a093a..69bf4efb9 100644
--- a/locale/ko/LC_MESSAGES/statusnet.po
+++ b/locale/ko/LC_MESSAGES/statusnet.po
@@ -7,19 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:13+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:22+0000\n"
"Language-Team: Korean\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: ko\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "수락"
@@ -107,7 +108,7 @@ msgstr "그러한 태그가 없습니다."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +124,7 @@ msgstr "%s 와 친구들, %d 페이지"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -178,7 +179,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s 및 친구들"
@@ -206,11 +207,11 @@ msgstr "%1$s 및 %2$s에 있는 친구들의 업데이트!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 메서드를 찾을 수 없습니다."
@@ -583,7 +584,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "계정"
@@ -675,18 +676,6 @@ msgstr "%s / %s의 좋아하는 글들"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 좋아하는 글이 업데이트 됐습니다. %S에 의해 / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s 타임라인"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%2$s에 있는 %1$s의 업데이트!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -697,12 +686,12 @@ msgstr "%1$s / %2$s에게 답신 업데이트"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s님이 %2$s/%3$s의 업데이트에 답변했습니다."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s 공개 타임라인"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "모두로부터의 업데이트 %s개!"
@@ -722,7 +711,7 @@ msgstr "%s에 답신"
msgid "Notices tagged with %s"
msgstr "%s 태그된 통지"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s에 있는 %1$s의 업데이트!"
@@ -763,7 +752,7 @@ msgstr "당신의 개인적인 아바타를 업로드할 수 있습니다."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "프로필 매칭이 없는 사용자"
@@ -954,7 +943,7 @@ msgid "Conversation"
msgstr "인증 코드"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "통지"
@@ -976,7 +965,7 @@ msgstr "당신은 해당 그룹의 멤버가 아닙니다."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "당신의 세션토큰관련 문제가 있습니다."
@@ -1183,8 +1172,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1312,7 +1302,7 @@ msgstr "설명이 너무 길어요. (최대 140글자)"
msgid "Could not update group."
msgstr "그룹을 업데이트 할 수 없습니다."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "좋아하는 게시글을 생성할 수 없습니다."
@@ -1438,7 +1428,7 @@ msgid "Cannot normalize that email address"
msgstr "그 이메일 주소를 정규화 할 수 없습니다."
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "유효한 이메일 주소가 아닙니다."
@@ -1634,6 +1624,25 @@ msgstr "그러한 통지는 없습니다."
msgid "Cannot read file."
msgstr "파일을 잃어버렸습니다."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "옳지 않은 크기"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "당신은 이 사용자에게 메시지를 보낼 수 없습니다."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "회원이 당신을 차단해왔습니다."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1789,12 +1798,18 @@ msgstr "관리자"
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s 타임라인"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$s에 있는 %1$s의 업데이트!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "그룹"
@@ -2403,8 +2418,8 @@ msgstr "연결"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "지원하는 형식의 데이터가 아닙니다."
@@ -2550,7 +2565,8 @@ msgstr "새 비밀번호를 저장 할 수 없습니다."
msgid "Password saved."
msgstr "비밀 번호 저장"
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2678,7 +2694,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "복구"
@@ -2737,11 +2753,11 @@ msgstr "유효한 태그가 아닙니다: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "이용자 셀프 테크 %s - %d 페이지"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "옳지 않은 통지 내용"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2820,7 +2836,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "당신을 위한 태그, (문자,숫자,-, ., _로 구성) 콤마 혹은 공백으로 구분."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "언어"
@@ -2846,7 +2862,7 @@ msgstr "나에게 구독하는 사람에게 자동 구독 신청"
msgid "Bio is too long (max %d chars)."
msgstr "자기소개가 너무 깁니다. (최대 140글자)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "타임존이 설정 되지 않았습니다."
@@ -3154,7 +3170,7 @@ msgid "Same as password above. Required."
msgstr "위와 같은 비밀 번호. 필수 사항."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "이메일"
@@ -3259,7 +3275,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "다른 마이크로블로깅 서비스의 귀하의 프로필 URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "구독"
@@ -3364,6 +3380,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%2$s에서 %1$s까지 메시지"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "당신은 이 사용자에게 메시지를 보낼 수 없습니다."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "프로필 매칭이 없는 사용자"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3379,7 +3405,9 @@ msgstr "당신은 이 사용자에게 메시지를 보낼 수 없습니다."
msgid "User is already sandboxed."
msgstr "회원이 당신을 차단해왔습니다."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3403,7 +3431,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3439,8 +3467,8 @@ msgstr "페이지수"
msgid "Description"
msgstr "설명"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "통계"
@@ -3573,46 +3601,46 @@ msgstr ""
msgid "Group actions"
msgstr "그룹 행동"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s 그룹을 위한 공지피드"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s 그룹을 위한 공지피드"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s 그룹을 위한 공지피드"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s의 보낸쪽지함"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "회원"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(없습니다.)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "모든 회원"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "생성"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3622,7 +3650,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3633,7 +3661,7 @@ msgstr ""
"**%s** 는 %%%%site.name%%%% [마이크로블로깅)(http://en.wikipedia.org/wiki/"
"Micro-blogging)의 사용자 그룹입니다. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "관리자"
@@ -3749,150 +3777,139 @@ msgid "User is already silenced."
msgstr "회원이 당신을 차단해왔습니다."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "유효한 이메일 주소가 아닙니다."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "사이트 공지"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "%s에 포스팅 할 새로운 이메일 주소"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "로컬 뷰"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "언어 설정"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "사이트 공지"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "새로운 메시지입니다."
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "트위터 환경설정을 저장할 수 없습니다."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "사이트 공지"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "사이트 공지"
#: actions/smssettings.php:58
#, fuzzy
@@ -3995,6 +4012,66 @@ msgstr "귀하의 휴대폰의 통신회사는 무엇입니까?"
msgid "No code entered"
msgstr "코드가 입력 되지 않았습니다."
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "주 사이트 네비게이션"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "아바타 설정"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "당신은 이 프로필에 구독되지 않고있습니다."
@@ -4197,7 +4274,7 @@ msgstr "요청한 프로필id가 없습니다."
msgid "Unsubscribed"
msgstr "구독취소 되었습니다."
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4406,16 +4483,22 @@ msgstr "%s 그룹 회원, %d페이지"
msgid "Search for more groups"
msgstr "프로필이나 텍스트 검색"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "당신은 해당 그룹의 멤버가 아닙니다."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%2$s에 있는 %1$s의 업데이트!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4459,7 +4542,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "개인적인"
@@ -4528,23 +4611,23 @@ msgstr "새 URI와 함께 메시지를 업데이트할 수 없습니다."
msgid "DB error inserting hashtag: %s"
msgstr "해쉬테그를 추가 할 때에 데이타베이스 에러 : %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "통지를 저장하는데 문제가 발생했습니다."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "게시글 저장문제. 알려지지않은 회원"
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"너무 많은 게시글이 너무 빠르게 올라옵니다. 한숨고르고 몇분후에 다시 포스트를 "
"해보세요."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4553,20 +4636,20 @@ msgstr ""
"너무 많은 게시글이 너무 빠르게 올라옵니다. 한숨고르고 몇분후에 다시 포스트를 "
"해보세요."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "이 사이트에 게시글 포스팅으로부터 당신은 금지되었습니다."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "통지를 저장하는데 문제가 발생했습니다."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "통지를 저장하는데 문제가 발생했습니다."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4594,7 +4677,12 @@ msgstr "구독하고 있지 않습니다!"
msgid "Couldn't delete self-subscription."
msgstr "예약 구독을 삭제 할 수 없습니다."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "예약 구독을 삭제 할 수 없습니다."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "예약 구독을 삭제 할 수 없습니다."
@@ -4603,20 +4691,20 @@ msgstr "예약 구독을 삭제 할 수 없습니다."
msgid "Welcome to %1$s, @%2$s!"
msgstr "%2$s에서 %1$s까지 메시지"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "새 그룹을 만들 수 없습니다."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "그룹 맴버십을 세팅할 수 없습니다."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "그룹 맴버십을 세팅할 수 없습니다."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "구독을 저장할 수 없습니다."
@@ -4659,195 +4747,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "제목없는 페이지"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "주 사이트 네비게이션"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "개인 프로필과 친구 타임라인"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "개인적인"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "당신의 이메일, 아바타, 비밀 번호, 프로필을 변경하세요."
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "계정"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "서버에 재접속 할 수 없습니다 : %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "연결"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "주 사이트 네비게이션"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "관리자"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "%s에 친구를 가입시키기 위해 친구와 동료를 초대합니다."
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "초대"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "이 사이트로부터 로그아웃"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "로그아웃"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "계정 만들기"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "회원가입"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "이 사이트 로그인"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "로그인"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "도움이 필요해!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "도움말"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "프로필이나 텍스트 검색"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "검색"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "사이트 공지"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "로컬 뷰"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "페이지 공지"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "보조 사이트 네비게이션"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "도움말"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "정보"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "자주 묻는 질문"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "개인정보 취급방침"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "소스 코드"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "연락하기"
-#: lib/action.php:782
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "찔러 보기"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "라코니카 소프트웨어 라이선스"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4856,12 +4937,12 @@ msgstr ""
"**%%site.name%%** 는 [%%site.broughtby%%](%%site.broughtbyurl%%)가 제공하는 "
"마이크로블로깅서비스입니다."
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 는 마이크로블로깅서비스입니다."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4872,54 +4953,54 @@ msgstr ""
"을 사용합니다. StatusNet는 [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html) 라이선스에 따라 사용할 수 있습니다."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "라코니카 소프트웨어 라이선스"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "모든 것"
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "라이선스"
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "페이지수"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "뒷 페이지"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "앞 페이지"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4936,99 +5017,89 @@ msgid "Changes to that panel are not allowed."
msgstr "가입이 허용되지 않습니다."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "명령이 아직 실행되지 않았습니다."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "명령이 아직 실행되지 않았습니다."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "트위터 환경설정을 저장할 수 없습니다."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "이메일 주소 확인서"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "초대"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS 인증"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "개인적인"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS 인증"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "이용자"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS 인증"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "수락"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS 인증"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS 인증"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "개인적인"
+msgid "Edit site notice"
+msgstr "사이트 공지"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS 인증"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5221,12 +5292,12 @@ msgstr "%s가 그룹%s를 떠났습니다."
msgid "Fullname: %s"
msgstr "전체이름: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "위치: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "홈페이지: %s"
@@ -5528,6 +5599,11 @@ msgstr "좁은 리스트에서 태그 선택하기"
msgid "Go"
msgstr "Go "
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "그룹 혹은 토픽의 홈페이지나 블로그 URL"
@@ -5665,11 +5741,11 @@ msgstr "사용자 이름과 비밀번호로 로그인"
msgid "Sign up for a new account"
msgstr "새 계정을 위한 회원가입"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "이메일 주소 확인서"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5686,12 +5762,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s님이 귀하의 알림 메시지를 %2$s에서 듣고 있습니다."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5710,19 +5786,19 @@ msgstr ""
"\n"
"그럼 이만,%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"소개: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "%s에 포스팅 할 새로운 이메일 주소"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5737,21 +5813,21 @@ msgstr ""
"포스팅 주소는 %1$s입니다.새 메시지를 등록하려면 %2$ 주소로 이메일을 보내십시"
"오.이메일 사용법은 %3$s 페이지를 보십시오.안녕히,%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s 상태"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS 인증"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s 사용자가 찔러 봤습니다."
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5767,12 +5843,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "%s로부터 새로운 비밀 메시지가 도착하였습니다."
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5791,12 +5867,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s님이 당신의 게시글을 좋아하는 글로 추가했습니다."
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5817,12 +5893,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6071,10 +6147,6 @@ msgstr "답신"
msgid "Favorites"
msgstr "좋아하는 글들"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "이용자"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "받은 쪽지함"
@@ -6101,7 +6173,7 @@ msgstr "%s의 게시글의 태그"
msgid "Unknown"
msgstr "알려지지 않은 행동"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "구독"
@@ -6109,24 +6181,24 @@ msgstr "구독"
msgid "All subscriptions"
msgstr "모든 예약 구독"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "구독자"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "모든 구독자"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "이용자"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "가입한 때"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "모든 그룹"
@@ -6169,7 +6241,12 @@ msgstr "이 게시글에 대해 답장하기"
msgid "Repeat this notice"
msgstr "이 게시글에 대해 답장하기"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "이 그룹의 회원리스트"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6333,47 +6410,63 @@ msgstr "메시지"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "이용자 프로필"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "관리자"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "몇 초 전"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1분 전"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d분 전"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1시간 전"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d시간 전"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "하루 전"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d일 전"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1달 전"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d달 전"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1년 전"
diff --git a/locale/mk/LC_MESSAGES/statusnet.po b/locale/mk/LC_MESSAGES/statusnet.po
index b80b0c905..74b9cb228 100644
--- a/locale/mk/LC_MESSAGES/statusnet.po
+++ b/locale/mk/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:16+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:24+0000\n"
"Language-Team: Macedonian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: mk\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural= n==1 || n%10==1 ? 0 : 1;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Пристап"
@@ -44,10 +45,9 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
-msgstr "Приватен"
+msgstr "Приватно"
#. TRANS: Checkbox instructions for admin setting "Invite only"
#: actions/accessadminpanel.php:174
@@ -75,7 +75,6 @@ msgid "Save access settings"
msgstr "Зачувај нагодувања на пристап"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Зачувај"
@@ -104,7 +103,7 @@ msgstr "Нема таква страница"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +119,7 @@ msgstr "%1$s и пријателите, стр. %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -184,7 +183,7 @@ msgstr ""
"прочита."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Вие и пријателите"
@@ -211,11 +210,11 @@ msgstr "Подновувања од %1$s и пријатели на %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API методот не е пронајден."
@@ -579,7 +578,7 @@ msgstr ""
"<strong>%3$s</strong> податоците за Вашата %4$s сметка. Треба да дозволувате "
"пристап до Вашата %4$s сметка само на трети страни на кои им верувате."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Сметка"
@@ -668,18 +667,6 @@ msgstr "%1$s / Омилени од %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Подновувања на %1$s омилени на %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Историја на %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Подновувања од %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -690,12 +677,12 @@ msgstr "%1$s / Подновувања кои споменуваат %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s подновувања коишто се одговор на подновувањата од %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Јавна историја на %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s подновуввања од сите!"
@@ -715,7 +702,7 @@ msgstr "Повторувања на %s"
msgid "Notices tagged with %s"
msgstr "Забелешки означени со %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Подновувањата се означени со %1$s на %2$s!"
@@ -757,7 +744,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Корисник без соодветен профил"
@@ -944,7 +931,7 @@ msgid "Conversation"
msgstr "Разговор"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Забелешки"
@@ -963,7 +950,7 @@ msgstr "Не сте сопственик на овој програм."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Се појави проблем со Вашиот сесиски жетон."
@@ -1159,8 +1146,9 @@ msgstr "Врати по основно"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1276,7 +1264,7 @@ msgstr "описот е предолг (максимум %d знаци)"
msgid "Could not update group."
msgstr "Не можев да ја подновам групата."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Не можеше да се создадат алијаси."
@@ -1401,7 +1389,7 @@ msgid "Cannot normalize that email address"
msgstr "Неможам да ја нормализирам таа е-поштенска адреса"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Неправилна адреса за е-пошта."
@@ -1594,6 +1582,22 @@ msgstr "Нема таква податотека."
msgid "Cannot read file."
msgstr "Податотеката не може да се прочита."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Погрешна улога."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Оваа улога е резервирана и не може да се зададе."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Не можете да им доделувате улоги на корисниците на оваа веб-страница."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Корисникот веќе ја има таа улога."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1743,12 +1747,18 @@ msgstr "Направи го/ја администратор"
msgid "Make this user an admin"
msgstr "Направи го корисникот администратор"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Историја на %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Подновувања од членови на %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -2011,7 +2021,6 @@ msgstr "Можете да додадете и лична порака во по
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Испрати"
@@ -2373,8 +2382,8 @@ msgstr "тип на содржини "
msgid "Only "
msgstr "Само "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ова не е поддржан формат на податотека."
@@ -2515,7 +2524,8 @@ msgstr "Не можам да ја зачувам новата лозинка."
msgid "Password saved."
msgstr "Лозинката е зачувана."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Патеки"
@@ -2635,7 +2645,7 @@ msgstr "Директориум на позадината"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Никогаш"
@@ -2691,11 +2701,11 @@ msgstr "Не е важечка ознака за луѓе: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Користници самоозначени со %1$s - стр. %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Неважечка содржина на забелешката"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2777,7 +2787,7 @@ msgstr ""
"Ознаки за Вас самите (букви, бројки, -, . и _), одделени со запирка или "
"празно место"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Јазик"
@@ -2805,7 +2815,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Биографијата е преголема (највеќе до %d знаци)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Не е избрана часовна зона."
@@ -3126,7 +3136,7 @@ msgid "Same as password above. Required."
msgstr "Исто што и лозинката погоре. Задолжително поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Е-пошта"
@@ -3233,7 +3243,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL на Вашиот профил на друга компатибилна служба за микроблогирање."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Претплати се"
@@ -3337,6 +3347,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Одговори на %1$s на %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "На оваа веб-страница не можете да одземате кориснички улоги."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Корисникот ја нема оваа улога."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3349,7 +3367,9 @@ msgstr "Не можете да ставате корисници во песоч
msgid "User is already sandboxed."
msgstr "Корисникот е веќе во песочен режим."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Сесии"
@@ -3373,7 +3393,7 @@ msgstr "Поправка на грешки во сесија"
msgid "Turn on debugging output for sessions."
msgstr "Вклучи извод од поправка на грешки за сесии."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Зачувај нагодувања на веб-страницата"
@@ -3404,8 +3424,8 @@ msgstr "Организација"
msgid "Description"
msgstr "Опис"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Статистики"
@@ -3549,45 +3569,45 @@ msgstr "Алијаси"
msgid "Group actions"
msgstr "Групни дејства"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Канал со забелешки за групата %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Канал со забелешки за групата %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Канал со забелешки за групата%s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF за групата %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Членови"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Нема)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Сите членови"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Создадено"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3603,7 +3623,7 @@ msgstr ""
"се](%%%%action.register%%%%) за да станете дел од оваа група и многу повеќе! "
"([Прочитајте повеќе](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3616,7 +3636,7 @@ msgstr ""
"слободната програмска алатка [StatusNet](http://status.net/). Нејзините "
"членови си разменуваат кратки пораки за нивниот живот и интереси. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Администратори"
@@ -3738,152 +3758,138 @@ msgid "User is already silenced."
msgstr "Корисникот е веќе замолчен."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Основни нагодувања за оваа StatusNet веб-страница."
+msgid "Basic settings for this StatusNet site"
+msgstr "Основни поставки за оваа StatusNet веб-страница."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Должината на името на веб-страницата не може да изнесува нула."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Мора да имате важечка контактна е-поштенска адреса."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Непознат јазик „%s“"
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Неважечки URL за извештај од снимката."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Неважечка вредност на пуштањето на снимката."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Честотата на снимките мора да биде бројка."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минималното ограничување на текстот изнесува 140 знаци."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничувањето на дуплирањето мора да изнесува барем 1 секунда."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Општи"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Име на веб-страницата"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Името на Вашата веб-страница, како на пр. „Микроблог на Вашафирма“"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Овозможено од"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"Текст за врската за наведување на авторите во долната колонцифра на секоја "
"страница"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-адреса на овозможувачот на услугите"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL-адресата која е користи за врски за автори во долната колоцифра на "
"секоја страница"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна е-пошта за Вашата веб-страница"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локално"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Основна часовна зона"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Матична часовна зона за веб-страницата; обично UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Основен јазик"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "По случајност во текот на посета"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Во зададена задача"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снимки од податоци"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Кога да им се испраќаат статистички податоци на status.net серверите"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Честота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ќе се испраќаат снимки на секои N посети"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL на извештајот"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимките ќе се испраќаат на оваа URL-адреса"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr "Јазик на веб-страницата ако прелистувачот не може да го препознае сам"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ограничувања"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ограничување на текстот"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Максимален број на знаци за забелешки."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ограничување на дуплирањето"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Колку долго треба да почекаат корисниците (во секунди) за да можат повторно "
"да го објават истото."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Објава на страница"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Уреди објава за цела веб-страница"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Не можам да ја зачувам објавата за веб-страницата."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Објавата за цела веб-страница не треба да има повеќе од 255 знаци"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Текст на објавата за веб-страницата"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Текст за главна објава по цела веб-страница (највеќе до 255 знаци; дозволено "
+"и HTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Зачувај ја објавава"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Нагодувања за СМС"
@@ -3983,6 +3989,64 @@ msgstr ""
msgid "No code entered"
msgstr "Нема внесено код"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снимки"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Раководење со поставки за снимки"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Неважечка вредност на пуштањето на снимката."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Честотата на снимките мора да биде бројка."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Неважечки URL за извештај од снимката."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "По случајност во текот на посета"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Во зададена задача"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снимки од податоци"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Кога да им се испраќаат статистички податоци на status.net серверите"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Честота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Ќе се испраќаат снимки на секои N посети"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL на извештајот"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снимките ќе се испраќаат на оваа URL-адреса"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Зачувај поставки за снимки"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Не сте претплатени на тој профил."
@@ -4190,7 +4254,7 @@ msgstr "Во барањето нема id на профилот."
msgid "Unsubscribed"
msgstr "Претплатата е откажана"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4200,7 +4264,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Корисник"
@@ -4394,18 +4457,24 @@ msgstr "Групи %1$s, стр. %2$d"
msgid "Search for more groups"
msgstr "Пребарај уште групи"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не членува во ниедна група."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Обидете се со [пребарување на групи](%%action.groupsearch%%) и придружете им "
"се."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Подновувања од %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4461,7 +4530,7 @@ msgstr ""
msgid "Plugins"
msgstr "Приклучоци"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Верзија"
@@ -4527,22 +4596,22 @@ msgstr "Не можев да ја подновам пораката со нов
msgid "DB error inserting hashtag: %s"
msgstr "Грешка во базата на податоци при вметнувањето на хеш-ознака: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблем со зачувувањето на белешката. Премногу долго."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблем со зачувувањето на белешката. Непознат корисник."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Премногу забелњшки за прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4550,19 +4619,19 @@ msgstr ""
"Премногу дуплирани пораки во прекратко време; здивнете малку и продолжете за "
"неколку минути."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Забрането Ви е да објавувате забелешки на оваа веб-страница."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблем во зачувувањето на белешката."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблем при зачувувањето на групното приемно сандаче."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4588,7 +4657,11 @@ msgstr "Не сте претплатени!"
msgid "Couldn't delete self-subscription."
msgstr "Не можам да ја избришам самопретплатата."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Не можете да го избришете OMB-жетонот за претплата."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Претплата не може да се избрише."
@@ -4597,19 +4670,19 @@ msgstr "Претплата не може да се избрише."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добредојдовте на %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Не можев да ја создадам групата."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Не можев да поставам URI на групата."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Не можев да назначам членство во групата."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Не можев да ги зачувам информациите за локалните групи."
@@ -4650,194 +4723,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Страница без наслов"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Главна навигација"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
-msgstr "Личен профил и историја на пријатели"
+msgstr "Личен профил и хронологија на пријатели"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
-msgstr "Личен"
+msgstr "Лично"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Промена на е-пошта, аватар, лозинка, профил"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Сметка"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Поврзи се со услуги"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Поврзи се"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
-msgstr "Промена на конфигурацијата на веб-страницата"
+msgstr "Промена на поставките на веб-страницата"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
-msgstr "Администратор"
+msgstr "Админ"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Поканете пријатели и колеги да Ви се придружат на %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Покани"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Одјава"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
-msgstr "Одјави се"
+msgstr "Одјава"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Создај сметка"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
-msgstr "Регистрирај се"
+msgstr "Регистрација"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Најава"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Најава"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Напомош!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Помош"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пребарајте луѓе или текст"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Барај"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Напомена за веб-страницата"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Локални прегледи"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Напомена за страницата"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Споредна навигација"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Помош"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "За"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧПП"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Услови"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Приватност"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Изворен код"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Значка"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Лиценца на програмот StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4846,12 +4895,12 @@ msgstr ""
"**%%site.name%%** е сервис за микроблогирање што ви го овозможува [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** е сервис за микроблогирање."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4862,57 +4911,57 @@ msgstr ""
"верзија %s, достапен пд [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лиценца на содржините на веб-страницата"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содржината и податоците на %1$s се лични и доверливи."
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Авторските права на содржината и податоците се во сопственост на %1$s. Сите "
"права задржани."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Авторските права на содржината и податоците им припаѓаат на учесниците. Сите "
"права задржани."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Сите "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "лиценца."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Прелом на страници"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "По"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Пред"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Сè уште не е поддржана обработката на оддалечена содржина."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Сè уште не е поддржана обработката на XML содржина."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Сè уште не е достапна обработката на вметната Base64 содржина."
@@ -4927,91 +4976,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Менувањето на тој алатник не е дозволено."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не е имплементирано."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не е имплементирано."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Не можам да ги избришам нагодувањата за изглед."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Основни нагодувања на веб-страницата"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Веб-страница"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Конфигурација на изгледот"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Изглед"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Конфигурација на корисник"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Корисник"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Конфигурација на пристапот"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Пристап"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Конфигурација на патеки"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Патеки"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Конфигурација на сесиите"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Сесии"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Уреди објава за веб-страницата"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Поставки за снимки"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5201,12 +5235,12 @@ msgstr "%s ја напушти групата %s"
msgid "Fullname: %s"
msgstr "Име и презиме: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Локација: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Домашна страница: %s"
@@ -5540,6 +5574,11 @@ msgstr "Одберете ознака за да ја уточните листа
msgid "Go"
msgstr "Оди"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Додели улога „%s“ на корисников"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL на страницата или блогот на групата или темата"
@@ -5677,11 +5716,11 @@ msgstr "Најава со корисничко име и лозинка"
msgid "Sign up for a new account"
msgstr "Создај нова сметка"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Потврдување на адресата"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5711,12 +5750,12 @@ msgstr ""
"Ви благодариме за потрошеното време, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s сега ги следи Вашите забелешки на %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5742,17 +5781,17 @@ msgstr ""
"Изменете си ја е-поштенската адреса или ги нагодувањата за известувања на %8"
"$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Биографија: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Нова е-поштенска адреса за објавување на %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5773,21 +5812,21 @@ msgstr ""
"Со искрена почит,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Статус на %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Потврда за СМС"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s Ве подбуцна"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5814,12 +5853,12 @@ msgstr ""
"Со почит,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Нова приватна порака од %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5852,12 +5891,12 @@ msgstr ""
"Со почит,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) додаде Ваша забелешка како омилена"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5895,12 +5934,12 @@ msgstr ""
"Со искрена почит,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) Ви испрати забелешка што сака да ја прочитате"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6161,10 +6200,6 @@ msgstr "Одговори"
msgid "Favorites"
msgstr "Омилени"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Корисник"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Примени"
@@ -6190,7 +6225,7 @@ msgstr "Ознаки во забелешките на %s"
msgid "Unknown"
msgstr "Непознато"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Претплати"
@@ -6198,23 +6233,23 @@ msgstr "Претплати"
msgid "All subscriptions"
msgstr "Сите претплати"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Претплатници"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Сите претплатници"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Кориснички ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Член од"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Сите групи"
@@ -6254,7 +6289,12 @@ msgstr "Да ја повторам белешкава?"
msgid "Repeat this notice"
msgstr "Повтори ја забелешкава"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Одземи му ја улогата „%s“ на корисников"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Не е зададен корисник за еднокорисничкиот режим."
@@ -6408,47 +6448,61 @@ msgstr "Порака"
msgid "Moderate"
msgstr "Модерирај"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Корисничка улога"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Администратор"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модератор"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "пред неколку секунди"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "пред една минута"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "пред %d минути"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "пред еден час"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "пред %d часа"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "пред еден ден"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "пред %d денови"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "пред еден месец"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "пред %d месеца"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "пред една година"
diff --git a/locale/nb/LC_MESSAGES/statusnet.po b/locale/nb/LC_MESSAGES/statusnet.po
index a3e64e0cb..b687e445e 100644
--- a/locale/nb/LC_MESSAGES/statusnet.po
+++ b/locale/nb/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:19+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-08 21:11:29+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63415); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: no\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Tilgang"
@@ -42,7 +43,6 @@ msgstr "Forhindre anonyme brukere (ikke innlogget) å se nettsted?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privat"
@@ -73,7 +73,6 @@ msgid "Save access settings"
msgstr "Lagre tilgangsinnstillinger"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Lagre"
@@ -102,7 +101,7 @@ msgstr "Ingen slik side"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -118,7 +117,7 @@ msgstr "%1$s og venner, side %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +179,7 @@ msgstr ""
"eller post en notis for å få hans eller hennes oppmerksomhet."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du og venner"
@@ -207,11 +206,11 @@ msgstr "Oppdateringer fra %1$s og venner på %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API-metode ikke funnet!"
@@ -572,7 +571,7 @@ msgstr ""
"<strong>%3$s</strong> dine %4$s-kontodata. Du bør bare gi tilgang til din %4"
"$s-konto til tredjeparter du stoler på."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -659,18 +658,6 @@ msgstr "%1$s / Favoritter fra %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s oppdateringer markert som favoritt av %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidslinje"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Oppdateringar fra %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -681,12 +668,12 @@ msgstr "%1$s / Oppdateringer som nevner %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s offentlig tidslinje"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s oppdateringer fra alle sammen!"
@@ -706,7 +693,7 @@ msgstr "Repetisjoner av %s"
msgid "Notices tagged with %s"
msgstr "Notiser merket med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringer merket med %1$s på %2$s!"
@@ -746,7 +733,7 @@ msgstr "Du kan laste opp en personlig avatar. Maks filstørrelse er %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Bruker uten samsvarende profil"
@@ -932,7 +919,7 @@ msgid "Conversation"
msgstr "Samtale"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notiser"
@@ -951,7 +938,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1105,11 +1092,11 @@ msgstr "Av"
#: actions/designadminpanel.php:474 lib/designsettings.php:156
msgid "Turn background image on or off."
-msgstr ""
+msgstr "Slå på eller av bakgrunnsbilde."
#: actions/designadminpanel.php:479 lib/designsettings.php:161
msgid "Tile background image"
-msgstr ""
+msgstr "Gjenta bakgrunnsbildet"
#: actions/designadminpanel.php:488 lib/designsettings.php:170
msgid "Change colours"
@@ -1147,8 +1134,9 @@ msgstr "Tilbakestill til standardverdier"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1223,7 +1211,7 @@ msgstr "Organisasjon er for lang (maks 255 tegn)."
#: actions/editapplication.php:209 actions/newapplication.php:194
msgid "Organization homepage is required."
-msgstr ""
+msgstr "Hjemmeside for organisasjon kreves."
#: actions/editapplication.php:218 actions/newapplication.php:206
msgid "Callback is too long."
@@ -1234,9 +1222,8 @@ msgid "Callback URL is not valid."
msgstr ""
#: actions/editapplication.php:258
-#, fuzzy
msgid "Could not update application."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke oppdatere programmet."
#: actions/editgroup.php:56
#, php-format
@@ -1265,7 +1252,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Kunne ikke opprette alias."
@@ -1330,11 +1317,11 @@ msgstr "innkommende e-post"
#: actions/emailsettings.php:138 actions/smssettings.php:157
msgid "Send email to this address to post new notices."
-msgstr ""
+msgstr "Send e-post til denne adressen for å poste nye notiser."
#: actions/emailsettings.php:145 actions/smssettings.php:162
msgid "Make a new email address for posting to; cancels the old one."
-msgstr ""
+msgstr "Angi en ny e-postadresse for å poste til; fjerner den gamle."
#: actions/emailsettings.php:148 actions/smssettings.php:164
msgid "New"
@@ -1351,15 +1338,15 @@ msgstr ""
#: actions/emailsettings.php:163
msgid "Send me email when someone adds my notice as a favorite."
-msgstr ""
+msgstr "Send meg en e-post når noen legger min notis til som favoritt."
#: actions/emailsettings.php:169
msgid "Send me email when someone sends me a private message."
-msgstr ""
+msgstr "Send meg en e-post når noen sender meg en privat melding."
#: actions/emailsettings.php:174
msgid "Send me email when someone sends me an \"@-reply\"."
-msgstr ""
+msgstr "Send meg en e-post når noen sender meg et «@-svar»."
#: actions/emailsettings.php:179
msgid "Allow friends to nudge me and send me an email."
@@ -1367,7 +1354,7 @@ msgstr ""
#: actions/emailsettings.php:185
msgid "I want to post notices by email."
-msgstr ""
+msgstr "Jeg vil poste notiser med e-post."
#: actions/emailsettings.php:191
msgid "Publish a MicroID for my email address."
@@ -1387,7 +1374,7 @@ msgid "Cannot normalize that email address"
msgstr "Klarer ikke normalisere epostadressen"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ugyldig e-postadresse."
@@ -1397,12 +1384,12 @@ msgstr "Det er allerede din e-postadresse."
#: actions/emailsettings.php:337
msgid "That email address already belongs to another user."
-msgstr ""
+msgstr "Den e-postadressen tilhører allerede en annen bruker."
#: actions/emailsettings.php:353 actions/imsettings.php:319
#: actions/smssettings.php:337
msgid "Couldn't insert confirmation code."
-msgstr ""
+msgstr "Kunne ikke sette inn bekreftelseskode."
#: actions/emailsettings.php:359
msgid ""
@@ -1437,7 +1424,7 @@ msgstr "Adressen ble fjernet."
#: actions/emailsettings.php:446 actions/smssettings.php:518
msgid "No incoming email address."
-msgstr ""
+msgstr "Ingen innkommende e-postadresse."
#: actions/emailsettings.php:456 actions/emailsettings.php:478
#: actions/smssettings.php:528 actions/smssettings.php:552
@@ -1450,15 +1437,15 @@ msgstr ""
#: actions/emailsettings.php:481 actions/smssettings.php:555
msgid "New incoming email address added."
-msgstr ""
+msgstr "Ny innkommende e-postadresse lagt til."
#: actions/favor.php:79
msgid "This notice is already a favorite!"
-msgstr ""
+msgstr "Denne notisen er allerede en favoritt."
#: actions/favor.php:92 lib/disfavorform.php:140
msgid "Disfavor favorite"
-msgstr ""
+msgstr "Fjern favoritt"
#: actions/favorited.php:65 lib/popularnoticesection.php:91
#: lib/publicgroupnav.php:93
@@ -1518,14 +1505,12 @@ msgid "A selection of some great users on %s"
msgstr ""
#: actions/file.php:34
-#, fuzzy
msgid "No notice ID."
-msgstr "Nytt nick"
+msgstr "Ingen notis-ID."
#: actions/file.php:38
-#, fuzzy
msgid "No notice."
-msgstr "Nytt nick"
+msgstr "Ingen notis."
#: actions/file.php:42
msgid "No attachments."
@@ -1575,22 +1560,38 @@ msgstr "Ingen slik fil."
msgid "Cannot read file."
msgstr "Kan ikke lese fil."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ugyldig rolle."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Denne rollen er reservert og kan ikke stilles inn."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan ikke tildele brukerroller på dette nettstedet."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Bruker har allerede denne rollen."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
msgid "No profile specified."
-msgstr ""
+msgstr "Ingen profil oppgitt."
#: actions/groupblock.php:76 actions/groupunblock.php:76
#: actions/makeadmin.php:76 actions/subedit.php:53 actions/tagother.php:46
#: actions/unsubscribe.php:84 lib/profileformaction.php:77
msgid "No profile with that ID."
-msgstr ""
+msgstr "Ingen profil med den ID'en."
#: actions/groupblock.php:81 actions/groupunblock.php:81
#: actions/makeadmin.php:81
msgid "No group specified."
-msgstr ""
+msgstr "Ingen gruppe oppgitt."
#: actions/groupblock.php:91
msgid "Only an admin can block group members."
@@ -1603,11 +1604,11 @@ msgstr "Du er allerede logget inn!"
#: actions/groupblock.php:100
msgid "User is not a member of group."
-msgstr ""
+msgstr "Bruker er ikke et medlem av gruppa."
#: actions/groupblock.php:136 actions/groupmembers.php:323
msgid "Block user from group"
-msgstr ""
+msgstr "Blokker bruker fra gruppe"
#: actions/groupblock.php:162
#, php-format
@@ -1619,7 +1620,7 @@ msgstr ""
#: actions/groupblock.php:178
msgid "Do not block this user from this group"
-msgstr ""
+msgstr "Ikke blokker denne brukeren fra denne gruppa"
#: actions/groupblock.php:179
msgid "Block this user from this group"
@@ -1718,12 +1719,18 @@ msgstr "Gjør til administrator"
msgid "Make this user an admin"
msgstr "Gjør denne brukeren til administrator"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidslinje"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Oppdateringer fra medlemmer av %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -1962,7 +1969,6 @@ msgstr ""
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Send"
@@ -2029,9 +2035,8 @@ msgid "You must be logged in to join a group."
msgstr "Du må være innlogget for å bli med i en gruppe."
#: actions/joingroup.php:88 actions/leavegroup.php:88
-#, fuzzy
msgid "No nickname or ID."
-msgstr "Ingen kallenavn."
+msgstr "ngen kallenavn eller ID."
#: actions/joingroup.php:141
#, php-format
@@ -2145,28 +2150,28 @@ msgstr "Klarte ikke å lagre avatar-informasjonen"
#: actions/newgroup.php:53
msgid "New group"
-msgstr ""
+msgstr "Ny gruppe"
#: actions/newgroup.php:110
msgid "Use this form to create a new group."
-msgstr ""
+msgstr "Bruk dette skjemaet for å opprette en ny gruppe."
#: actions/newmessage.php:71 actions/newmessage.php:231
msgid "New message"
-msgstr ""
+msgstr "Ny melding"
#: actions/newmessage.php:121 actions/newmessage.php:161 lib/command.php:358
msgid "You can't send a message to this user."
-msgstr ""
+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
msgid "No content!"
-msgstr ""
+msgstr "Inget innhold."
#: actions/newmessage.php:158
msgid "No recipient specified."
-msgstr ""
+msgstr "Ingen mottaker oppgitt."
#: actions/newmessage.php:164 lib/command.php:361
msgid ""
@@ -2175,7 +2180,7 @@ msgstr ""
#: actions/newmessage.php:181
msgid "Message sent"
-msgstr ""
+msgstr "Melding sendt"
#: actions/newmessage.php:185
#, fuzzy, php-format
@@ -2184,15 +2189,15 @@ msgstr "Direktemeldinger til %s"
#: actions/newmessage.php:210 actions/newnotice.php:245 lib/channel.php:170
msgid "Ajax Error"
-msgstr ""
+msgstr "Ajax-feil"
#: actions/newnotice.php:69
msgid "New notice"
-msgstr ""
+msgstr "Ny notis"
#: actions/newnotice.php:211
msgid "Notice posted"
-msgstr ""
+msgstr "Notis postet"
#: actions/noticesearch.php:68
#, php-format
@@ -2307,8 +2312,8 @@ msgstr "innholdstype "
msgid "Only "
msgstr "Bare "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2330,7 +2335,7 @@ msgstr ""
#: actions/othersettings.php:108
msgid " (free service)"
-msgstr ""
+msgstr " (gratis tjeneste)"
#: actions/othersettings.php:116
msgid "Shorten URLs with"
@@ -2451,7 +2456,8 @@ msgstr "Klarer ikke å lagre nytt passord."
msgid "Password saved."
msgstr "Passordet ble lagret"
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2575,7 +2581,7 @@ msgstr ""
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Aldri"
@@ -2629,11 +2635,11 @@ msgstr "Ugyldig e-postadresse"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Mikroblogg av %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2710,7 +2716,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2737,7 +2743,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "«Om meg» er for lang (maks %d tegn)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidssone ikke valgt."
@@ -3041,7 +3047,7 @@ msgid "Same as password above. Required."
msgstr "Samme som passord over. Kreves."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -3143,7 +3149,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3244,6 +3250,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Svar til %1$s på %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du er allerede logget inn!"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Brukeren har ingen profil."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3258,7 +3274,9 @@ msgstr "Du er allerede logget inn!"
msgid "User is already sandboxed."
msgstr "Du er allerede logget inn!"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3282,7 +3300,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3314,8 +3332,8 @@ msgstr "Organisasjon"
msgid "Description"
msgstr "Beskrivelse"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3449,47 +3467,47 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "Klarte ikke å lagre profil."
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Medlem siden"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Opprett"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3499,7 +3517,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3508,7 +3526,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3622,146 +3640,135 @@ msgid "User is already silenced."
msgstr "Du er allerede logget inn!"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ugyldig e-postadresse"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
+msgstr "Foretrukket språk"
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Notiser"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Kunne ikke lagre dine innstillinger for utseende."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Slett notis"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Innstillinger for IM"
#: actions/smssettings.php:58
#, fuzzy
@@ -3860,6 +3867,65 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Innstillinger for IM"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -4060,7 +4126,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4257,16 +4323,22 @@ msgstr "Alle abonnementer"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Du er allerede logget inn!"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Oppdateringar fra %1$s på %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4310,7 +4382,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personlig"
@@ -4378,38 +4450,38 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4436,7 +4508,12 @@ msgstr "Alle abonnementer"
msgid "Couldn't delete self-subscription."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Klarte ikke å lagre avatar-informasjonen"
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr ""
@@ -4445,22 +4522,22 @@ msgstr ""
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Klarte ikke å lagre avatar-informasjonen"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Klarte ikke å lagre avatar-informasjonen"
@@ -4503,191 +4580,174 @@ msgstr "%1$s sin status på %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personlig"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Endre passordet ditt"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Koble til"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Koble til"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
-msgstr "Kun invitasjon"
+msgstr "Inviter"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Tema for nettstedet."
+msgstr "Logg ut fra nettstedet"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Logg ut"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
-msgstr "Opprett en ny konto"
+msgstr "Opprett en konto"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
-msgstr "Registrering"
+msgstr "Registrer"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr "Tema for nettstedet."
+msgstr "Log inn på nettstedet"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Logg inn"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
-msgstr "Hjelp"
+msgstr "Hjelp meg."
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Hjelp"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
-msgstr ""
+msgstr "Søk etter personer eller tekst"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Søk"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hjelp"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS/FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Kilde"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4696,12 +4756,12 @@ msgstr ""
"**%%site.name%%** er en mikrobloggingtjeneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er en mikrobloggingtjeneste. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4709,61 +4769,60 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
-msgstr ""
+msgstr "Alle "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
-msgstr ""
+msgstr "lisens."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
-msgstr ""
+msgstr "Etter"
-#: lib/action.php:1180
-#, fuzzy
+#: lib/action.php:1169
msgid "Before"
-msgstr "Tidligere »"
+msgstr "Før"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
#. TRANS: Client error message
#: lib/adminpanelaction.php:98
msgid "You cannot make changes to this site."
-msgstr ""
+msgstr "Du kan ikke gjøre endringer på dette nettstedet."
#. TRANS: Client error message
#: lib/adminpanelaction.php:110
@@ -4771,89 +4830,79 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Nettstedslogo"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Personlig"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Tilgang"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Personlig"
+msgid "Edit site notice"
+msgstr "Slett notis"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr ""
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5046,12 +5095,12 @@ msgstr "%1$s sin status på %2$s"
msgid "Fullname: %s"
msgstr "Fullt navn"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5354,6 +5403,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5381,31 +5435,30 @@ msgstr ""
#: lib/groupnav.php:85
msgid "Group"
-msgstr ""
+msgstr "Gruppe"
#: lib/groupnav.php:101
msgid "Blocked"
-msgstr ""
+msgstr "Blokkert"
#: lib/groupnav.php:102
#, php-format
msgid "%s blocked users"
-msgstr ""
+msgstr "%s blokkerte brukere"
#: lib/groupnav.php:108
#, php-format
msgid "Edit %s group properties"
-msgstr ""
+msgstr "Rediger %s gruppeegenskaper"
#: lib/groupnav.php:113
-#, fuzzy
msgid "Logo"
-msgstr "Logg ut"
+msgstr "Logo"
#: lib/groupnav.php:114
#, php-format
msgid "Add or edit %s logo"
-msgstr ""
+msgstr "Legg til eller rediger %s logo"
#: lib/groupnav.php:120
#, php-format
@@ -5414,11 +5467,11 @@ msgstr ""
#: lib/groupsbymemberssection.php:71
msgid "Groups with most members"
-msgstr ""
+msgstr "Grupper med flest medlemmer"
#: lib/groupsbypostssection.php:71
msgid "Groups with most posts"
-msgstr ""
+msgstr "Grupper med flest innlegg"
#: lib/grouptagcloudsection.php:56
#, php-format
@@ -5427,81 +5480,76 @@ msgstr ""
#: lib/htmloutputter.php:103
msgid "This page is not available in a media type you accept"
-msgstr ""
+msgstr "Denne siden er ikke tilgjengelig i en mediatype du aksepterer"
#: lib/imagefile.php:75
#, php-format
msgid "That file is too big. The maximum file size is %s."
-msgstr ""
+msgstr "Filen er for stor. Maks filstørrelse er %s."
#: lib/imagefile.php:80
msgid "Partial upload."
-msgstr ""
+msgstr "Delvis opplasting."
#: lib/imagefile.php:88 lib/mediafile.php:170
msgid "System error uploading file."
-msgstr ""
+msgstr "Systemfeil ved opplasting av fil."
#: lib/imagefile.php:96
msgid "Not an image or corrupt file."
-msgstr ""
+msgstr "Ikke et bilde eller en korrupt fil."
#: lib/imagefile.php:109
msgid "Unsupported image file format."
-msgstr ""
+msgstr "Bildefilformatet støttes ikke."
#: lib/imagefile.php:122
-#, fuzzy
msgid "Lost our file."
-msgstr "Klarte ikke å lagre profil."
+msgstr "Mistet filen vår."
#: lib/imagefile.php:166 lib/imagefile.php:231
msgid "Unknown file type"
-msgstr ""
+msgstr "Ukjent filtype"
#: lib/imagefile.php:251
msgid "MB"
-msgstr ""
+msgstr "MB"
#: lib/imagefile.php:253
msgid "kB"
-msgstr ""
+msgstr "kB"
#: lib/jabber.php:220
#, php-format
msgid "[%s]"
-msgstr ""
+msgstr "[%s]"
#: lib/jabber.php:400
#, php-format
msgid "Unknown inbox source %d."
-msgstr ""
+msgstr "Ukjent innbokskilde %d."
#: lib/joinform.php:114
-#, fuzzy
msgid "Join"
-msgstr "Logg inn"
+msgstr "Bli med"
#: lib/leaveform.php:114
-#, fuzzy
msgid "Leave"
-msgstr "Lagre"
+msgstr "Forlat"
#: lib/logingroupnav.php:80
-#, fuzzy
msgid "Login with a username and password"
-msgstr "Ugyldig brukernavn eller passord"
+msgstr "Logg inn med brukernavn og passord"
#: lib/logingroupnav.php:86
-#, fuzzy
msgid "Sign up for a new account"
-msgstr "Opprett en ny konto"
+msgstr "Registrer deg for en ny konto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
-msgstr ""
+msgstr "Bekreftelse av e-postadresse"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5517,14 +5565,26 @@ msgid ""
"Thanks for your time, \n"
"%s\n"
msgstr ""
+"Hei %s.\n"
+"\n"
+"Noen skrev nettopp inn denne e-postadressen på %s.\n"
+"\n"
+"Dersom det var deg og du vil bekrefte det, bruk nettadressen under:\n"
+"\n"
+"%s\n"
+"\n"
+"Om ikke, bare ignorer denne meldingen.\n"
+"\n"
+"Takk for tiden din,\n"
+"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s lytter nå til dine notiser på %2$s."
-#: lib/mail.php:241
-#, fuzzy, php-format
+#: lib/mail.php:245
+#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
"\n"
@@ -5539,22 +5599,26 @@ msgid ""
msgstr ""
"%1$s lytter nå til dine notiser på %2$s.\n"
"\n"
-"\t%3$s\n"
+"%3$s\n"
"\n"
+"%4$s%5$s%6$s\n"
"Vennlig hilsen,\n"
-"%4$s.\n"
+"%7$s.\n"
+"\n"
+"----\n"
+"Endre e-postadressen din eller dine varslingsvalg på %8$s\n"
-#: lib/mail.php:258
-#, fuzzy, php-format
+#: lib/mail.php:262
+#, php-format
msgid "Bio: %s"
-msgstr "Om meg"
+msgstr "Biografi: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
-msgstr ""
+msgstr "Ny e-postadresse for posting til %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5566,22 +5630,30 @@ msgid ""
"Faithfully yours,\n"
"%4$s"
msgstr ""
+"Du har en ny adresse for posting på %1$s.\n"
+"\n"
+"Send e-post til %2$s for å poste nye meldinger.\n"
+"\n"
+"Flere e-postinstrukser på %3$s.\n"
+"\n"
+"Vennlig hilsen,\n"
+"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
-msgstr ""
+msgstr "SMS-bekreftelse"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
-msgstr ""
+msgstr "Du har blitt knuffet av %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5596,13 +5668,24 @@ msgid ""
"With kind regards,\n"
"%4$s\n"
msgstr ""
+"%1$s (%2$s) lurer på hva du gjør nå for tiden og inviterer deg til å poste "
+"noen nyheter.\n"
+"\n"
+"La oss høre fra deg :)\n"
+"\n"
+"%3$s\n"
+"\n"
+"Ikke svar på denne e-posten; det vil ikke nå frem til dem.\n"
+"\n"
+"Med vennlig hilsen,\n"
+"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
-msgstr ""
+msgstr "Ny privat melding fra %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5620,13 +5703,27 @@ msgid ""
"With kind regards,\n"
"%5$s\n"
msgstr ""
+"%1$s (%2$s) sendte deg en privat melding:\n"
+"\n"
+"------------------------------------------------------\n"
+"%3$s\n"
+"------------------------------------------------------\n"
+"\n"
+"Du kan svare på deres melding her:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Ikke svar på denne e-posten; det vil ikke nå frem til dem.\n"
+"\n"
+"Med vennlig hilsen,\n"
+"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
-msgstr ""
+msgstr "%s /@%s) la din notis til som en favoritt"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5646,13 +5743,29 @@ msgid ""
"Faithfully yours,\n"
"%6$s\n"
msgstr ""
+"%1$s (@%7$s) la akkurat din notis fra %2$s til som en av sine favoritter.\n"
+"\n"
+"Nettadressen til din notis er:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Teksten i din notis er:\n"
+"\n"
+"%4$s\n"
+"\n"
+"Du kan se listen over %1$s sine favoritter her:\n"
+"\n"
+"%5$s\n"
+"\n"
+"Vennlig hilsen,\n"
+"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
-msgstr ""
+msgstr "%s (@%s) sendte en notis for din oppmerksomhet"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5666,29 +5779,42 @@ msgid ""
"\t%4$s\n"
"\n"
msgstr ""
+"%1$s (@%9$s) sendte deg akkurat en notis for din oppmerksomhet (et '@-svar') "
+"på %2$s.\n"
+"\n"
+"Notisen er her:\n"
+"\n"
+"%3$s\n"
+"\n"
+"Den lyder:\n"
+"\n"
+"%4$s\n"
+"\n"
#: lib/mailbox.php:89
msgid "Only the user can read their own mailboxes."
-msgstr ""
+msgstr "Bare brukeren kan lese sine egne postbokser."
#: lib/mailbox.php:139
msgid ""
"You have no private messages. You can send private message to engage other "
"users in conversation. People can send you messages for your eyes only."
msgstr ""
+"Du har ingen private meldinger. Du kan sende private meldinger for å "
+"engasjere andre brukere i en samtale. Personer kan sende deg meldinger som "
+"bare du kan se."
#: lib/mailbox.php:227 lib/noticelist.php:482
-#, fuzzy
msgid "from"
msgstr "fra"
#: lib/mailhandler.php:37
msgid "Could not parse message."
-msgstr ""
+msgstr "Kunne ikke tolke meldingen."
#: lib/mailhandler.php:42
msgid "Not a registered user."
-msgstr ""
+msgstr "Ikke en registrert bruker."
#: lib/mailhandler.php:46
msgid "Sorry, that is not your incoming email address."
@@ -5699,9 +5825,9 @@ msgid "Sorry, no incoming email allowed."
msgstr ""
#: lib/mailhandler.php:228
-#, fuzzy, php-format
+#, php-format
msgid "Unsupported message type: %s"
-msgstr "Direktemeldinger til %s"
+msgstr "Meldingstypen støttes ikke: %s"
#: lib/mediafile.php:98 lib/mediafile.php:123
msgid "There was a database error while saving your file. Please try again."
@@ -5731,103 +5857,100 @@ msgstr ""
#: lib/mediafile.php:165
msgid "File upload stopped by extension."
-msgstr ""
+msgstr "Filopplasting stoppet grunnet filendelse."
#: lib/mediafile.php:179 lib/mediafile.php:216
msgid "File exceeds user's quota."
-msgstr ""
+msgstr "Fil overgår brukers kvote."
#: lib/mediafile.php:196 lib/mediafile.php:233
msgid "File could not be moved to destination directory."
-msgstr ""
+msgstr "Filen kunne ikke flyttes til målmappen."
#: lib/mediafile.php:201 lib/mediafile.php:237
-#, fuzzy
msgid "Could not determine file's MIME type."
-msgstr "Klarte ikke å oppdatere bruker."
+msgstr "Kunne ikke avgjøre filens MIME-type."
#: lib/mediafile.php:270
#, php-format
msgid " Try using another %s format."
-msgstr ""
+msgstr " Prøv å bruke et annet %s-format."
#: lib/mediafile.php:275
#, php-format
msgid "%s is not a supported file type on this server."
-msgstr ""
+msgstr "filtypen %s støttes ikke på denne tjeneren."
#: lib/messageform.php:120
msgid "Send a direct notice"
-msgstr ""
+msgstr "Send en direktenotis"
#: lib/messageform.php:146
msgid "To"
-msgstr ""
+msgstr "Til"
#: lib/messageform.php:159 lib/noticeform.php:185
-#, fuzzy
msgid "Available characters"
-msgstr "6 eller flere tegn"
+msgstr "Tilgjengelige tegn"
#: lib/messageform.php:178 lib/noticeform.php:236
-#, fuzzy
msgctxt "Send button for sending notice"
msgid "Send"
msgstr "Send"
#: lib/noticeform.php:160
msgid "Send a notice"
-msgstr ""
+msgstr "Send en notis"
#: lib/noticeform.php:173
#, php-format
msgid "What's up, %s?"
-msgstr ""
+msgstr "Hva skjer %s?"
#: lib/noticeform.php:192
msgid "Attach"
-msgstr ""
+msgstr "Legg ved"
#: lib/noticeform.php:196
msgid "Attach a file"
-msgstr ""
+msgstr "Legg ved en fil"
#: lib/noticeform.php:212
-#, fuzzy
msgid "Share my location"
-msgstr "Klarte ikke å lagre profil."
+msgstr "Del min posisjon"
#: lib/noticeform.php:215
-#, fuzzy
msgid "Do not share my location"
-msgstr "Klarte ikke å lagre profil."
+msgstr "Ikke del min posisjon"
#: lib/noticeform.php:216
msgid ""
"Sorry, retrieving your geo location is taking longer than expected, please "
"try again later"
msgstr ""
+"Beklager, henting av din geoposisjon tar lenger tid enn forventet, prøv "
+"igjen senere"
#: 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"
-msgstr ""
+msgstr "N"
#: lib/noticelist.php:430
msgid "S"
-msgstr ""
+msgstr "S"
#: lib/noticelist.php:431
msgid "E"
-msgstr ""
+msgstr "Ø"
#: lib/noticelist.php:431
msgid "W"
-msgstr ""
+msgstr "V"
#: lib/noticelist.php:438
msgid "at"
@@ -5838,35 +5961,32 @@ msgid "in context"
msgstr ""
#: lib/noticelist.php:601
-#, fuzzy
msgid "Repeated by"
-msgstr "Opprett"
+msgstr "Repetert av"
#: lib/noticelist.php:628
msgid "Reply to this notice"
-msgstr ""
+msgstr "Svar på denne notisen"
#: lib/noticelist.php:629
-#, fuzzy
msgid "Reply"
-msgstr "svar"
+msgstr "Svar"
#: lib/noticelist.php:673
-#, fuzzy
msgid "Notice repeated"
-msgstr "Nytt nick"
+msgstr "Notis repetert"
#: lib/nudgeform.php:116
msgid "Nudge this user"
-msgstr ""
+msgstr "Knuff denne brukeren"
#: lib/nudgeform.php:128
msgid "Nudge"
-msgstr ""
+msgstr "Knuff"
#: lib/nudgeform.php:128
msgid "Send a nudge to this user"
-msgstr ""
+msgstr "Send et knuff til denne brukeren"
#: lib/oauthstore.php:283
msgid "Error inserting new profile"
@@ -5882,7 +6002,7 @@ msgstr ""
#: lib/oauthstore.php:345
msgid "Duplicate notice"
-msgstr ""
+msgstr "Duplikatnotis"
#: lib/oauthstore.php:490
msgid "Couldn't insert new subscription."
@@ -5898,27 +6018,23 @@ msgstr "Svar"
#: lib/personalgroupnav.php:114
msgid "Favorites"
-msgstr ""
-
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
+msgstr "Favoritter"
#: lib/personalgroupnav.php:125
msgid "Inbox"
-msgstr ""
+msgstr "Innboks"
#: lib/personalgroupnav.php:126
msgid "Your incoming messages"
-msgstr ""
+msgstr "Dine innkommende meldinger"
#: lib/personalgroupnav.php:130
msgid "Outbox"
-msgstr ""
+msgstr "Utboks"
#: lib/personalgroupnav.php:131
msgid "Your sent messages"
-msgstr ""
+msgstr "Dine sendte meldinger"
#: lib/personaltagcloudsection.php:56
#, php-format
@@ -5927,36 +6043,35 @@ msgstr ""
#: lib/plugin.php:114
msgid "Unknown"
-msgstr ""
+msgstr "Ukjent"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
-msgstr ""
+msgstr "Abonnement"
#: lib/profileaction.php:126
msgid "All subscriptions"
msgstr "Alle abonnementer"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
-msgstr ""
+msgstr "Abonnenter"
-#: lib/profileaction.php:157
-#, fuzzy
+#: lib/profileaction.php:159
msgid "All subscribers"
-msgstr "Alle abonnementer"
+msgstr "Alle abonnenter"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
-msgstr ""
+msgstr "Bruker-ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem siden"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
-msgstr ""
+msgstr "Alle grupper"
#: lib/profileformaction.php:123
msgid "No return-to arguments."
@@ -5964,16 +6079,15 @@ msgstr ""
#: lib/profileformaction.php:137
msgid "Unimplemented method."
-msgstr ""
+msgstr "Ikke-implementert metode."
#: lib/publicgroupnav.php:78
-#, fuzzy
msgid "Public"
msgstr "Offentlig"
#: lib/publicgroupnav.php:82
msgid "User groups"
-msgstr ""
+msgstr "Brukergrupper"
#: lib/publicgroupnav.php:84 lib/publicgroupnav.php:85
#, fuzzy
@@ -5989,16 +6103,19 @@ msgid "Popular"
msgstr ""
#: lib/repeatform.php:107
-#, fuzzy
msgid "Repeat this notice?"
-msgstr "Kan ikke slette notisen."
+msgstr "Repeter denne notisen?"
#: lib/repeatform.php:132
-#, fuzzy
msgid "Repeat this notice"
-msgstr "Kan ikke slette notisen."
+msgstr "Repeter denne notisen"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6012,38 +6129,36 @@ msgid "Sandbox this user"
msgstr "Kan ikke slette notisen."
#: lib/searchaction.php:120
-#, fuzzy
msgid "Search site"
-msgstr "Søk"
+msgstr "Søk nettsted"
#: lib/searchaction.php:126
msgid "Keyword(s)"
-msgstr ""
+msgstr "Nøkkelord"
#: lib/searchaction.php:127
msgid "Search"
msgstr "Søk"
#: lib/searchaction.php:162
-#, fuzzy
msgid "Search help"
-msgstr "Søk"
+msgstr "Søkehjelp"
#: lib/searchgroupnav.php:80
msgid "People"
-msgstr ""
+msgstr "Personer"
#: lib/searchgroupnav.php:81
msgid "Find people on this site"
-msgstr ""
+msgstr "Finn personer på dette nettstedet"
#: lib/searchgroupnav.php:83
msgid "Find content of notices"
-msgstr ""
+msgstr "Finn innhold i notiser"
#: lib/searchgroupnav.php:85
msgid "Find groups on this site"
-msgstr ""
+msgstr "Finn grupper på dette nettstedet"
#: lib/section.php:89
msgid "Untitled section"
@@ -6051,7 +6166,7 @@ msgstr ""
#: lib/section.php:106
msgid "More..."
-msgstr ""
+msgstr "Mer..."
#: lib/silenceform.php:67
msgid "Silence"
@@ -6079,7 +6194,7 @@ msgstr ""
#: lib/subgroupnav.php:105
msgid "Invite"
-msgstr ""
+msgstr "Inviter"
#: lib/subgroupnav.php:106
#, php-format
@@ -6098,7 +6213,7 @@ msgstr ""
#: lib/tagcloudsection.php:56
msgid "None"
-msgstr ""
+msgstr "Ingen"
#: lib/topposterssection.php:74
msgid "Top posters"
@@ -6140,81 +6255,94 @@ msgid "User actions"
msgstr ""
#: lib/userprofile.php:251
-#, fuzzy
msgid "Edit profile settings"
-msgstr "Endre profilinnstillingene dine"
+msgstr "Endre profilinnstillinger"
#: lib/userprofile.php:252
msgid "Edit"
-msgstr ""
+msgstr "Rediger"
#: lib/userprofile.php:275
msgid "Send a direct message to this user"
-msgstr ""
+msgstr "Send en direktemelding til denne brukeren"
#: lib/userprofile.php:276
msgid "Message"
-msgstr ""
+msgstr "Melding"
#: lib/userprofile.php:314
msgid "Moderate"
-msgstr ""
+msgstr "Moderer"
+
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Brukerrolle"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrator"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderator"
-#: lib/util.php:1013
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "noen få sekunder siden"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent ett minutt siden"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "omtrent %d minutter siden"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent én time siden"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "omtrent %d timer siden"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent én dag siden"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "omtrent %d dager siden"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent én måned siden"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "omtrent %d måneder siden"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent ett år siden"
#: lib/webcolor.php:82
#, php-format
msgid "%s is not a valid color!"
-msgstr ""
+msgstr "%s er ikke en gyldig farge."
#: lib/webcolor.php:123
#, php-format
msgid "%s is not a valid color! Use 3 or 6 hex chars."
-msgstr ""
+msgstr "%s er ikke en gyldig farge. Bruk 3 eller 6 heksadesimale tegn."
#: lib/xmppmanager.php:402
#, php-format
msgid "Message too long - maximum is %1$d characters, you sent %2$d."
-msgstr ""
+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 a9e757956..c73771f84 100644
--- a/locale/nl/LC_MESSAGES/statusnet.po
+++ b/locale/nl/LC_MESSAGES/statusnet.po
@@ -10,19 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:32+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:33+0000\n"
"Language-Team: Dutch\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nl\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Toegang"
@@ -43,10 +44,9 @@ msgstr "Mogen anonieme gebruikers (niet aangemeld) de website bekijken?"
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
-msgstr "Privé"
+msgstr "Geen anonieme toegang"
#. TRANS: Checkbox instructions for admin setting "Invite only"
#: actions/accessadminpanel.php:174
@@ -74,7 +74,6 @@ msgid "Save access settings"
msgstr "Toegangsinstellingen opslaan"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Opslaan"
@@ -103,7 +102,7 @@ msgstr "Deze pagina bestaat niet"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -119,7 +118,7 @@ msgstr "%1$s en vrienden, pagina %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -183,7 +182,7 @@ msgstr ""
"een bericht sturen."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "U en vrienden"
@@ -210,11 +209,11 @@ msgstr "Updates van %1$s en vrienden op %2$s."
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "De API-functie is niet aangetroffen."
@@ -589,7 +588,7 @@ msgstr ""
"van het type \"<strong>%3$s</strong> tot uw gebruikersgegevens. Geef alleen "
"toegang tot uw gebruiker bij %4$s aan derde partijen die u vertrouwt."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Gebruiker"
@@ -678,18 +677,6 @@ msgstr "%1$s / Favorieten van %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s updates op de favorietenlijst geplaatst door %2$s / %3$s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tijdlijn"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Updates van %1$s op %2$s."
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -700,12 +687,12 @@ msgstr "%1$s / Updates over %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s publieke tijdlijn"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s updates van iedereen"
@@ -725,7 +712,7 @@ msgstr "Herhaald van %s"
msgid "Notices tagged with %s"
msgstr "Mededelingen met het label %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 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!"
@@ -766,7 +753,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Gebruiker zonder bijbehorend profiel"
@@ -953,7 +940,7 @@ msgid "Conversation"
msgstr "Dialoog"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Mededelingen"
@@ -972,7 +959,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Er is een probleem met uw sessietoken."
@@ -1169,8 +1156,9 @@ msgstr "Standaardinstellingen toepassen"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1286,7 +1274,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Het was niet mogelijk de aliassen aan te maken."
@@ -1410,7 +1398,7 @@ msgid "Cannot normalize that email address"
msgstr "Kan het emailadres niet normaliseren"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geen geldig e-mailadres."
@@ -1608,6 +1596,22 @@ msgstr "Het bestand bestaat niet."
msgid "Cannot read file."
msgstr "Het bestand kon niet gelezen worden."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ongeldige rol."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Deze rol is gereserveerd en kan niet ingesteld worden."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Op deze website kunt u geen gebruikersrollen toekennen."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Deze gebruiker heeft deze rol al."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1757,12 +1761,18 @@ msgstr "Beheerder maken"
msgid "Make this user an admin"
msgstr "Deze gebruiker beheerder maken"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tijdlijn"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Updates voor leden van %1$s op %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Groepen"
@@ -2027,7 +2037,6 @@ msgstr "Persoonlijk bericht bij de uitnodiging (optioneel)."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Verzenden"
@@ -2392,8 +2401,8 @@ msgstr "inhoudstype "
msgid "Only "
msgstr "Alleen "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Geen ondersteund gegevensformaat."
@@ -2532,7 +2541,8 @@ msgstr "Het was niet mogelijk het nieuwe wachtwoord op te slaan."
msgid "Password saved."
msgstr "Het wachtwoord is opgeslagen."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Paden"
@@ -2652,7 +2662,7 @@ msgstr "Achtergrondenmap"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nooit"
@@ -2708,11 +2718,11 @@ msgstr "Geen geldig gebruikerslabel: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Gebruikers die zichzelf met %1$s hebben gelabeld - pagina %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ongeldige mededelinginhoud"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2794,7 +2804,7 @@ msgstr ""
"Eigen labels (letter, getallen, -, ., en _). Gescheiden door komma's of "
"spaties"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Taal"
@@ -2822,7 +2832,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "De beschrijving is te lang (maximaal %d tekens)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Er is geen tijdzone geselecteerd."
@@ -3147,7 +3157,7 @@ msgid "Same as password above. Required."
msgstr "Gelijk aan het wachtwoord hierboven. Verplicht"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3254,7 +3264,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "De URL van uw profiel bij een andere, compatibele microblogdienst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abonneren"
@@ -3358,6 +3368,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Antwoorden aan %1$s op %2$s."
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "U kunt geen gebruikersrollen intrekken op deze website."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Deze gebruiker heeft deze rol niet."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3370,7 +3388,9 @@ msgstr "Op deze website kunt u gebruikers niet in de zandbak plaatsen."
msgid "User is already sandboxed."
msgstr "Deze gebruiker is al in de zandbak geplaatst."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessies"
@@ -3394,7 +3414,7 @@ msgstr "Sessies debuggen"
msgid "Turn on debugging output for sessions."
msgstr "Debuguitvoer voor sessies inschakelen."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Websiteinstellingen opslaan"
@@ -3425,8 +3445,8 @@ msgstr "Organisatie"
msgid "Description"
msgstr "Beschrijving"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistieken"
@@ -3570,45 +3590,45 @@ msgstr "Aliassen"
msgid "Group actions"
msgstr "Groepshandelingen"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Mededelingenfeed voor groep %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Mededelingenfeed voor groep %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Vriend van een vriend voor de groep %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Leden"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(geen)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle leden"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Aangemaakt"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3624,7 +3644,7 @@ msgstr ""
"lid te worden van deze groep en nog veel meer! [Meer lezen...](%%%%doc.help%%"
"%%)"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3637,7 +3657,7 @@ msgstr ""
"[StatusNet](http://status.net/). De leden wisselen korte mededelingen uit "
"over hun ervaringen en interesses. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Beheerders"
@@ -3760,154 +3780,141 @@ msgid "User is already silenced."
msgstr "Deze gebruiker is al gemuilkorfd."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Basisinstellingen voor deze StatusNet-website."
+msgid "Basic settings for this StatusNet site"
+msgstr "Basisinstellingen voor deze StatusNet-website"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "De sitenaam moet ingevoerd worden en mag niet leeg zijn."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
"U moet een geldig e-mailadres opgeven waarop contact opgenomen kan worden."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "De taal \"%s\" is niet bekend."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "De rapportage-URL voor snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "De waarde voor het uitvoeren van snapshots is ongeldig."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "De snapshotfrequentie moet een getal zijn."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "De minimale tekstlimiet is 140 tekens."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "De duplicaatlimiet moet één of meer seconden zijn."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Algemeen"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Websitenaam"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "De naam van de website, zoals \"UwBedrijf Microblog\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Mogelijk gemaakt door"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"De tekst die gebruikt worden in de \"creditsverwijzing\" in de voettekst van "
"iedere pagina"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "\"Mogelijk gemaakt door\"-URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL die wordt gebruikt voor de verwijzing naar de hoster en dergelijke in de "
"voettekst van iedere pagina"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "E-mailadres om contact op te nemen met de websitebeheerder"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokaal"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standaardtijdzone"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standaardtijdzone voor de website. Meestal UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr "Standaardtaal"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Snapshots"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Willekeurig tijdens een websitehit"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Als geplande taak"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Snapshots van gegevens"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-"Wanneer statistische gegevens naar de status.net-servers verzonden worden"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentie"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Iedere zoveel websitehits wordt een snapshot verzonden"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Rapportage-URL"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Snapshots worden naar deze URL verzonden"
+"De taal voor de website als deze niet uit de browserinstellingen opgemaakt "
+"kan worden"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limieten"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Tekstlimiet"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximaal aantal te gebruiken tekens voor mededelingen."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplicaatlimiet"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Hoe lang gebruikers moeten wachten (in seconden) voor ze hetzelfde kunnen "
"zenden."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Websitebrede mededeling"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Websitebrede mededeling bewerken"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Het was niet mogelijk om de websitebrede mededeling op te slaan."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "De maximale lengte voor de websitebrede aankondiging is 255 tekens"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Tekst voor websitebrede mededeling"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Tekst voor websitebrede aankondiging (maximaal 255 tekens - HTML is "
+"toegestaan)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Websitebrede mededeling opslaan"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS-instellingen"
@@ -4007,6 +4014,65 @@ msgstr ""
msgid "No code entered"
msgstr "Er is geen code ingevoerd"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Snapshots"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Snapshotinstellingen beheren"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "De waarde voor het uitvoeren van snapshots is ongeldig."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "De snapshotfrequentie moet een getal zijn."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "De rapportage-URL voor snapshots is ongeldig."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Willekeurig tijdens een websitehit"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Als geplande taak"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Snapshots van gegevens"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+"Wanneer statistische gegevens naar de status.net-servers verzonden worden"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentie"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Iedere zoveel websitehits wordt een snapshot verzonden"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Rapportage-URL"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Snapshots worden naar deze URL verzonden"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Snapshotinstellingen opslaan"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "U bent niet geabonneerd op dat profiel."
@@ -4218,7 +4284,7 @@ msgstr "Het profiel-ID was niet aanwezig in het verzoek."
msgid "Unsubscribed"
msgstr "Het abonnement is opgezegd"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4228,7 +4294,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Gebruiker"
@@ -4423,17 +4488,23 @@ msgstr "Groepen voor %1$s, pagina %2$d"
msgid "Search for more groups"
msgstr "Meer groepen zoeken"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s is van geen enkele groep lid."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"U kunt [naar groepen zoeken](%%action.groupsearch%%) en daar lid van worden."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Updates van %1$s op %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4489,7 +4560,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plug-ins"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versie"
@@ -4556,26 +4627,26 @@ msgstr "Het was niet mogelijk het bericht bij te werken met de nieuwe URI."
msgid "DB error inserting hashtag: %s"
msgstr "Er is een databasefout opgetreden bij de invoer van de hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van de mededeling. Deze is te "
"lang."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
"Er was een probleem bij het opslaan van de mededeling. De gebruiker is "
"onbekend."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"U hebt te snel te veel mededelingen verstuurd. Kom even op adem en probeer "
"het over enige tijd weer."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4583,22 +4654,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:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
"U bent geblokkeerd en mag geen mededelingen meer achterlaten op deze site."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Er is een probleem opgetreden bij het opslaan van de mededeling."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
"Er is een probleem opgetreden bij het opslaan van het Postvak IN van de "
"groep."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4623,7 +4694,12 @@ msgstr "Niet geabonneerd!"
msgid "Couldn't delete self-subscription."
msgstr "Het was niet mogelijk het abonnement op uzelf te verwijderen."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr ""
+"Het was niet mogelijk om het OMB-token voor het abonnement te verwijderen."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Kon abonnement niet verwijderen."
@@ -4632,19 +4708,19 @@ msgstr "Kon abonnement niet verwijderen."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Welkom bij %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Het was niet mogelijk de groep aan te maken."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Het was niet mogelijk de groeps-URI in te stellen."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Het was niet mogelijk het groepslidmaatschap in te stellen."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Het was niet mogelijk de lokale groepsinformatie op te slaan."
@@ -4685,194 +4761,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Naamloze pagina"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primaire sitenavigatie"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Persoonlijk profiel en tijdlijn van vrienden"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Persoonlijk"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Uw e-mailadres, avatar, wachtwoord of profiel wijzigen"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Gebruiker"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
-msgstr "Met diensten verbinden"
+msgstr "Met andere diensten koppelen"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Koppelen"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Websiteinstellingen wijzigen"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
-msgstr "Beheerder"
+msgstr "Beheer"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Vrienden en collega's uitnodigen om u te vergezellen op %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
-msgstr "Uitnodigen"
+msgstr "Uitnodigingen"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
-msgstr "Van de site afmelden"
+msgstr "Gebruiker afmelden"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Afmelden"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Gebruiker aanmaken"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Registreren"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
-msgstr "Bij de site aanmelden"
+msgstr "Gebruiker aanmelden"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Aanmelden"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Help me!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Help"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Naar gebruikers of tekst zoeken"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Zoeken"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Mededeling van de website"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale weergaven"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Mededeling van de pagina"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Secundaire sitenavigatie"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Help"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Over"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Veel gestelde vragen"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Gebruiksvoorwaarden"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacy"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Broncode"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contact"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Widget"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licentie van de StatusNet-software"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4881,12 +4933,12 @@ msgstr ""
"**%%site.name%%** is een microblogdienst van [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** is een microblogdienst. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4897,57 +4949,57 @@ msgstr ""
"versie %s, beschikbaar onder de [GNU Affero General Public License](http://"
"www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licentie voor siteinhoud"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij %1$s. Alle rechten "
"voorbehouden."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Auteursrechten op inhoud en gegevens rusten bij de respectievelijke "
"gebruikers. Alle rechten voorbehouden."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Alle "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licentie."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Later"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Eerder"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Het is nog niet mogelijk inhoud uit andere omgevingen te verwerken."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Het is nog niet mogelijk ingebedde XML-inhoud te verwerken"
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Het is nog niet mogelijk ingebedde Base64-inhoud te verwerken"
@@ -4962,91 +5014,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Wijzigingen aan dat venster zijn niet toegestaan."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() is niet geïmplementeerd."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() is nog niet geïmplementeerd."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Het was niet mogelijk om de ontwerpinstellingen te verwijderen."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Basisinstellingen voor de website"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Website"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Instellingen vormgeving"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Uiterlijk"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Gebruikersinstellingen"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Gebruiker"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Toegangsinstellingen"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Toegang"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Padinstellingen"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Paden"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Sessieinstellingen"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessies"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Websitebrede mededeling opslaan"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Snapshotinstellingen"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5237,12 +5274,12 @@ msgstr "%s heeft de groep %s verlaten"
msgid "Fullname: %s"
msgstr "Volledige naam: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Locatie: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Thuispagina: %s"
@@ -5584,6 +5621,11 @@ msgstr "Kies een label om de lijst kleiner te maken"
msgid "Go"
msgstr "OK"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Deze gebruiker de rol \"%s\" geven"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "De URL van de thuispagina of de blog van de groep of het onderwerp"
@@ -5721,11 +5763,11 @@ msgstr "Aanmelden met gebruikersnaam en wachtwoord"
msgid "Sign up for a new account"
msgstr "Nieuwe gebruiker aanmaken"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "E-mailadresbevestiging"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5755,12 +5797,12 @@ msgstr ""
"Dank u wel voor uw tijd.\n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s volgt nu uw berichten %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5785,17 +5827,17 @@ msgstr ""
"----\n"
"Wijzig uw e-mailadres of instellingen op %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Beschrijving: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nieuw e-mailadres om e-mail te versturen aan %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5816,21 +5858,21 @@ msgstr ""
"Met vriendelijke groet,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS-bevestiging"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s heeft u gepord"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5858,12 +5900,12 @@ msgstr ""
"Met vriendelijke groet,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "U hebt een nieuw privébericht van %s."
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5897,12 +5939,12 @@ msgstr ""
"Met vriendelijke groet,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) heeft uw mededeling als favoriet toegevoegd"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5940,12 +5982,12 @@ msgstr ""
"Met vriendelijke groet,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) heeft u een mededeling gestuurd"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6205,10 +6247,6 @@ msgstr "Antwoorden"
msgid "Favorites"
msgstr "Favorieten"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Gebruiker"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Postvak IN"
@@ -6234,7 +6272,7 @@ msgstr "Labels in de mededelingen van %s"
msgid "Unknown"
msgstr "Onbekend"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonnementen"
@@ -6242,23 +6280,23 @@ msgstr "Abonnementen"
msgid "All subscriptions"
msgstr "Alle abonnementen"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abonnees"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alle abonnees"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Gebruikers-ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Lid sinds"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle groepen"
@@ -6298,7 +6336,12 @@ msgstr "Deze mededeling herhalen?"
msgid "Repeat this notice"
msgstr "Deze mededeling herhalen"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "De gebruikersrol \"%s\" voor deze gebruiker intrekken"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Er is geen gebruiker gedefinieerd voor single-usermodus."
@@ -6452,47 +6495,61 @@ msgstr "Bericht"
msgid "Moderate"
msgstr "Modereren"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Gebruikersrol"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Beheerder"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderator"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "een paar seconden geleden"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ongeveer een minuut geleden"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "ongeveer %d minuten geleden"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ongeveer een uur geleden"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "ongeveer %d uur geleden"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ongeveer een dag geleden"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "ongeveer %d dagen geleden"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ongeveer een maand geleden"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "ongeveer %d maanden geleden"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ongeveer een jaar geleden"
diff --git a/locale/nn/LC_MESSAGES/statusnet.po b/locale/nn/LC_MESSAGES/statusnet.po
index ddd183e87..a16e15649 100644
--- a/locale/nn/LC_MESSAGES/statusnet.po
+++ b/locale/nn/LC_MESSAGES/statusnet.po
@@ -7,19 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:22+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:30+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: nn\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Godta"
@@ -107,7 +108,7 @@ msgstr "Dette emneord finst ikkje."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +124,7 @@ msgstr "%s med vener, side %d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -178,7 +179,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s med vener"
@@ -206,11 +207,11 @@ msgstr "Oppdateringar frå %1$s og vener på %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Fann ikkje API-metode."
@@ -581,7 +582,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -673,18 +674,6 @@ msgstr "%s / Favorittar frå %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s oppdateringar favorisert av %s / %s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidsline"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Oppdateringar frå %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -695,12 +684,12 @@ msgstr "%1$s / Oppdateringar som svarar til %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s offentleg tidsline"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s oppdateringar frå alle saman!"
@@ -720,7 +709,7 @@ msgstr "Svar til %s"
msgid "Notices tagged with %s"
msgstr "Notisar merka med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Oppdateringar frå %1$s på %2$s!"
@@ -761,7 +750,7 @@ msgstr "Du kan laste opp ein personleg avatar."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Kan ikkje finne brukar"
@@ -952,7 +941,7 @@ msgid "Conversation"
msgstr "Stadfestingskode"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notisar"
@@ -974,7 +963,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Det var eit problem med sesjons billetten din."
@@ -1182,8 +1171,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1311,7 +1301,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Kunne ikkje lagre favoritt."
@@ -1438,7 +1428,7 @@ msgid "Cannot normalize that email address"
msgstr "Klarar ikkje normalisera epostadressa"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Ikkje ei gyldig epostadresse."
@@ -1634,6 +1624,25 @@ msgstr "Denne notisen finst ikkje."
msgid "Cannot read file."
msgstr "Mista fila vår."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Ugyldig storleik."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan ikkje sende melding til denne brukaren."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Brukar har blokkert deg."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1789,12 +1798,18 @@ msgstr "Administrator"
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidsline"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Oppdateringar frå %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -2408,8 +2423,8 @@ msgstr "Kopla til"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ikkje eit støtta dataformat."
@@ -2555,7 +2570,8 @@ msgstr "Klarar ikkje lagra nytt passord."
msgid "Password saved."
msgstr "Lagra passord."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2683,7 +2699,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Gjenopprett"
@@ -2742,11 +2758,11 @@ msgstr "Ikkje gyldig merkelapp: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Brukarar sjølv-merka med %s, side %d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ugyldig notisinnhald"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2828,7 +2844,7 @@ msgstr ""
"merkelappar for deg sjølv ( bokstavar, nummer, -, ., og _ ), komma eller "
"mellomroms separert."
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2855,7 +2871,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "«Om meg» er for lang (maks 140 "
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidssone er ikkje valt."
@@ -3164,7 +3180,7 @@ msgid "Same as password above. Required."
msgstr "Samme som passord over. Påkrevd."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Epost"
@@ -3272,7 +3288,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL til profilsida di på ei anna kompatibel mikrobloggingteneste."
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Ting"
@@ -3377,6 +3393,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Melding til %1$s på %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kan ikkje sende melding til denne brukaren."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Kan ikkje finne brukar"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3392,7 +3418,9 @@ msgstr "Du kan ikkje sende melding til denne brukaren."
msgid "User is already sandboxed."
msgstr "Brukar har blokkert deg."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3416,7 +3444,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3452,8 +3480,8 @@ msgstr "Paginering"
msgid "Description"
msgstr "Beskriving"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistikk"
@@ -3586,46 +3614,46 @@ msgstr ""
msgid "Group actions"
msgstr "Gruppe handlingar"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Notisstraum for %s gruppa"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Utboks for %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alle medlemmar"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Lag"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3635,7 +3663,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3646,7 +3674,7 @@ msgstr ""
"**%s** er ei brukargruppe på %%%%site.name%%%%, ei [mikroblogging](http://en."
"wikipedia.org/wiki/Micro-blogging)-teneste"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "Administrator"
@@ -3762,150 +3790,139 @@ msgid "User is already silenced."
msgstr "Brukar har blokkert deg."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Ikkje ei gyldig epostadresse"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Statusmelding"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Ny epostadresse for å oppdatera %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Lokale syningar"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Foretrukke språk"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Ny melding"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Statusmelding"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Statusmelding"
#: actions/smssettings.php:58
#, fuzzy
@@ -4009,6 +4026,66 @@ msgstr ""
msgid "No code entered"
msgstr "Ingen innskriven kode"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Navigasjon for hovudsida"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Avatar-innstillingar"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du tingar ikkje oppdateringar til den profilen."
@@ -4214,7 +4291,7 @@ msgstr "Ingen profil-ID i førespurnaden."
msgid "Unsubscribed"
msgstr "Fjerna tinging"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4425,16 +4502,22 @@ msgstr "%s medlemmar i gruppa, side %d"
msgid "Search for more groups"
msgstr "Søk etter folk eller innhald"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Du er ikkje medlem av den gruppa."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Oppdateringar frå %1$s på %2$s!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4478,7 +4561,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Personleg"
@@ -4547,22 +4630,22 @@ msgstr "Kunne ikkje oppdatere melding med ny URI."
msgid "DB error inserting hashtag: %s"
msgstr "databasefeil ved innsetjing av skigardmerkelapp (#merkelapp): %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Feil ved lagring av notis. Ukjend brukar."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
@@ -4570,20 +4653,20 @@ msgid ""
msgstr ""
"For mange notisar for raskt; tek ei pause, og prøv igjen om eit par minutt."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Du kan ikkje lengre legge inn notisar på denne sida."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Eit problem oppstod ved lagring av notis."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4611,7 +4694,12 @@ msgstr "Ikkje tinga."
msgid "Couldn't delete self-subscription."
msgstr "Kan ikkje sletta tinging."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Kan ikkje sletta tinging."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Kan ikkje sletta tinging."
@@ -4620,20 +4708,20 @@ msgstr "Kan ikkje sletta tinging."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Melding til %1$s på %2$s"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Kunne ikkje laga gruppa."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Kunne ikkje bli med i gruppa."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Kunne ikkje bli med i gruppa."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Kunne ikkje lagra abonnement."
@@ -4676,195 +4764,188 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Ingen tittel"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navigasjon for hovudsida"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personleg profil og oversyn over vener"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Personleg"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Endra e-posten, avataren, passordet eller profilen"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Klarte ikkje å omdirigera til tenaren: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Kopla til"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Navigasjon for hovudsida"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Inviter vennar og kollega til å bli med deg på %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Invitér"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logg ut or sida"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Logg ut"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Opprett ny konto"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrér"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Logg inn or sida"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Logg inn"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjelp meg!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Hjelp"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Søk etter folk eller innhald"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Søk"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Statusmelding"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokale syningar"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidenotis"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Andrenivås side navigasjon"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hjelp"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "OSS"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Personvern"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Kjeldekode"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Dult"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4873,12 +4954,12 @@ msgstr ""
"**%%site.name%%** er ei mikrobloggingteneste av [%%site.broughtby%%](%%site."
"broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** er ei mikrobloggingteneste. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4889,54 +4970,54 @@ msgstr ""
"%s, tilgjengeleg under [GNU Affero General Public License](http://www.fsf."
"org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNets programvarelisens"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Alle"
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "lisens."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginering"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "« Etter"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Før »"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4953,99 +5034,89 @@ msgid "Changes to that panel are not allowed."
msgstr "Registrering ikkje tillatt."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "Kommando ikkje implementert."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "Kommando ikkje implementert."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Klarte ikkje å lagra Twitter-innstillingane dine!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Stadfesting av epostadresse"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Invitér"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS bekreftelse"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Personleg"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS bekreftelse"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Brukar"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS bekreftelse"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Godta"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS bekreftelse"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS bekreftelse"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Personleg"
+msgid "Edit site notice"
+msgstr "Statusmelding"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS bekreftelse"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5238,12 +5309,12 @@ msgstr "%s forlot %s gruppa"
msgid "Fullname: %s"
msgstr "Fullt namn: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Stad: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Heimeside: %s"
@@ -5548,6 +5619,11 @@ msgstr "Velg ein merkelapp for å begrense lista"
msgid "Go"
msgstr "Gå"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL til heimesida eller bloggen for gruppa eller emnet"
@@ -5685,11 +5761,11 @@ msgstr "Log inn med brukarnamn og passord."
msgid "Sign up for a new account"
msgstr "Opprett ny konto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Stadfesting av epostadresse"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5706,12 +5782,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s høyrer no på notisane dine på %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5732,19 +5808,19 @@ msgstr ""
"Beste helsing,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"Bio: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Ny epostadresse for å oppdatera %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5764,21 +5840,21 @@ msgstr ""
"\n"
"Helsing frå %4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS bekreftelse"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Du har blitt dulta av %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5794,12 +5870,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Ny privat melding fra %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5818,12 +5894,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s la til di melding som ein favoritt"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5844,12 +5920,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6098,10 +6174,6 @@ msgstr "Svar"
msgid "Favorites"
msgstr "Favorittar"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Brukar"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Innboks"
@@ -6128,7 +6200,7 @@ msgstr "Merkelappar i %s sine notisar"
msgid "Unknown"
msgstr "Uventa handling."
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tingingar"
@@ -6136,24 +6208,24 @@ msgstr "Tingingar"
msgid "All subscriptions"
msgstr "Alle tingingar"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Tingarar"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Tingarar"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "Brukar"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem sidan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alle gruppar"
@@ -6196,7 +6268,12 @@ msgstr "Svar på denne notisen"
msgid "Repeat this notice"
msgstr "Svar på denne notisen"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Ei liste over brukarane i denne gruppa."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6360,47 +6437,63 @@ msgstr "Melding"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Brukarprofil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrator"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "eit par sekund sidan"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "omtrent eitt minutt sidan"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "~%d minutt sidan"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "omtrent ein time sidan"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "~%d timar sidan"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "omtrent ein dag sidan"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "~%d dagar sidan"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "omtrent ein månad sidan"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "~%d månadar sidan"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "omtrent eitt år sidan"
diff --git a/locale/pl/LC_MESSAGES/statusnet.po b/locale/pl/LC_MESSAGES/statusnet.po
index a8cef8d36..3a0bd39c3 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:35+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:36+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish <pl@li.org>\n"
"MIME-Version: 1.0\n"
@@ -19,13 +19,14 @@ 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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Dostęp"
@@ -46,7 +47,6 @@ msgstr "Zabronić anonimowym użytkownikom (niezalogowanym) przeglądać witryn
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Prywatna"
@@ -77,7 +77,6 @@ msgid "Save access settings"
msgstr "Zapisz ustawienia dostępu"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Zapisz"
@@ -106,7 +105,7 @@ msgstr "Nie ma takiej strony"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -122,7 +121,7 @@ msgstr "%1$s i przyjaciele, strona %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -186,7 +185,7 @@ msgstr ""
"szturchniesz użytkownika %s lub wyślesz wpis wymagającego jego uwagi."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ty i przyjaciele"
@@ -213,11 +212,11 @@ msgstr "Aktualizacje z %1$s i przyjaciół na %2$s."
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Nie odnaleziono metody API."
@@ -579,7 +578,7 @@ msgstr ""
"uzyskać możliwość <strong>%3$s</strong> danych konta %4$s. Dostęp do konta %4"
"$s powinien być udostępniany tylko zaufanym osobom trzecim."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -666,18 +665,6 @@ msgstr "%1$s/ulubione wpisy od %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Użytkownik %1$s aktualizuje ulubione według %2$s/%2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Oś czasu użytkownika %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Aktualizacje z %1$s na %2$s."
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -688,12 +675,12 @@ msgstr "%1$s/aktualizacje wspominające %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Publiczna oś czasu użytkownika %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Użytkownik %s aktualizuje od każdego."
@@ -713,7 +700,7 @@ msgstr "Powtórzenia %s"
msgid "Notices tagged with %s"
msgstr "Wpisy ze znacznikiem %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Aktualizacje ze znacznikiem %1$s na %2$s."
@@ -753,7 +740,7 @@ msgstr "Można wysłać osobisty awatar. Maksymalny rozmiar pliku to %s."
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Użytkownik bez odpowiadającego profilu"
@@ -939,7 +926,7 @@ msgid "Conversation"
msgstr "Rozmowa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Wpisy"
@@ -958,7 +945,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Wystąpił problem z tokenem sesji."
@@ -1151,8 +1138,9 @@ msgstr "Przywróć domyślne ustawienia"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1268,7 +1256,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Nie można utworzyć aliasów."
@@ -1391,7 +1379,7 @@ msgid "Cannot normalize that email address"
msgstr "Nie można znormalizować tego adresu e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "To nie jest prawidłowy adres e-mail."
@@ -1584,6 +1572,22 @@ msgstr "Nie ma takiego pliku."
msgid "Cannot read file."
msgstr "Nie można odczytać pliku."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Nieprawidłowa rola."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Ta rola jest zastrzeżona i nie może zostać ustawiona."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Nie można udzielić rol użytkownikom na tej witrynie."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Użytkownik ma już tę rolę."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1727,12 +1731,18 @@ msgstr "Uczyń administratorem"
msgid "Make this user an admin"
msgstr "Uczyń tego użytkownika administratorem"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Oś czasu użytkownika %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Aktualizacje od członków %1$s na %2$s."
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupy"
@@ -1993,7 +2003,6 @@ msgstr "Opcjonalnie dodaj osobistą wiadomość do zaproszenia."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Wyślij"
@@ -2352,8 +2361,8 @@ msgstr "typ zawartości "
msgid "Only "
msgstr "Tylko "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "To nie jest obsługiwany format danych."
@@ -2492,7 +2501,8 @@ msgstr "Nie można zapisać nowego hasła."
msgid "Password saved."
msgstr "Zapisano hasło."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Ścieżki"
@@ -2614,7 +2624,7 @@ msgstr "Katalog tła"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nigdy"
@@ -2670,11 +2680,11 @@ msgstr "Nieprawidłowy znacznik osób: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Użytkownicy używający znacznika %1$s - strona %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Nieprawidłowa zawartość wpisu"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Licencja wpisu \"%1$s\" nie jest zgodna z licencją witryny \"%2$s\"."
@@ -2754,7 +2764,7 @@ msgstr ""
"Znaczniki dla siebie (litery, liczby, -, . i _), oddzielone przecinkami lub "
"spacjami"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Język"
@@ -2781,7 +2791,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Wpis \"O mnie\" jest za długi (maksymalnie %d znaków)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Nie wybrano strefy czasowej."
@@ -3100,7 +3110,7 @@ msgid "Same as password above. Required."
msgstr "Takie samo jak powyższe hasło. Wymagane."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3206,7 +3216,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:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subskrybuj"
@@ -3310,6 +3320,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "odpowiedzi dla użytkownika %1$s na %2$s."
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Nie można unieważnić rol użytkowników na tej witrynie."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Użytkownik nie ma tej roli."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3322,7 +3340,9 @@ msgstr "Nie można ograniczać użytkowników na tej witrynie."
msgid "User is already sandboxed."
msgstr "Użytkownik jest już ograniczony."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sesje"
@@ -3346,7 +3366,7 @@ msgstr "Debugowanie sesji"
msgid "Turn on debugging output for sessions."
msgstr "Włącza wyjście debugowania dla sesji."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Zapisz ustawienia witryny"
@@ -3377,8 +3397,8 @@ msgstr "Organizacja"
msgid "Description"
msgstr "Opis"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statystyki"
@@ -3520,45 +3540,45 @@ msgstr "Aliasy"
msgid "Group actions"
msgstr "Działania grupy"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Kanał wpisów dla grupy %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Kanał wpisów dla grupy %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF dla grupy %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Członkowie"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Brak)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Wszyscy członkowie"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Utworzono"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3574,7 +3594,7 @@ msgstr ""
"action.register%%%%), aby stać się częścią tej grupy i wiele więcej. "
"([Przeczytaj więcej](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3587,7 +3607,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:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratorzy"
@@ -3710,148 +3730,135 @@ msgid "User is already silenced."
msgstr "Użytkownik jest już wyciszony."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Podstawowe ustawienia tej witryny StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Podstawowe ustawienia tej witryny StatusNet"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Nazwa witryny nie może mieć zerową długość."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Należy posiadać prawidłowy kontaktowy adres e-mail."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Nieznany język \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Nieprawidłowy adres URL zgłaszania migawek."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Nieprawidłowa wartość wykonania migawki."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Częstotliwość migawek musi być liczbą."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Maksymalne ograniczenie tekstu to 14 znaków."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ograniczenie duplikatów musi wynosić jedną lub więcej sekund."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Ogólne"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nazwa witryny"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Nazwa strony, taka jak \"Mikroblog firmy X\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Dostarczane przez"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Tekst używany do odnośnika do zasług w stopce każdej strony"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Adres URL \"Dostarczane przez\""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "Adres URL używany do odnośnika do zasług w stopce każdej strony"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontaktowy adres e-mail witryny"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokalne"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Domyślna strefa czasowa"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Domyśla strefa czasowa witryny, zwykle UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr "Domyślny język witryny"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Migawki"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Losowo podczas trafienia WWW"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Jako zaplanowane zadanie"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Migawki danych"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Kiedy wysyłać dane statystyczne na serwery status.net"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Domyślny język"
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Częstotliwość"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Migawki będą wysyłane co N trafień WWW"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Adres URL zgłaszania"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Migawki będą wysyłane na ten adres URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+"Język witryny, kiedy automatyczne wykrywanie z ustawień przeglądarki nie "
+"jest dostępne"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Ograniczenia"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Ograniczenie tekstu"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maksymalna liczba znaków wpisów."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Ograniczenie duplikatów"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Ile czasu użytkownicy muszą czekać (w sekundach), aby ponownie wysłać to "
"samo."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Wpis witryny"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Zmodyfikuj wiadomość witryny"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Nie można zapisać wpisu witryny."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Maksymalna długość wpisu witryny to 255 znaków"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Tekst wpisu witryny"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+"Tekst wpisu witryny (maksymalnie 255 znaków, można używać znaczników HTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Zapisz wpis witryny"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Ustawienia SMS"
@@ -3951,6 +3958,64 @@ msgstr ""
msgid "No code entered"
msgstr "Nie podano kodu"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Migawki"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Zarządzaj konfiguracją migawki"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Nieprawidłowa wartość wykonania migawki."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Częstotliwość migawek musi być liczbą."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Nieprawidłowy adres URL zgłaszania migawek."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Losowo podczas trafienia WWW"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Jako zaplanowane zadanie"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Migawki danych"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Kiedy wysyłać dane statystyczne na serwery status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Częstotliwość"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Migawki będą wysyłane co N trafień WWW"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Adres URL zgłaszania"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Migawki będą wysyłane na ten adres URL"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Zapisz ustawienia migawki"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Nie jesteś subskrybowany do tego profilu."
@@ -4161,7 +4226,7 @@ msgstr "Brak identyfikatora profilu w żądaniu."
msgid "Unsubscribed"
msgstr "Zrezygnowano z subskrypcji"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4171,7 +4236,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Użytkownik"
@@ -4362,16 +4426,22 @@ msgstr "Grupy użytkownika %1$s, strona %2$d"
msgid "Search for more groups"
msgstr "Wyszukaj więcej grup"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "Użytkownik %s nie jest członkiem żadnej grupy."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Spróbuj [wyszukać grupy](%%action.groupsearch%%) i dołączyć do nich."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Aktualizacje z %1$s na %2$s."
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4429,7 +4499,7 @@ msgstr ""
msgid "Plugins"
msgstr "Wtyczki"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Wersja"
@@ -4497,22 +4567,22 @@ msgstr "Nie można zaktualizować wiadomości za pomocą nowego adresu URL."
msgid "DB error inserting hashtag: %s"
msgstr "Błąd bazy danych podczas wprowadzania znacznika mieszania: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem podczas zapisywania wpisu. Za długi."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem podczas zapisywania wpisu. Nieznany użytkownik."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Za dużo wpisów w za krótkim czasie, weź głęboki oddech i wyślij ponownie za "
"kilka minut."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4520,19 +4590,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:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Zabroniono ci wysyłania wpisów na tej witrynie."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem podczas zapisywania wpisu."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem podczas zapisywania skrzynki odbiorczej grupy."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4557,7 +4627,11 @@ msgstr "Niesubskrybowane."
msgid "Couldn't delete self-subscription."
msgstr "Nie można usunąć autosubskrypcji."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Nie można usunąć tokenu subskrypcji OMB."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Nie można usunąć subskrypcji."
@@ -4566,19 +4640,19 @@ msgstr "Nie można usunąć subskrypcji."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Witaj w %1$s, @%2$s."
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Nie można utworzyć grupy."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Nie można ustawić adresu URI grupy."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Nie można ustawić członkostwa w grupie."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Nie można zapisać informacji o lokalnej grupie."
@@ -4619,194 +4693,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Strona bez nazwy"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Główna nawigacja witryny"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Profil osobisty i oś czasu przyjaciół"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Osobiste"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Zmień adres e-mail, awatar, hasło, profil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Połącz z serwisami"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Połącz"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Zmień konfigurację witryny"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Administrator"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Zaproś przyjaciół i kolegów do dołączenia do ciebie na %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Zaproś"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Wyloguj się z witryny"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Wyloguj się"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Utwórz konto"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Zarejestruj się"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Zaloguj się na witrynie"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Zaloguj się"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Pomóż mi."
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Pomoc"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Wyszukaj osoby lub tekst"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Wyszukaj"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Wpis witryny"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokalne widoki"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Wpis strony"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Druga nawigacja witryny"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Pomoc"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "O usłudze"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Prywatność"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Kod źródłowy"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Odznaka"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licencja oprogramowania StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4815,12 +4865,12 @@ msgstr ""
"**%%site.name%%** jest usługą mikroblogowania prowadzoną przez [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** jest usługą mikroblogowania. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4831,57 +4881,57 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licencja zawartości witryny"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością %1$s. Wszystkie prawa "
"zastrzeżone."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Prawa autorskie do treści i danych są własnością współtwórców. Wszystkie "
"prawa zastrzeżone."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Wszystko "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licencja."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginacja"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Później"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Wcześniej"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Nie można jeszcze obsługiwać zdalnej treści."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści XML."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Nie można jeszcze obsługiwać zagnieżdżonej treści Base64."
@@ -4896,91 +4946,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Zmiany w tym panelu nie są dozwolone."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() nie jest zaimplementowane."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() nie jest zaimplementowane."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Nie można usunąć ustawienia wyglądu."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Podstawowa konfiguracja witryny"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
-msgstr "Witryny"
+msgstr "Witryna"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Konfiguracja wyglądu"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Wygląd"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Konfiguracja użytkownika"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Użytkownik"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Konfiguracja dostępu"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Dostęp"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguracja ścieżek"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Ścieżki"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Konfiguracja sesji"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sesje"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Zmodyfikuj wpis witryny"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Konfiguracja migawek"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5172,12 +5207,12 @@ msgstr "Użytkownik %1$s opuścił grupę %2$s"
msgid "Fullname: %s"
msgstr "Imię i nazwisko: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Położenie: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Strona domowa: %s"
@@ -5514,6 +5549,11 @@ msgstr "Wybierz znacznik do ograniczonej listy"
msgid "Go"
msgstr "Przejdź"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Nadaj użytkownikowi rolę \"%s\""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "Adres URL strony domowej lub bloga grupy, albo temat"
@@ -5653,11 +5693,11 @@ msgstr "Zaloguj się za pomocą nazwy użytkownika i hasła"
msgid "Sign up for a new account"
msgstr "Załóż nowe konto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Potwierdzenie adresu e-mail"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5687,12 +5727,12 @@ msgstr ""
"Dziękujemy za twój czas, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "Użytkownik %1$s obserwuje teraz twoje wpisy na %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5717,17 +5757,17 @@ msgstr ""
"----\n"
"Zmień adres e-mail lub opcje powiadamiania na %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "O mnie: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Nowy adres e-mail do wysyłania do %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5748,21 +5788,21 @@ msgstr ""
"Z poważaniem,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Stan użytkownika %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Potwierdzenie SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Zostałeś szturchnięty przez %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5789,12 +5829,12 @@ msgstr ""
"Z poważaniem,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nowa prywatna wiadomość od użytkownika %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5827,12 +5867,12 @@ msgstr ""
"Z poważaniem,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "Użytkownik %s (@%s) dodał twój wpis jako ulubiony"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5870,12 +5910,12 @@ msgstr ""
"Z poważaniem,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "Użytkownik %s (@%s) wysłał wpis wymagający twojej uwagi"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6131,10 +6171,6 @@ msgstr "Odpowiedzi"
msgid "Favorites"
msgstr "Ulubione"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Użytkownik"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Odebrane"
@@ -6160,7 +6196,7 @@ msgstr "Znaczniki we wpisach użytkownika %s"
msgid "Unknown"
msgstr "Nieznane"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subskrypcje"
@@ -6168,23 +6204,23 @@ msgstr "Subskrypcje"
msgid "All subscriptions"
msgstr "Wszystkie subskrypcje"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subskrybenci"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Wszyscy subskrybenci"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Identyfikator użytkownika"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Członek od"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Wszystkie grupy"
@@ -6224,7 +6260,12 @@ msgstr "Powtórzyć ten wpis?"
msgid "Repeat this notice"
msgstr "Powtórz ten wpis"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Unieważnij rolę \"%s\" tego użytkownika"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
"Nie określono pojedynczego użytkownika dla trybu pojedynczego użytkownika."
@@ -6379,47 +6420,61 @@ msgstr "Wiadomość"
msgid "Moderate"
msgstr "Moderuj"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Rola użytkownika"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administrator"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderator"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "kilka sekund temu"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "około minutę temu"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "około %d minut temu"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "około godzinę temu"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "około %d godzin temu"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "blisko dzień temu"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "około %d dni temu"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "około miesiąc temu"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "około %d miesięcy temu"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "około rok temu"
diff --git a/locale/pt/LC_MESSAGES/statusnet.po b/locale/pt/LC_MESSAGES/statusnet.po
index 2598008d9..7041bea81 100644
--- a/locale/pt/LC_MESSAGES/statusnet.po
+++ b/locale/pt/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:38+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:48+0000\n"
"Language-Team: Portuguese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acesso"
@@ -105,7 +106,7 @@ msgstr "Página não encontrada."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -121,7 +122,7 @@ msgstr "Perfis bloqueados de %1$s, página %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -183,7 +184,7 @@ msgstr ""
"publicar uma nota à sua atenção."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Você e seus amigos"
@@ -210,11 +211,11 @@ msgstr "Actualizações de %1$s e amigos no %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Método da API não encontrado."
@@ -575,7 +576,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conta"
@@ -664,18 +665,6 @@ msgstr "%1$s / Favoritas de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s actualizações preferidas por %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Notas de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Actualizações de %1#s a %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -686,12 +675,12 @@ msgstr "%1$s / Actualizações que mencionam %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Notas públicas de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s actualizações de todos!"
@@ -711,7 +700,7 @@ msgstr "Repetências de %s"
msgid "Notices tagged with %s"
msgstr "Notas categorizadas com %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 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!"
@@ -751,7 +740,7 @@ msgstr "Pode carregar o seu avatar pessoal. O tamanho máximo do ficheiro é %s.
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Utilizador sem perfil correspondente"
@@ -938,7 +927,7 @@ msgid "Conversation"
msgstr "Conversação"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notas"
@@ -960,7 +949,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com a sua sessão."
@@ -1159,8 +1148,9 @@ msgstr "Repor predefinição"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1288,7 +1278,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Não foi possível criar sinónimos."
@@ -1415,7 +1405,7 @@ msgid "Cannot normalize that email address"
msgstr "Não é possível normalizar esse endereço electrónico"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Correio electrónico é inválido."
@@ -1607,6 +1597,25 @@ msgstr "Ficheiro não foi encontrado."
msgid "Cannot read file."
msgstr "Não foi possível ler o ficheiro."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Tamanho inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Não pode impedir notas públicas neste site."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O utilizador já está silenciado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1754,12 +1763,18 @@ msgstr "Tornar Gestor"
msgid "Make this user an admin"
msgstr "Tornar este utilizador um gestor"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Notas de %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Actualizações dos membros de %1$s em %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -2386,8 +2401,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Formato de dados não suportado."
@@ -2533,7 +2548,8 @@ msgstr "Não é possível guardar a nova senha."
msgid "Password saved."
msgstr "Senha gravada."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Localizações"
@@ -2653,7 +2669,7 @@ msgstr "Directório dos fundos"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2709,11 +2725,11 @@ msgstr "Categoria de pessoas inválida: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Utilizadores auto-categorizados com %1$s - página %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Conteúdo da nota é inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2794,7 +2810,7 @@ msgstr ""
"Categorias para si (letras, números, -, ., _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2820,7 +2836,7 @@ msgstr "Subscrever automaticamente quem me subscreva (óptimo para não-humanos)
msgid "Bio is too long (max %d chars)."
msgstr "Biografia demasiado extensa (máx. %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Fuso horário não foi seleccionado."
@@ -3142,7 +3158,7 @@ msgid "Same as password above. Required."
msgstr "Repita a senha acima. Obrigatório."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Correio"
@@ -3248,7 +3264,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil noutro serviço de microblogues compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Subscrever"
@@ -3352,6 +3368,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostas a %1$s em %2$s!"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Não pode silenciar utilizadores neste site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Utilizador sem perfil correspondente."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3364,7 +3390,9 @@ msgstr "Não pode impedir notas públicas neste site."
msgid "User is already sandboxed."
msgstr "Utilizador já está impedido de criar notas públicas."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessões"
@@ -3389,7 +3417,7 @@ msgstr "Depuração de sessões"
msgid "Turn on debugging output for sessions."
msgstr "Ligar a impressão de dados de depuração, para sessões."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Gravar configurações do site"
@@ -3423,8 +3451,8 @@ msgstr "Paginação"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3566,45 +3594,45 @@ msgstr "Sinónimos"
msgid "Group actions"
msgstr "Acções do grupo"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de notas do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de notas do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de notas do grupo %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF do grupo %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3620,7 +3648,7 @@ msgstr ""
"[Registe-se agora](%%action.register%%) para se juntar a este grupo e a "
"muitos mais! ([Saber mais](%%doc.help%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3633,7 +3661,7 @@ msgstr ""
"programa de Software Livre [StatusNet](http://status.net/). Os membros deste "
"grupo partilham mensagens curtas acerca das suas vidas e interesses. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Gestores"
@@ -3755,148 +3783,139 @@ msgid "User is already silenced."
msgstr "O utilizador já está silenciado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurações básicas para este site StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Nome do site não pode ter comprimento zero."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Tem de ter um endereço válido para o correio electrónico de contacto."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Língua desconhecida \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "URL para onde enviar instantâneos é inválida"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Valor de criação do instantâneo é inválido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Frequência dos instantâneos estatísticos tem de ser um número."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "O valor mínimo de limite para o texto é 140 caracteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "O limite de duplicados tem de ser 1 ou mais segundos."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "O nome do seu site, por exemplo \"Microblogue NomeDaEmpresa\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texto usado para a ligação de atribuição no rodapé de cada página"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL da atribuição"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL usada para a ligação de atribuição no rodapé de cada página"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Endereço de correio electrónico de contacto para o site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário, por omissão"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horário por omissão, para o site; normalmente, UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma do site, por omissão"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Instantâneos"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente, durante o acesso pela internet"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Num processo agendado"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Instantâneos dos dados"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando enviar dados estatísticos para os servidores do status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequência"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Instantâneos serão enviados uma vez a cada N acessos da internet"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL para relatórios"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Instantâneos serão enviados para esta URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite de texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres nas notas."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicações"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo os utilizadores terão de esperar (em segundos) para publicar a "
"mesma coisa outra vez."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Aviso do site"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Mensagem nova"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Não foi possível gravar as configurações do estilo."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Aviso do site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Aviso do site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configurações de SMS"
@@ -3997,6 +4016,66 @@ msgstr ""
msgid "No code entered"
msgstr "Nenhum código introduzido"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Instantâneos"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Alterar a configuração do site"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Valor de criação do instantâneo é inválido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Frequência dos instantâneos estatísticos tem de ser um número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "URL para onde enviar instantâneos é inválida"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatoriamente, durante o acesso pela internet"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Num processo agendado"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Instantâneos dos dados"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando enviar dados estatísticos para os servidores do status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequência"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Instantâneos serão enviados uma vez a cada N acessos da internet"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL para relatórios"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Instantâneos serão enviados para esta URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Gravar configurações do site"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Não subscreveu esse perfil."
@@ -4206,7 +4285,7 @@ msgstr "O pedido não tem a identificação do perfil."
msgid "Unsubscribed"
msgstr "Subscrição cancelada"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4410,16 +4489,22 @@ msgstr "Membros do grupo %1$s, página %2$d"
msgid "Search for more groups"
msgstr "Procurar mais grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s não é membro de nenhum grupo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "Tente [pesquisar grupos](%%action.groupsearch%%) e juntar-se a eles."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Actualizações de %1#s a %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4474,7 +4559,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
@@ -4544,22 +4629,22 @@ msgstr "Não foi possível actualizar a mensagem com a nova URI."
msgid "DB error inserting hashtag: %s"
msgstr "Erro na base de dados ao inserir a marca: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema na gravação da nota. Demasiado longa."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema na gravação da nota. Utilizador desconhecido."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Demasiadas notas, demasiado rápido; descanse e volte a publicar daqui a "
"alguns minutos."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4567,20 +4652,20 @@ msgstr ""
"Demasiadas mensagens duplicadas, demasiado rápido; descanse e volte a "
"publicar daqui a alguns minutos."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Está proibido de publicar notas neste site."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Problema na gravação da nota."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4605,7 +4690,12 @@ msgstr "Não subscrito!"
msgid "Couldn't delete self-subscription."
msgstr "Não foi possível apagar a auto-subscrição."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Não foi possível apagar a subscrição."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Não foi possível apagar a subscrição."
@@ -4614,20 +4704,20 @@ msgstr "Não foi possível apagar a subscrição."
msgid "Welcome to %1$s, @%2$s!"
msgstr "%1$s dá-lhe as boas-vindas, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Não foi possível configurar membros do grupo."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Não foi possível configurar membros do grupo."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Não foi possível gravar a subscrição."
@@ -4669,194 +4759,187 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária deste site"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil pessoal e notas dos amigos"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Pessoal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Altere o seu endereço electrónico, avatar, senha, perfil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Conta"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Ligar aos serviços"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Ligar"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Alterar a configuração do site"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Gestor"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convidar amigos e colegas para se juntarem a si em %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Convidar"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Terminar esta sessão"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Sair"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Criar uma conta"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registar"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Iniciar uma sessão"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Entrar"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ajuda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Procurar pessoas ou pesquisar texto"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Pesquisa"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Aviso do site"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Vistas locais"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Aviso da página"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária deste site"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Ajuda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Código"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contacto"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblema"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença de software do StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4865,12 +4948,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblogues disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblogues. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4881,53 +4964,53 @@ msgstr ""
"disponibilizado nos termos da [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença de conteúdos do site"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Tudo "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Posteriores"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Anteriores"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4942,94 +5025,83 @@ msgid "Changes to that panel are not allowed."
msgstr "Não são permitidas alterações a esse painel."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() não implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() não implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Não foi possível apagar a configuração do estilo."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuração básica do site"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Site"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuração do estilo"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Estilo"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Configuração das localizações"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Utilizador"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Configuração do estilo"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Acesso"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração das localizações"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Localizações"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Configuração do estilo"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessões"
+msgid "Edit site notice"
+msgstr "Aviso do site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuração das localizações"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5221,12 +5293,12 @@ msgstr "%s deixou o grupo %s"
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localidade: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Página pessoal: %s"
@@ -5562,6 +5634,11 @@ msgstr "Escolha uma categoria para reduzir a lista"
msgid "Go"
msgstr "Prosseguir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL da página ou do blogue, deste grupo ou assunto"
@@ -5698,11 +5775,11 @@ msgstr "Iniciar sessão com um nome de utilizador e senha"
msgid "Sign up for a new account"
msgstr "Registar uma conta nova"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmação do endereço electrónico"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5731,12 +5808,12 @@ msgstr ""
"Obrigado pelo tempo que dedicou, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s está agora a ouvir as suas notas em %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5762,17 +5839,17 @@ msgstr ""
"Altere o seu endereço de correio electrónico ou as opções de notificação em %"
"8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Bio: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Novo endereço electrónico para publicar no site %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5793,21 +5870,21 @@ msgstr ""
"Melhores cumprimentos,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Estado de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmação SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s envia-lhe um toque"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5834,12 +5911,12 @@ msgstr ""
"Graciosamente,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nova mensagem privada de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5872,12 +5949,12 @@ msgstr ""
"Profusos cumprimentos,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) adicionou a sua nota às favoritas."
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5914,12 +5991,12 @@ msgstr ""
"Sinceramente,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) enviou uma nota à sua atenção"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6178,10 +6255,6 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritas"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Utilizador"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Recebidas"
@@ -6207,7 +6280,7 @@ msgstr "Categorias nas notas de %s"
msgid "Unknown"
msgstr "Desconhecida"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Subscrições"
@@ -6215,23 +6288,23 @@ msgstr "Subscrições"
msgid "All subscriptions"
msgstr "Todas as subscrições"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Subscritores"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Todos os subscritores"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID do utilizador"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos os grupos"
@@ -6271,7 +6344,12 @@ msgstr "Repetir esta nota?"
msgid "Repeat this notice"
msgstr "Repetir esta nota"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear acesso deste utilizador a este grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6425,47 +6503,64 @@ msgstr "Mensagem"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Gestores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "há alguns segundos"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "há cerca de um minuto"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "há cerca de %d minutos"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "há cerca de uma hora"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "há cerca de %d horas"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "há cerca de um dia"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "há cerca de %d dias"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "há cerca de um mês"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "há cerca de %d meses"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "há cerca de um ano"
diff --git a/locale/pt_BR/LC_MESSAGES/statusnet.po b/locale/pt_BR/LC_MESSAGES/statusnet.po
index 041a2d4a3..51d926eba 100644
--- a/locale/pt_BR/LC_MESSAGES/statusnet.po
+++ b/locale/pt_BR/LC_MESSAGES/statusnet.po
@@ -11,19 +11,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:41+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:51+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: pt-br\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Acesso"
@@ -104,7 +105,7 @@ msgstr "Esta página não existe."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +121,7 @@ msgstr "%1$s e amigos, pág. %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -184,7 +185,7 @@ msgstr ""
"atenção de %s ou publicar uma mensagem para sua atenção."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Você e amigos"
@@ -211,11 +212,11 @@ msgstr "Atualizações de %1$s e amigos no %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "O método da API não foi encontrado!"
@@ -584,7 +585,7 @@ msgstr ""
"fornecer acesso à sua conta %4$s somente para terceiros nos quais você "
"confia."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Conta"
@@ -671,18 +672,6 @@ msgstr "%1$s / Favoritas de %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s marcadas como favoritas por %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Mensagens de %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Mensagens de %1$s no %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -693,12 +682,12 @@ msgstr "%1$s / Mensagens mencionando %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Mensagens públicas de %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s mensagens de todo mundo!"
@@ -718,7 +707,7 @@ msgstr "Repetições de %s"
msgid "Notices tagged with %s"
msgstr "Mensagens etiquetadas como %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Mensagens etiquetadas como %1$s no %2$s!"
@@ -759,7 +748,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Usuário sem um perfil correspondente"
@@ -946,7 +935,7 @@ msgid "Conversation"
msgstr "Conversa"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Mensagens"
@@ -965,7 +954,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Ocorreu um problema com o seu token de sessão."
@@ -1161,8 +1150,9 @@ msgstr "Restaura de volta ao padrão"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1278,7 +1268,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Não foi possível criar os apelidos."
@@ -1404,7 +1394,7 @@ msgid "Cannot normalize that email address"
msgstr "Não foi possível normalizar este endereço de e-mail"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Não é um endereço de e-mail válido."
@@ -1598,6 +1588,25 @@ msgstr "Esse arquivo não existe."
msgid "Cannot read file."
msgstr "Não foi possível ler o arquivo."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Token inválido."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Você não pode colocar usuários deste site em isolamento."
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "O usuário já está silenciado."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1746,12 +1755,18 @@ msgstr "Tornar administrador"
msgid "Make this user an admin"
msgstr "Torna este usuário um administrador"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Mensagens de %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Atualizações dos membros de %1$s no %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupos"
@@ -2381,8 +2396,8 @@ msgstr "tipo de conteúdo "
msgid "Only "
msgstr "Apenas "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Não é um formato de dados suportado."
@@ -2523,7 +2538,8 @@ msgstr "Não é possível salvar a nova senha."
msgid "Password saved."
msgstr "A senha foi salva."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Caminhos"
@@ -2644,7 +2660,7 @@ msgstr "Diretório das imagens de fundo"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Nunca"
@@ -2699,11 +2715,11 @@ msgstr "Não é uma etiqueta de pessoa válida: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Usuários auto-etiquetados com %1$s - pág. %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "O conteúdo da mensagem é inválido"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2784,7 +2800,7 @@ msgstr ""
"Suas etiquetas (letras, números, -, ., e _), separadas por vírgulas ou "
"espaços"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Idioma"
@@ -2811,7 +2827,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "A descrição é muito extensa (máximo %d caracteres)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "O fuso horário não foi selecionado."
@@ -3134,7 +3150,7 @@ msgid "Same as password above. Required."
msgstr "Igual à senha acima. Obrigatório."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-mail"
@@ -3240,7 +3256,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL do seu perfil em outro serviço de microblog compatível"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Assinar"
@@ -3344,6 +3360,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Respostas para %1$s no %2$s"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Você não pode silenciar os usuários neste site."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Usuário sem um perfil correspondente"
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3356,7 +3382,9 @@ msgstr "Você não pode colocar usuários deste site em isolamento."
msgid "User is already sandboxed."
msgstr "O usuário já está em isolamento."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessões"
@@ -3380,7 +3408,7 @@ msgstr "Depuração da sessão"
msgid "Turn on debugging output for sessions."
msgstr "Ativa a saída de depuração para as sessões."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Salvar as configurações do site"
@@ -3411,8 +3439,8 @@ msgstr "Organização"
msgid "Description"
msgstr "Descrição"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Estatísticas"
@@ -3554,45 +3582,45 @@ msgstr "Apelidos"
msgid "Group actions"
msgstr "Ações do grupo"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Fonte de mensagens do grupo %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Fonte de mensagens do grupo %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF para o grupo %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Membros"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Nenhum)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Todos os membros"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Criado"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3608,7 +3636,7 @@ msgstr ""
"para se tornar parte deste grupo e muito mais! ([Saiba mais](%%%%doc.help%%%"
"%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3621,7 +3649,7 @@ msgstr ""
"[StatusNet](http://status.net/). Seus membros compartilham mensagens curtas "
"sobre suas vidas e interesses. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administradores"
@@ -3745,148 +3773,139 @@ msgid "User is already silenced."
msgstr "O usuário já está silenciado."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Configurações básicas para esta instância do StatusNet."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Você deve digitar alguma coisa para o nome do site."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Você deve ter um endereço de e-mail para contato válido."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Idioma \"%s\" desconhecido."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "A URL para o envio das estatísticas é inválida."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "O valor de execução da obtenção das estatísticas é inválido."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "A frequência de geração de estatísticas deve ser um número."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "O comprimento máximo do texto é de 140 caracteres."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "O limite de duplicatas deve ser de um ou mais segundos."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Geral"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Nome do site"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "O nome do seu site, por exemplo \"Microblog da Sua Empresa\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Disponibilizado por"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Texto utilizado para o link de créditos no rodapé de cada página"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL do disponibilizado por"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL utilizada para o link de créditos no rodapé de cada página"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Endereço de e-mail para contatos do seu site"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Local"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Fuso horário padrão"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Fuso horário padrão para o seu site; geralmente UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Idioma padrão do site"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Estatísticas"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Aleatoriamente durante o funcionamento"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Em horários pré-definidos"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Estatísticas dos dados"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Quando enviar dados estatísticos para os servidores status.net"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frequentemente"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "As estatísticas serão enviadas uma vez a cada N usos da web"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL para envio"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "As estatísticas serão enviadas para esta URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Limites"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Limite do texto"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Número máximo de caracteres para as mensagens."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Limite de duplicatas"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Quanto tempo (em segundos) os usuários devem esperar para publicar a mesma "
"coisa novamente."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Mensagem do site"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nova mensagem"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Não foi possível salvar suas configurações de aparência."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Mensagem do site"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Mensagem do site"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Configuração do SMS"
@@ -3985,6 +4004,66 @@ msgstr ""
msgid "No code entered"
msgstr "Não foi digitado nenhum código"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Estatísticas"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Mude as configurações do site"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "O valor de execução da obtenção das estatísticas é inválido."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "A frequência de geração de estatísticas deve ser um número."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "A URL para o envio das estatísticas é inválida."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Aleatoriamente durante o funcionamento"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Em horários pré-definidos"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Estatísticas dos dados"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Quando enviar dados estatísticos para os servidores status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frequentemente"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "As estatísticas serão enviadas uma vez a cada N usos da web"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL para envio"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "As estatísticas serão enviadas para esta URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Salvar as configurações do site"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Você não está assinando esse perfil."
@@ -4194,7 +4273,7 @@ msgstr "Nenhuma ID de perfil na requisição."
msgid "Unsubscribed"
msgstr "Cancelado"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4399,18 +4478,24 @@ msgstr "Grupos de %1$s, pág. %2$d"
msgid "Search for more groups"
msgstr "Procurar por outros grupos"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s não é membro de nenhum grupo."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Experimente [procurar por grupos](%%action.groupsearch%%) e associar-se à "
"eles."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Mensagens de %1$s no %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4466,7 +4551,7 @@ msgstr ""
msgid "Plugins"
msgstr "Plugins"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Versão"
@@ -4532,22 +4617,22 @@ msgstr "Não foi possível atualizar a mensagem com a nova URI."
msgid "DB error inserting hashtag: %s"
msgstr "Erro no banco de dados durante a inserção da hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problema no salvamento da mensagem. Ela é muito extensa."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problema no salvamento da mensagem. Usuário desconhecido."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Muitas mensagens em um período curto de tempo; dê uma respirada e publique "
"novamente daqui a alguns minutos."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4555,19 +4640,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:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Você está proibido de publicar mensagens neste site."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problema no salvamento da mensagem."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problema no salvamento das mensagens recebidas do grupo."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4592,7 +4677,12 @@ msgstr "Não assinado!"
msgid "Couldn't delete self-subscription."
msgstr "Não foi possível excluir a auto-assinatura."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Não foi possível excluir a assinatura."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Não foi possível excluir a assinatura."
@@ -4601,20 +4691,20 @@ msgstr "Não foi possível excluir a assinatura."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Bem vindo(a) a %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Não foi possível criar o grupo."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Não foi possível configurar a associação ao grupo."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Não foi possível configurar a associação ao grupo."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Não foi possível salvar a assinatura."
@@ -4656,194 +4746,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Página sem título"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Navegação primária no site"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Perfil pessoal e fluxo de mensagens dos amigos"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Pessoal"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Mude seu e-mail, avatar, senha, perfil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Conta"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Conecte-se a outros serviços"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Conectar"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Mude as configurações do site"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "Admin"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Convide seus amigos e colegas para unir-se a você no %s"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Convidar"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Sai do site"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Sair"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Cria uma conta"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Registrar-se"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Autentique-se no site"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Entrar"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Ajudem-me!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Ajuda"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Procura por pessoas ou textos"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Procurar"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Mensagem do site"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Visualizações locais"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Notícia da página"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Navegação secundária no site"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Ajuda"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Sobre"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Termos de uso"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Privacidade"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Fonte"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Contato"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Mini-aplicativo"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Licença do software StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4852,12 +4935,12 @@ msgstr ""
"**%%site.name%%** é um serviço de microblog disponibilizado por [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** é um serviço de microblog. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4868,55 +4951,55 @@ 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:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licença do conteúdo do site"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, 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:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Conteúdo e dados licenciados pelos colaboradores. Todos os direitos "
"reservados."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Todas "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licença."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Paginação"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Próximo"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Anterior"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4931,91 +5014,80 @@ msgid "Changes to that panel are not allowed."
msgstr "Não são permitidas alterações a esse painel."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() não implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() não implementado."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Não foi possível excluir as configurações da aparência."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Configuração básica do site"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Site"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Configuração da aparência"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Aparência"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Configuração do usuário"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Usuário"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Configuração do acesso"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Acesso"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Configuração dos caminhos"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Caminhos"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Configuração das sessões"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessões"
+msgid "Edit site notice"
+msgstr "Mensagem do site"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Configuração dos caminhos"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5207,12 +5279,12 @@ msgstr "%s deixou o grupo %s"
msgid "Fullname: %s"
msgstr "Nome completo: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Localização: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Site: %s"
@@ -5548,6 +5620,11 @@ msgstr "Selecione uma etiqueta para reduzir a lista"
msgid "Go"
msgstr "Ir"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL para o site ou blog do grupo ou tópico"
@@ -5686,11 +5763,11 @@ msgstr "Autentique-se com um nome de usuário e uma senha"
msgid "Sign up for a new account"
msgstr "Cadastre-se para uma nova conta"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Confirmação do endereço de e-mail"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5719,12 +5796,12 @@ msgstr ""
"Obrigado pela sua atenção, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s agora está acompanhando suas mensagens no %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5749,17 +5826,17 @@ msgstr ""
"----\n"
"Altere seu endereço de e-mail e suas opções de notificação em %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Descrição: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Novo endereço de e-mail para publicar no %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5780,21 +5857,21 @@ msgstr ""
"Atenciosamente,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "Mensagem de %s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Confirmação de SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Você teve a atenção chamada por %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5821,12 +5898,12 @@ msgstr ""
"Atenciosamente,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nova mensagem particular de %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5859,12 +5936,12 @@ msgstr ""
"Atenciosamente,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) marcou sua mensagem como favorita"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5901,12 +5978,12 @@ msgstr ""
"Atenciosamente,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) enviou uma mensagem citando você"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6168,10 +6245,6 @@ msgstr "Respostas"
msgid "Favorites"
msgstr "Favoritas"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Usuário"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Recebidas"
@@ -6197,7 +6270,7 @@ msgstr "Etiquetas nas mensagens de %s"
msgid "Unknown"
msgstr "Desconhecido"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Assinaturas"
@@ -6205,23 +6278,23 @@ msgstr "Assinaturas"
msgid "All subscriptions"
msgstr "Todas as assinaturas"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Assinantes"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Todos os assinantes"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID do usuário"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Membro desde"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Todos os grupos"
@@ -6261,7 +6334,12 @@ msgstr "Repetir esta mensagem?"
msgid "Repeat this notice"
msgstr "Repetir esta mensagem"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Bloquear este usuário neste grupo"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Nenhum usuário definido para o modo de usuário único."
@@ -6415,47 +6493,64 @@ msgstr "Mensagem"
msgid "Moderate"
msgstr "Moderar"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Perfil do usuário"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administradores"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderar"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "alguns segundos atrás"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "cerca de 1 minuto atrás"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "cerca de %d minutos atrás"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "cerca de 1 hora atrás"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "cerca de %d horas atrás"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "cerca de 1 dia atrás"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "cerca de %d dias atrás"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "cerca de 1 mês atrás"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "cerca de %d meses atrás"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "cerca de 1 ano atrás"
diff --git a/locale/ru/LC_MESSAGES/statusnet.po b/locale/ru/LC_MESSAGES/statusnet.po
index 4db3b0684..03aaa074a 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:44+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:54+0000\n"
"Language-Team: Russian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -25,7 +25,8 @@ msgstr ""
"10< =4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Принять"
@@ -47,7 +48,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Личное"
@@ -78,7 +78,6 @@ msgid "Save access settings"
msgstr "Сохранить настройки доступа"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Сохранить"
@@ -107,7 +106,7 @@ msgstr "Нет такой страницы"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +122,7 @@ msgstr "%1$s и друзья, страница %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -185,7 +184,7 @@ msgstr ""
"s или отправить запись для привлечения его или её внимания?"
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Вы и друзья"
@@ -212,11 +211,11 @@ msgstr "Обновлено от %1$s и его друзей на %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "Метод API не найден."
@@ -582,7 +581,7 @@ msgstr ""
"предоставлять разрешение на доступ к вашей учётной записи %4$s только тем "
"сторонним приложениям, которым вы доверяете."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Настройки"
@@ -669,18 +668,6 @@ msgstr "%1$s / Любимое от %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Обновления %1$s, отмеченные как любимые %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "Лента %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Обновлено от %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -691,12 +678,12 @@ msgstr "%1$s / Обновления, упоминающие %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s обновил этот ответ на сообщение: %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "Общая лента %s"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "Обновления %s от всех!"
@@ -716,7 +703,7 @@ msgstr "Повторы за %s"
msgid "Notices tagged with %s"
msgstr "Записи с тегом %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Обновления с тегом %1$s на %2$s!"
@@ -757,7 +744,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Пользователь без соответствующего профиля"
@@ -943,7 +930,7 @@ msgid "Conversation"
msgstr "Дискуссия"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Записи"
@@ -962,7 +949,7 @@ msgstr "Вы не являетесь владельцем этого прило
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Проблема с Вашей сессией. Попробуйте ещё раз, пожалуйста."
@@ -1158,8 +1145,9 @@ msgstr "Восстановить значения по умолчанию"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1275,7 +1263,7 @@ msgstr "Слишком длинное описание (максимум %d си
msgid "Could not update group."
msgstr "Не удаётся обновить информацию о группе."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Не удаётся создать алиасы."
@@ -1407,7 +1395,7 @@ msgid "Cannot normalize that email address"
msgstr "Не удаётся стандартизировать этот электронный адрес"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Неверный электронный адрес."
@@ -1600,6 +1588,22 @@ msgstr "Нет такого файла."
msgid "Cannot read file."
msgstr "Не удалось прочесть файл."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Неверная роль."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Эта роль зарезервирована и не может быть установлена."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Вы не можете назначать пользователю роли на этом сайте."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Пользователь уже имеет эту роль."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1747,12 +1751,18 @@ msgstr "Сделать администратором"
msgid "Make this user an admin"
msgstr "Сделать этого пользователя администратором"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "Лента %s"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Обновления участников %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Группы"
@@ -2015,7 +2025,6 @@ msgstr "Можно добавить к приглашению личное со
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Отправить"
@@ -2372,8 +2381,8 @@ msgstr "тип содержимого "
msgid "Only "
msgstr "Только "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Неподдерживаемый формат данных."
@@ -2514,7 +2523,8 @@ msgstr "Не удаётся сохранить новый пароль."
msgid "Password saved."
msgstr "Пароль сохранён."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Пути"
@@ -2634,7 +2644,7 @@ msgstr "Директория фонового изображения"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Никогда"
@@ -2689,11 +2699,11 @@ msgstr "Неверный тег человека: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Пользователи, установившие себе тег %1$s — страница %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Неверный контент записи"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Лицензия записи «%1$s» не совместима с лицензией сайта «%2$s»."
@@ -2773,7 +2783,7 @@ msgstr ""
"Теги для самого себя (буквы, цифры, -, ., и _), разделенные запятой или "
"пробелом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Язык"
@@ -2799,7 +2809,7 @@ msgstr "Автоматически подписываться на всех, к
msgid "Bio is too long (max %d chars)."
msgstr "Слишком длинная биография (максимум %d символов)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Часовой пояс не выбран."
@@ -3120,7 +3130,7 @@ msgid "Same as password above. Required."
msgstr "Тот же пароль что и сверху. Обязательное поле."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3225,7 +3235,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "Адрес URL твоего профиля на другом подходящем сервисе микроблогинга"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Подписаться"
@@ -3327,6 +3337,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Ответы на записи %1$s на %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Вы не можете снимать роли пользователей на этом сайте."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Пользователь не имеет этой роли."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3340,7 +3358,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr "Пользователь уже в режиме песочницы."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Сессии"
@@ -3364,7 +3384,7 @@ msgstr "Отладка сессий"
msgid "Turn on debugging output for sessions."
msgstr "Включить отладочный вывод для сессий."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Сохранить настройки сайта"
@@ -3395,8 +3415,8 @@ msgstr "Организация"
msgid "Description"
msgstr "Описание"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Статистика"
@@ -3538,45 +3558,45 @@ msgstr "Алиасы"
msgid "Group actions"
msgstr "Действия группы"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Лента записей группы %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Лента записей группы %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Лента записей группы %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF для группы %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Участники"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(пока ничего нет)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Все участники"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Создано"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3592,7 +3612,7 @@ msgstr ""
"action.register%%%%), чтобы стать участником группы и получить множество "
"других возможностей! ([Читать далее](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3605,7 +3625,7 @@ msgstr ""
"обеспечении [StatusNet](http://status.net/). Участники обмениваются "
"короткими сообщениями о своей жизни и интересах. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Администраторы"
@@ -3730,149 +3750,134 @@ msgid "User is already silenced."
msgstr "Пользователь уже заглушён."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Основные настройки для этого сайта StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Основные настройки для этого сайта StatusNet"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Имя сайта должно быть ненулевой длины."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "У вас должен быть действительный контактный email-адрес."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Неизвестный язык «%s»."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Неверный URL отчёта снимка."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Неверное значение запуска снимка."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Частота снимков должна быть числом."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Минимальное ограничение текста составляет 140 символов."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Ограничение дублирования должно составлять 1 или более секунд."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Базовые"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Имя сайта"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Имя вашего сайта, например, «Yourcompany Microblog»"
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Предоставлено"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
"Текст, используемый для указания авторов в нижнем колонтитуле каждой страницы"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "URL-адрес поставщика услуг"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
"URL, используемый для ссылки на авторов в нижнем колонтитуле каждой страницы"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактный email-адрес для вашего сайта"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Внутренние настройки"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Часовой пояс по умолчанию"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Часовой пояс по умолчанию для сайта; обычно UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr "Язык сайта по умолчанию"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снимки"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "При случайном посещении"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "По заданному графику"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снимки данных"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Когда отправлять статистические данные на сервера status.net"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Язык по умолчанию"
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Частота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снимки будут отправляться каждые N посещений"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL отчёта"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снимки будут отправляться по этому URL-адресу"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+"Язык сайта в случае, если автоопределение из настроек браузера не сработало"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Границы"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Границы текста"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Максимальное число символов для записей."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Предел дубликатов"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Сколько нужно ждать пользователям (в секундах) для отправки того же ещё раз."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Уведомление сайта"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Изменить уведомление для всего сайта"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Не удаётся сохранить уведомление сайта."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Максимальная длина уведомления сайта составляет 255 символов"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Текст уведомления сайта"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Текст уведомления сайта (максимум 255 символов; допустим HTML)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Сохранить уведомление сайта"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Установки СМС"
@@ -3974,6 +3979,64 @@ msgstr ""
msgid "No code entered"
msgstr "Код не введён"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снимки"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Управление снимками конфигурации"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Неверное значение запуска снимка."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Частота снимков должна быть числом."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Неверный URL отчёта снимка."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "При случайном посещении"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "По заданному графику"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снимки данных"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Когда отправлять статистические данные на сервера status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Частота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Снимки будут отправляться каждые N посещений"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL отчёта"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снимки будут отправляться по этому URL-адресу"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Сохранить настройки снимка"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Вы не подписаны на этот профиль."
@@ -4184,7 +4247,7 @@ msgstr "Нет ID профиля в запросе."
msgid "Unsubscribed"
msgstr "Отписано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4193,7 +4256,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Пользователь"
@@ -4386,17 +4448,23 @@ msgstr "Группы %1$s, страница %2$d"
msgid "Search for more groups"
msgstr "Искать другие группы"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не состоит ни в одной группе."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Попробуйте [найти группы](%%action.groupsearch%%) и присоединиться к ним."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Обновлено от %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4452,7 +4520,7 @@ msgstr ""
msgid "Plugins"
msgstr "Плагины"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Версия"
@@ -4517,22 +4585,22 @@ msgstr "Не удаётся обновить сообщение с новым UR
msgid "DB error inserting hashtag: %s"
msgstr "Ошибка баз данных при вставке хеш-тегов для %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблемы с сохранением записи. Слишком длинно."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при сохранении записи. Неизвестный пользователь."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Слишком много записей за столь короткий срок; передохните немного и "
"попробуйте вновь через пару минут."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4540,19 +4608,19 @@ msgstr ""
"Слишком много одинаковых записей за столь короткий срок; передохните немного "
"и попробуйте вновь через пару минут."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам запрещено поститься на этом сайте (бан)"
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблемы с сохранением записи."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблемы с сохранением входящих сообщений группы."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4577,7 +4645,11 @@ msgstr "Не подписаны!"
msgid "Couldn't delete self-subscription."
msgstr "Невозможно удалить самоподписку."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Не удаётся удалить подписочный жетон OMB."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Не удаётся удалить подписку."
@@ -4586,19 +4658,19 @@ msgstr "Не удаётся удалить подписку."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Добро пожаловать на %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Не удаётся создать группу."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Не удаётся назначить URI группы."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Не удаётся назначить членство в группе."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Не удаётся сохранить информацию о локальной группе."
@@ -4639,194 +4711,170 @@ msgstr "%1$s — %2$s"
msgid "Untitled page"
msgstr "Страница без названия"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Главная навигация"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Личный профиль и лента друзей"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Личное"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
-msgstr "Изменить ваш email, аватару, пароль, профиль"
-
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Настройки"
+msgstr "Изменить ваш email, аватар, пароль, профиль"
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Соединить с сервисами"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Соединить"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Изменить конфигурацию сайта"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Настройки"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
-msgstr "Пригласите друзей и коллег стать такими же как вы участниками %s"
+msgstr "Пригласите друзей и коллег стать такими же как Вы участниками %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Пригласить"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Выйти"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Выход"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Создать новый аккаунт"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Регистрация"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Войти"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Вход"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Помощь"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Помощь"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Искать людей или текст"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Поиск"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Новая запись"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Локальные виды"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Новая запись"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Навигация по подпискам"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Помощь"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "О проекте"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаВо"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "TOS"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Пользовательское соглашение"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Исходный код"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Контактная информация"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet лицензия"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4835,12 +4883,12 @@ msgstr ""
"**%%site.name%%** — это сервис микроблогинга, созданный для вас при помощи [%"
"%site.broughtby%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — сервис микроблогинга. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4852,56 +4900,56 @@ msgstr ""
"лицензией [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Лицензия содержимого сайта"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Содержание и данные %1$s являются личными и конфиденциальными."
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
"Авторские права на содержание и данные принадлежат %1$s. Все права защищены."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Авторские права на содержание и данные принадлежат разработчикам. Все права "
"защищены."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "All "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "license."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Разбиение на страницы"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Сюда"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Туда"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Пока ещё нельзя обрабатывать удалённое содержимое."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Пока ещё нельзя обрабатывать встроенный XML."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Пока ещё нельзя обрабатывать встроенное содержание Base64."
@@ -4916,91 +4964,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Изменения для этой панели недопустимы."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не реализована."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не реализована."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Не удаётся удалить настройки оформления."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Основная конфигурация сайта"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Сайт"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Конфигурация оформления"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Оформление"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Конфигурация пользователя"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Пользователь"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Конфигурация доступа"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Принять"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Конфигурация путей"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Пути"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Конфигурация сессий"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Сессии"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Изменить уведомление сайта"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Конфигурация снимков"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5192,12 +5225,12 @@ msgstr "%1$s покинул группу %2$s"
msgid "Fullname: %s"
msgstr "Полное имя: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Месторасположение: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Домашняя страница: %s"
@@ -5532,6 +5565,11 @@ msgstr "Выберите тег из выпадающего списка"
msgid "Go"
msgstr "Перейти"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Назначить этому пользователю роль «%s»"
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "Адрес страницы, дневника или профиля группы на другом портале"
@@ -5669,11 +5707,11 @@ msgstr "Войти с вашим ником и паролем."
msgid "Sign up for a new account"
msgstr "Создать новый аккаунт"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Подтверждение электронного адреса"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5703,12 +5741,12 @@ msgstr ""
"Благодарим за потраченное время, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s теперь следит за вашими записями на %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5733,17 +5771,17 @@ msgstr ""
"----\n"
"Измените email-адрес и настройки уведомлений на %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Биография: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Новый электронный адрес для постинга %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5764,21 +5802,21 @@ msgstr ""
"Искренне Ваш,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s статус"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Подтверждение СМС"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Вас «подтолкнул» пользователь %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5805,12 +5843,12 @@ msgstr ""
"С уважением,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Новое приватное сообщение от %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5843,12 +5881,12 @@ msgstr ""
"С уважением,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) добавил вашу запись в число своих любимых"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5885,12 +5923,12 @@ msgstr ""
"С уважением,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) отправил запись для вашего внимания"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6148,10 +6186,6 @@ msgstr "Ответы"
msgid "Favorites"
msgstr "Любимое"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Пользователь"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Входящие"
@@ -6177,7 +6211,7 @@ msgstr "Теги записей пользователя %s"
msgid "Unknown"
msgstr "Неизвестно"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Подписки"
@@ -6185,23 +6219,23 @@ msgstr "Подписки"
msgid "All subscriptions"
msgstr "Все подписки."
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Подписчики"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Все подписчики"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ID пользователя"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Регистрация"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Все группы"
@@ -6241,7 +6275,12 @@ msgstr "Повторить эту запись?"
msgid "Repeat this notice"
msgstr "Повторить эту запись"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Отозвать у этого пользователя роль «%s»"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Ни задан пользователь для однопользовательского режима."
@@ -6395,47 +6434,61 @@ msgstr "Сообщение"
msgid "Moderate"
msgstr "Модерировать"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Роль пользователя"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Администратор"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модератор"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "пару секунд назад"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "около минуты назад"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "около %d минут(ы) назад"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "около часа назад"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "около %d часа(ов) назад"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "около дня назад"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "около %d дня(ей) назад"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "около месяца назад"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "около %d месяца(ев) назад"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "около года назад"
diff --git a/locale/statusnet.po b/locale/statusnet.po
index 3f4ad499f..61d902a1a 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-02 21:02+0000\n"
+"POT-Creation-Date: 2010-03-08 21:09+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,7 +18,8 @@ msgstr ""
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr ""
@@ -97,7 +98,7 @@ msgstr ""
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -113,7 +114,7 @@ msgstr ""
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -168,7 +169,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr ""
@@ -195,11 +196,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr ""
@@ -551,7 +552,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr ""
@@ -638,18 +639,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr ""
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -660,12 +649,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -685,7 +674,7 @@ msgstr ""
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr ""
@@ -725,7 +714,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -908,7 +897,7 @@ msgid "Conversation"
msgstr ""
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -927,7 +916,7 @@ msgstr ""
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1114,8 +1103,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1231,7 +1221,7 @@ msgstr ""
msgid "Could not update group."
msgstr ""
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr ""
@@ -1351,7 +1341,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr ""
@@ -1535,6 +1525,22 @@ msgstr ""
msgid "Cannot read file."
msgstr ""
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr ""
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr ""
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1675,12 +1681,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr ""
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2230,8 +2242,8 @@ msgstr ""
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2370,7 +2382,8 @@ msgstr ""
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2490,7 +2503,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2543,11 +2556,11 @@ msgstr ""
msgid "Users self-tagged with %1$s - page %2$d"
msgstr ""
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2623,7 +2636,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2649,7 +2662,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr ""
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -2947,7 +2960,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr ""
@@ -3031,7 +3044,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3127,6 +3140,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr ""
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr ""
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr ""
@@ -3139,7 +3160,9 @@ msgstr ""
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3163,7 +3186,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr ""
@@ -3194,8 +3217,8 @@ msgstr ""
msgid "Description"
msgstr ""
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3327,45 +3350,45 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr ""
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr ""
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr ""
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3375,7 +3398,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3384,7 +3407,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3494,144 +3517,128 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr ""
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr ""
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr ""
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr ""
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
msgstr ""
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
msgstr ""
#: actions/smssettings.php:58
@@ -3726,6 +3733,64 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr ""
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -3919,7 +3984,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr ""
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4109,16 +4174,22 @@ msgstr ""
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4162,7 +4233,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr ""
@@ -4225,38 +4296,38 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr ""
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr ""
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr ""
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4281,7 +4352,11 @@ msgstr ""
msgid "Couldn't delete self-subscription."
msgstr ""
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr ""
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr ""
@@ -4290,19 +4365,19 @@ msgstr ""
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr ""
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr ""
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr ""
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr ""
@@ -4343,187 +4418,182 @@ msgstr ""
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr ""
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr ""
-#: lib/action.php:447
-msgctxt "MENU"
-msgid "Account"
-msgstr ""
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr ""
-#: lib/action.php:453
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr ""
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr ""
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr ""
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr ""
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr ""
-#: lib/action.php:484
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr ""
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr ""
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr ""
-#: lib/action.php:496
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr ""
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr ""
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr ""
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr ""
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr ""
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr ""
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr ""
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr ""
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
"broughtby%%](%%site.broughtbyurl%%). "
msgstr ""
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr ""
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4531,53 +4601,53 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr ""
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr ""
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4592,84 +4662,75 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr ""
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-msgctxt "MENU"
-msgid "Access"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:388
+msgid "Sessions configuration"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
-msgid "Sessions configuration"
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
msgstr ""
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-msgctxt "MENU"
-msgid "Sessions"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
msgstr ""
#: lib/apiauth.php:94
@@ -4854,12 +4915,12 @@ msgstr ""
msgid "Fullname: %s"
msgstr ""
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5151,6 +5212,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5286,11 +5352,11 @@ msgstr ""
msgid "Sign up for a new account"
msgstr ""
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr ""
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5307,12 +5373,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr ""
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5327,17 +5393,17 @@ msgid ""
"Change your email address or notification options at %8$s\n"
msgstr ""
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr ""
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5350,21 +5416,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr ""
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5380,12 +5446,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5404,12 +5470,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr ""
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5430,12 +5496,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5674,10 +5740,6 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -5703,7 +5765,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5711,23 +5773,23 @@ msgstr ""
msgid "All subscriptions"
msgstr ""
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr ""
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr ""
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -5767,7 +5829,12 @@ msgstr ""
msgid "Repeat this notice"
msgstr ""
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr ""
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -5921,47 +5988,61 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
-msgid "a few seconds ago"
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr ""
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
msgstr ""
#: lib/util.php:1015
-msgid "about a minute ago"
+msgid "a few seconds ago"
msgstr ""
#: lib/util.php:1017
+msgid "about a minute ago"
+msgstr ""
+
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/locale/sv/LC_MESSAGES/statusnet.po b/locale/sv/LC_MESSAGES/statusnet.po
index b1ac66f65..2a508849f 100644
--- a/locale/sv/LC_MESSAGES/statusnet.po
+++ b/locale/sv/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:47+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:50:58+0000\n"
"Language-Team: Swedish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: sv\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Åtkomst"
@@ -43,7 +44,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Privat"
@@ -74,7 +74,6 @@ msgid "Save access settings"
msgstr "Spara inställningar för åtkomst"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Spara"
@@ -103,7 +102,7 @@ msgstr "Ingen sådan sida"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -119,7 +118,7 @@ msgstr "%1$s och vänner, sida %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -181,7 +180,7 @@ msgstr ""
"%s eller skriva en notis för hans eller hennes uppmärksamhet."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Du och vänner"
@@ -208,11 +207,11 @@ msgstr "Uppdateringar från %1$s och vänner på %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API-metod hittades inte."
@@ -570,7 +569,7 @@ msgstr ""
"möjligheten att <strong>%3$s</strong> din %4$s kontoinformation. Du bör bara "
"ge tillgång till ditt %4$s-konto till tredje-parter du litar på."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Konto"
@@ -657,18 +656,6 @@ msgstr "%1$s / Favoriter från %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s uppdateringar markerade som favorit av %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s tidslinje"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Uppdateringar från %1$s på %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -679,12 +666,12 @@ msgstr "%1$s / Uppdateringar som nämner %2$s"
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."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s publika tidslinje"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s uppdateringar från alla!"
@@ -704,7 +691,7 @@ msgstr "Upprepningar av %s"
msgid "Notices tagged with %s"
msgstr "Notiser taggade med %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Uppdateringar taggade med %1$s på %2$s!"
@@ -745,7 +732,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Användare utan matchande profil"
@@ -932,7 +919,7 @@ msgid "Conversation"
msgstr "Konversationer"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Notiser"
@@ -951,7 +938,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Det var ett problem med din sessions-token."
@@ -1147,8 +1134,9 @@ msgstr "Återställ till standardvärde"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1264,7 +1252,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Kunde inte skapa alias."
@@ -1387,7 +1375,7 @@ msgid "Cannot normalize that email address"
msgstr "Kan inte normalisera den e-postadressen"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Inte en giltig e-postadress."
@@ -1580,6 +1568,22 @@ msgstr "Ingen sådan fil."
msgid "Cannot read file."
msgstr "Kan inte läsa fil."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Ogiltig roll."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Denna roll är reserverad och kan inte ställas in"
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Du kan inte bevilja användare roller på denna webbplats."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Användaren har redan denna roll."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1726,12 +1730,18 @@ msgstr "Gör till administratör"
msgid "Make this user an admin"
msgstr "Gör denna användare till administratör"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s tidslinje"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Uppdateringar från medlemmar i %1$s på %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Grupper"
@@ -1993,7 +2003,6 @@ msgstr "Om du vill, skriv ett personligt meddelande till inbjudan."
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Skicka"
@@ -2352,8 +2361,8 @@ msgstr "innehållstyp "
msgid "Only "
msgstr "Bara "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Ett dataformat som inte stödjs"
@@ -2492,7 +2501,8 @@ msgstr "Kan inte spara nytt lösenord."
msgid "Password saved."
msgstr "Lösenord sparat."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Sökvägar"
@@ -2613,7 +2623,7 @@ msgstr "Katalog med bakgrunder"
msgid "SSL"
msgstr "SSL"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Aldrig"
@@ -2668,11 +2678,11 @@ msgstr "Inte en giltig persontagg: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Användare som taggat sig själv med %1$s - sida %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Ogiltigt notisinnehåll"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Licensen för notiser ‘%1$s’ är inte förenlig webbplatslicensen ‘%2$s’."
@@ -2752,7 +2762,7 @@ msgstr ""
"Taggar för dig själv (bokstäver, nummer, -, ., och _), separerade med "
"kommatecken eller mellanslag"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Språk"
@@ -2780,7 +2790,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Biografin är för lång (max %d tecken)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Tidszon inte valt."
@@ -3100,7 +3110,7 @@ msgid "Same as password above. Required."
msgstr "Samma som lösenordet ovan. Måste fyllas i."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "E-post"
@@ -3208,7 +3218,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL till din profil på en annan kompatibel mikrobloggtjänst"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Prenumerera"
@@ -3312,6 +3322,15 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Svar till %1$s på %2$s"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Du kan inte återkalla användarroller på denna webbplats."
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Användare utan matchande profil."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3324,7 +3343,9 @@ msgstr "Du kan inte flytta användare till sandlådan på denna webbplats."
msgid "User is already sandboxed."
msgstr "Användare är redan flyttad till sandlådan."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Sessioner"
@@ -3348,7 +3369,7 @@ msgstr "Sessionsfelsökning"
msgid "Turn on debugging output for sessions."
msgstr "Sätt på felsökningsutdata för sessioner."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Spara webbplatsinställningar"
@@ -3379,8 +3400,8 @@ msgstr "Organisation"
msgid "Description"
msgstr "Beskrivning"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Statistik"
@@ -3523,45 +3544,45 @@ msgstr "Alias"
msgid "Group actions"
msgstr "Åtgärder för grupp"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Flöde av notiser för %s grupp (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Flöde av notiser för %s grupp (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Flöde av notiser för %s grupp (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF för %s grupp"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Medlemmar"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Ingen)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Alla medlemmar"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Skapad"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3576,7 +3597,7 @@ msgstr ""
"sina liv och intressen. [Gå med nu](%%%%action.register%%%%) för att bli en "
"del av denna grupp och många fler! ([Läs mer](%%%%doc.help%%%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3589,7 +3610,7 @@ msgstr ""
"[StatusNet](http://status.net/). Dess medlemmar delar korta meddelande om "
"sina liv och intressen. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Administratörer"
@@ -3710,147 +3731,138 @@ msgid "User is already silenced."
msgstr "Användaren är redan nedtystad."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "Grundinställningar för din StatusNet-webbplats"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Webbplatsnamnet måste vara minst ett tecken långt."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Du måste ha en giltig e-postadress."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Okänt språk \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Ogiltig rapport-URL för ögonblicksbild"
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Ogiltigt körvärde för ögonblicksbild."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Minsta textbegränsning är 140 tecken."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr "Begränsning av duplikat måste vara en eller fler sekuner."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Allmänt"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Webbplatsnamn"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Namnet på din webbplats, t.ex. \"Företagsnamn mikroblogg\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Tillhandahållen av"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Text som används för tillskrivningslänkar i sidfoten på varje sida."
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Tillhandahållen av URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL som används för tillskrivningslänkar i sidfoten på varje sida"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Kontakte-postadress för din webbplats"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Lokal"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Standardtidszon"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Standardtidzon för denna webbplats; vanligtvis UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "Webbplatsens standardspråk"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Ögonblicksbild"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Slumpmässigt vid webbförfrågningar"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "I ett schemalagt jobb"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Ögonblicksbild av data"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "När statistikdata skall skickas till status.net-servrar"
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Frekvens"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "URL för rapport"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Ögonblicksbild kommer skickat till denna URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Begränsningar"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Textbegränsning"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Maximala antalet tecken för notiser."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Duplikatbegränsning"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Hur länge användare måste vänta (i sekunder) för att posta samma sak igen."
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Webbplatsnotis"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Nytt meddelande"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Kunde inte spara dina utseendeinställningar."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Webbplatsnotis"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Webbplatsnotis"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Inställningar för SMS"
@@ -3950,6 +3962,66 @@ msgstr ""
msgid "No code entered"
msgstr "Ingen kod ifylld"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Ögonblicksbild"
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Ändra webbplatskonfiguration"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Ogiltigt körvärde för ögonblicksbild."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Frekvens för ögonblicksbilder måste vara ett nummer."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Ogiltig rapport-URL för ögonblicksbild"
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Slumpmässigt vid webbförfrågningar"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "I ett schemalagt jobb"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Ögonblicksbild av data"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "När statistikdata skall skickas till status.net-servrar"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Frekvens"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Ögonblicksbild kommer skickas var N:te webbträff"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "URL för rapport"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Ögonblicksbild kommer skickat till denna URL"
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Spara webbplatsinställningar"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Du är inte prenumerat hos den profilen."
@@ -4158,7 +4230,7 @@ msgstr "Ingen profil-ID i begäran."
msgid "Unsubscribed"
msgstr "Prenumeration avslutad"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4168,7 +4240,6 @@ msgstr ""
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Användare"
@@ -4363,17 +4434,23 @@ msgstr "%1$s grupper, sida %2$d"
msgid "Search for more groups"
msgstr "Sök efter fler grupper"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s är inte en medlem i någon grupp."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Prova att [söka efter grupper](%%action.groupsearch%%) och gå med i dem."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Uppdateringar från %1$s på %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4429,7 +4506,7 @@ msgstr ""
msgid "Plugins"
msgstr "Insticksmoduler"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Version"
@@ -4494,22 +4571,22 @@ msgstr "Kunde inte uppdatera meddelande med ny URI."
msgid "DB error inserting hashtag: %s"
msgstr "Databasfel vid infogning av hashtag: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Problem vid sparande av notis. För långt."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Problem vid sparande av notis. Okänd användare."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"För många notiser för snabbt; ta en vilopaus och posta igen om ett par "
"minuter."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4517,19 +4594,19 @@ msgstr ""
"För många duplicerade meddelanden för snabbt; ta en vilopaus och posta igen "
"om ett par minuter."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Du är utestängd från att posta notiser på denna webbplats."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Problem med att spara notis."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Problem med att spara gruppinkorg."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4554,7 +4631,12 @@ msgstr "Inte prenumerant!"
msgid "Couldn't delete self-subscription."
msgstr "Kunde inte ta bort själv-prenumeration."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Kunde inte ta bort prenumeration."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Kunde inte ta bort prenumeration."
@@ -4563,19 +4645,19 @@ msgstr "Kunde inte ta bort prenumeration."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Välkommen till %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Kunde inte skapa grupp."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Kunde inte ställa in grupp-URI."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Kunde inte ställa in gruppmedlemskap."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Kunde inte spara lokal gruppinformation."
@@ -4616,194 +4698,170 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr "Namnlös sida"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Primär webbplatsnavigation"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Personlig profil och vänners tidslinje"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Personligt"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Ändra din e-post, avatar, lösenord, profil"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Konto"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Anslut till tjänster"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Anslut"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Ändra webbplatskonfiguration"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Administratör"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Bjud in vänner och kollegor att gå med dig på %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Bjud in"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Logga ut från webbplatsen"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Logga ut"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Skapa ett konto"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Registrera"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Logga in på webbplatsen"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Logga in"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hjälp mig!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
msgstr "Hjälp"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Sök efter personer eller text"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Sök"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Webbplatsnotis"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Lokala vyer"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Sidnotis"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Sekundär webbplatsnavigation"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hjälp"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Om"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "Frågor & svar"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Användarvillkor"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Sekretess"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Källa"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Kontakt"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Emblem"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Programvarulicens för StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4812,12 +4870,12 @@ msgstr ""
"**%%site.name%%** är en mikrobloggtjänst tillhandahållen av [%%site.broughtby"
"%%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** är en mikrobloggtjänst. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4828,54 +4886,54 @@ msgstr ""
"version %s, tillgänglig under [GNU Affero General Public License](http://www."
"fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Licens för webbplatsinnehåll"
-#: lib/action.php:837
+#: lib/action.php:826
#, 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:842
+#: lib/action.php:831
#, 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:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Innehåll och data copyright av medarbetare. Alla rättigheter reserverade."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Alla "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "licens."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Numrering av sidor"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Senare"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Tidigare"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Kan inte hantera fjärrinnehåll ännu."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Kan inte hantera inbäddat XML-innehåll ännu."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Kan inte hantera inbäddat Base64-innehåll ännu."
@@ -4890,91 +4948,78 @@ msgid "Changes to that panel are not allowed."
msgstr "Ändringar av den panelen tillåts inte."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() är inte implementerat."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSetting() är inte implementerat."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Kunde inte ta bort utseendeinställning."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Grundläggande webbplatskonfiguration"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Webbplats"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Konfiguration av utseende"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Utseende"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Konfiguration av användare"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Användare"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Konfiguration av åtkomst"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Åtkomst"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Konfiguration av sökvägar"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Sökvägar"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Konfiguration av sessioner"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Sessioner"
+msgid "Edit site notice"
+msgstr "Webbplatsnotis"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Konfiguration av sökvägar"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5165,12 +5210,12 @@ msgstr "%s lämnade grupp %s"
msgid "Fullname: %s"
msgstr "Fullständigt namn: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Plats: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Hemsida: %s"
@@ -5503,6 +5548,11 @@ msgstr "Välj en tagg för att begränsa lista"
msgid "Go"
msgstr "Gå"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL till gruppen eller ämnets hemsida eller blogg"
@@ -5638,11 +5688,11 @@ msgstr "Logga in med ett användarnamn och lösenord"
msgid "Sign up for a new account"
msgstr "Registrera dig för ett nytt konto"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "E-postadressbekräftelse"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5671,12 +5721,12 @@ msgstr ""
"Tack för din tid, \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s lyssnar nu på dina notiser på %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5701,17 +5751,17 @@ msgstr ""
"----\n"
"Ändra din e-postadress eller notiferingsinställningar på %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Biografi: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Ny e-postadress för att skicka till %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5732,21 +5782,21 @@ msgstr ""
"Med vänliga hälsningar,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s status"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS-bekräftelse"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Du har blivit knuffad av %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5773,12 +5823,12 @@ msgstr ""
"Med vänliga hälsningar,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Nytt privat meddelande från %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5811,12 +5861,12 @@ msgstr ""
"Med vänliga hälsningar,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) lade till din notis som en favorit"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5853,12 +5903,12 @@ msgstr ""
"Med vänliga hälsningar,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) skickade en notis för din uppmärksamhet"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6117,10 +6167,6 @@ msgstr "Svar"
msgid "Favorites"
msgstr "Favoriter"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Användare"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Inkorg"
@@ -6146,7 +6192,7 @@ msgstr "Taggar i %ss notiser"
msgid "Unknown"
msgstr "Okänd"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Prenumerationer"
@@ -6154,23 +6200,23 @@ msgstr "Prenumerationer"
msgid "All subscriptions"
msgstr "Alla prenumerationer"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Prenumeranter"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Alla prenumeranter"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "Användar-ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Medlem sedan"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Alla grupper"
@@ -6210,7 +6256,12 @@ msgstr "Upprepa denna notis?"
msgid "Repeat this notice"
msgstr "Upprepa denna notis"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Blockera denna användare från denna grupp"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Ingen enskild användare definierad för enanvändarläge."
@@ -6364,47 +6415,64 @@ msgstr "Meddelande"
msgid "Moderate"
msgstr "Moderera"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Användarprofil"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "Administratörer"
+
+#: lib/userprofile.php:355
+#, fuzzy
+msgctxt "role"
+msgid "Moderator"
+msgstr "Moderera"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "ett par sekunder sedan"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "för nån minut sedan"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "för %d minuter sedan"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "för en timma sedan"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "för %d timmar sedan"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "för en dag sedan"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "för %d dagar sedan"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "för en månad sedan"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "för %d månader sedan"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "för ett år sedan"
diff --git a/locale/te/LC_MESSAGES/statusnet.po b/locale/te/LC_MESSAGES/statusnet.po
index f0527f3fa..c8a2f5c1a 100644
--- a/locale/te/LC_MESSAGES/statusnet.po
+++ b/locale/te/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:50+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:01+0000\n"
"Language-Team: Telugu\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: te\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "అంగీకరించు"
@@ -105,7 +106,7 @@ msgstr "అటువంటి పేజీ లేదు"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -121,7 +122,7 @@ msgstr "%1$s మరియు మిత్రులు, పేజీ %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -176,7 +177,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "మీరు మరియు మీ స్నేహితులు"
@@ -203,11 +204,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "నిర్ధారణ సంకేతం కనబడలేదు."
@@ -569,7 +570,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "ఖాతా"
@@ -656,18 +657,6 @@ msgstr ""
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s యొక్క మైక్రోబ్లాగు"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s కాలరేఖ"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -678,12 +667,12 @@ msgstr ""
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s బహిరంగ కాలరేఖ"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "అందరి నుండి %s తాజాకరణలు!"
@@ -703,7 +692,7 @@ msgstr "%s యొక్క పునరావృతాలు"
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s యొక్క మైక్రోబ్లాగు"
@@ -744,7 +733,7 @@ msgstr "మీ వ్యక్తిగత అవతారాన్ని మీ
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -929,7 +918,7 @@ msgid "Conversation"
msgstr "సంభాషణ"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "సందేశాలు"
@@ -948,7 +937,7 @@ msgstr "మీరు ఈ ఉపకరణం యొక్క యజమాని
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1139,8 +1128,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1260,7 +1250,7 @@ msgstr "వివరణ చాలా పెద్దదిగా ఉంది (1
msgid "Could not update group."
msgstr "గుంపుని తాజాకరించలేకున్నాం."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "మారుపేర్లని సృష్టించలేకపోయాం."
@@ -1380,7 +1370,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "సరైన ఈమెయిల్ చిరునామా కాదు:"
@@ -1565,6 +1555,25 @@ msgstr "అటువంటి ఫైలు లేదు."
msgid "Cannot read file."
msgstr "ఫైలుని చదవలేకపోతున్నాం."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "తప్పుడు పరిమాణం."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "వాడుకరిని ఇప్పటికే గుంపునుండి నిరోధించారు."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1710,12 +1719,18 @@ msgstr "నిర్వాహకున్ని చేయి"
msgid "Make this user an admin"
msgstr "ఈ వాడుకరిని నిర్వాహకున్ని చేయి"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s కాలరేఖ"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%s యొక్క మైక్రోబ్లాగు"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "గుంపులు"
@@ -2285,8 +2300,8 @@ msgstr "విషయ రకం "
msgid "Only "
msgstr "మాత్రమే "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2430,7 +2445,8 @@ msgstr "కొత్త సంకేతపదాన్ని భద్రపర
msgid "Password saved."
msgstr "సంకేతపదం భద్రమయ్యింది."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2553,7 +2569,7 @@ msgstr "నేపథ్యాల సంచయం"
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "వైదొలగు"
@@ -2611,11 +2627,11 @@ msgstr "సరైన ఈమెయిల్ చిరునామా కాదు
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "%s యొక్క మైక్రోబ్లాగు"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "సందేశపు విషయం సరైనది కాదు"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2693,7 +2709,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "భాష"
@@ -2719,7 +2735,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "స్వపరిచయం చాలా పెద్దగా ఉంది (%d అక్షరాలు గరిష్ఠం)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "కాలమండలాన్ని ఎంచుకోలేదు."
@@ -3025,7 +3041,7 @@ msgid "Same as password above. Required."
msgstr "పై సంకేతపదం మరోసారి. తప్పనిసరి."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "ఈమెయిల్"
@@ -3122,7 +3138,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "చందాచేరు"
@@ -3225,6 +3241,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%sకి స్పందనలు"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "మీరు ఇప్పటికే లోనికి ప్రవేశించారు!"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "వాడుకరికి ప్రొఫైలు లేదు."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "స్టేటస్‌నెట్"
@@ -3239,7 +3265,9 @@ msgstr "మీరు ఇప్పటికే లోనికి ప్రవే
msgid "User is already sandboxed."
msgstr "వాడుకరిని ఇప్పటికే గుంపునుండి నిరోధించారు."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3264,7 +3292,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "సైటు అమరికలను భద్రపరచు"
@@ -3296,8 +3324,8 @@ msgstr "సంస్ధ"
msgid "Description"
msgstr "వివరణ"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "గణాంకాలు"
@@ -3431,45 +3459,45 @@ msgstr "మారుపేర్లు"
msgid "Group actions"
msgstr "గుంపు చర్యలు"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s యొక్క సందేశముల ఫీడు"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s యొక్క సందేశముల ఫీడు"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s యొక్క సందేశముల ఫీడు"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s గుంపు"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "సభ్యులు"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(ఏమీలేదు)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "అందరు సభ్యులూ"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "సృష్టితం"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3479,7 +3507,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3488,7 +3516,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "నిర్వాహకులు"
@@ -3600,147 +3628,138 @@ msgid "User is already silenced."
msgstr "వాడుకరిని ఇప్పటికే గుంపునుండి నిరోధించారు."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+#, fuzzy
+msgid "Basic settings for this StatusNet site"
msgstr "ఈ స్టేటస్&zwnj;నెట్ సైటుకి ప్రాధమిక అమరికలు."
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "సైటు పేరు తప్పనిసరిగా సున్నా కంటే ఎక్కువ పొడవుండాలి."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "మీకు సరైన సంప్రదింపు ఈమెయిలు చిరునామా ఉండాలి."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "గుర్తు తెలియని భాష \"%s\"."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "కనిష్ఠ పాఠ్య పరిమితి 140 అక్షరాలు."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "సాధారణ"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "సైటు పేరు"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "మీ సైటు యొక్క పేరు, ఇలా \"మీకంపెనీ మైక్రోబ్లాగు\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "ఈ వాడుకరికై నమోదైన ఈమెయిల్ చిరునామాలు ఏమీ లేవు."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "స్థానిక"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "అప్రమేయ కాలమండలం"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
+#: actions/siteadminpanel.php:262
+#, fuzzy
+msgid "Default language"
msgstr "అప్రమేయ సైటు భాష"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr ""
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr ""
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr ""
-
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "తరచుదనం"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr ""
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "పరిమితులు"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "పాఠ్యపు పరిమితి"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "సందేశాలలోని అక్షరాల గరిష్ఠ సంఖ్య."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "సైటు గమనిక"
+
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "కొత్త సందేశం"
+
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "సైటు గమనిక"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr ""
+
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "సైటు గమనిక"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "SMS అమరికలు"
@@ -3835,6 +3854,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "చందాలు"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "తరచుదనం"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "సైటు అమరికలను భద్రపరచు"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -4036,7 +4115,7 @@ msgstr ""
msgid "Unsubscribed"
msgstr "చందాదార్లు"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4228,16 +4307,22 @@ msgstr "%1$s గుంపు సభ్యులు, పేజీ %2$d"
msgid "Search for more groups"
msgstr "మరిన్ని గుంపులకై వెతుకు"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s ఏ గుంపు లోనూ సభ్యులు కాదు."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr "[గుంపులని వెతికి](%%action.groupsearch%%) వాటిలో చేరడానికి ప్రయత్నించండి."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4281,7 +4366,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "సంచిక"
@@ -4345,41 +4430,41 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "ఈ సైటులో నోటీసులు రాయడం నుండి మిమ్మల్ని నిషేధించారు."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "సందేశాన్ని భద్రపరచడంలో పొరపాటు."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4406,7 +4491,12 @@ msgstr "చందాదార్లు"
msgid "Couldn't delete self-subscription."
msgstr "చందాని తొలగించలేకపోయాం."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "చందాని తొలగించలేకపోయాం."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "చందాని తొలగించలేకపోయాం."
@@ -4415,20 +4505,20 @@ msgstr "చందాని తొలగించలేకపోయాం."
msgid "Welcome to %1$s, @%2$s!"
msgstr "@%2$s, %1$sకి స్వాగతం!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "గుంపుని సృష్టించలేకపోయాం."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "గుంపు సభ్యత్వాన్ని అమర్చలేకపోయాం."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "గుంపు సభ్యత్వాన్ని అమర్చలేకపోయాం."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "చందాని సృష్టించలేకపోయాం."
@@ -4471,194 +4561,187 @@ msgstr "%1$s - %2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "వ్యక్తిగత"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "మీ ఈమెయిలు, అవతారం, సంకేతపదం మరియు ప్రౌఫైళ్ళను మార్చుకోండి"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "ఖాతా"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "అనుసంధానాలు"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "అనుసంధానించు"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "చందాలు"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "నిర్వాహకులు"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "ఈ ఫారాన్ని ఉపయోగించి మీ స్నేహితులను మరియు సహోద్యోగులను ఈ సేవను వినియోగించుకోమని ఆహ్వానించండి."
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "ఆహ్వానించు"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "సైటు నుండి నిష్క్రమించు"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "నిష్క్రమించు"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "కొత్త ఖాతా సృష్టించు"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "నమోదు"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "సైటులోని ప్రవేశించు"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "ప్రవేశించండి"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "సహాయం కావాలి!"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "సహాయం"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "మరిన్ని గుంపులకై వెతుకు"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "వెతుకు"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "సైటు గమనిక"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "స్థానిక వీక్షణలు"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "పేజీ గమనిక"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "చందాలు"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "సహాయం"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "గురించి"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "ప్రశ్నలు"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "సేవా నియమాలు"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "అంతరంగికత"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "మూలము"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "సంప్రదించు"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "బాడ్జి"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "స్టేటస్‌నెట్ మృదూపకరణ లైసెన్సు"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4667,12 +4750,12 @@ msgstr ""
"**%%site.name%%** అనేది [%%site.broughtby%%](%%site.broughtbyurl%%) వారు "
"అందిస్తున్న మైక్రో బ్లాగింగు సదుపాయం. "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** అనేది మైక్రో బ్లాగింగు సదుపాయం."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4683,54 +4766,54 @@ msgstr ""
"html) కింద లభ్యమయ్యే [స్టేటస్&zwnj;నెట్](http://status.net/) మైక్రోబ్లాగింగ్ ఉపకరణం సంచిక %s "
"పై నడుస్తుంది."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "కొత్త సందేశం"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "అన్నీ "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "పేజీకరణ"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "తర్వాత"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "ఇంతక్రితం"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4745,93 +4828,83 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "ప్రాథమిక సైటు స్వరూపణం"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "సైటు"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "రూపకల్పన స్వరూపణం"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "రూపురేఖలు"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "వాడుకరి స్వరూపణం"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "వాడుకరి"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS నిర్ధారణ"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "అంగీకరించు"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS నిర్ధారణ"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "రూపకల్పన స్వరూపణం"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "సంచిక"
+msgid "Edit site notice"
+msgstr "సైటు గమనిక"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS నిర్ధారణ"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5026,12 +5099,12 @@ msgstr "%2$s గుంపు నుండి %1$s వైదొలిగారు
msgid "Fullname: %s"
msgstr "పూర్తిపేరు: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "ప్రాంతం: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "హోంపేజీ: %s"
@@ -5327,6 +5400,11 @@ msgstr ""
msgid "Go"
msgstr "వెళ్ళు"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5467,11 +5545,11 @@ msgstr "వాడుకరిపేరు మరియు సంకేతపద
msgid "Sign up for a new account"
msgstr "కొత్త ఖాతా సృష్టించుకోండి"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "ఈమెయిల్ చిరునామా నిర్ధారణ"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5488,12 +5566,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s ఇప్పుడు %2$sలో మీ నోటీసులని వింటున్నారు."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5518,17 +5596,17 @@ msgstr ""
"----\n"
"మీ ఈమెయిలు చిరునామాని లేదా గమనింపుల ఎంపికలను %8$s వద్ద మార్చుకోండి\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "స్వపరిచయం: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5541,21 +5619,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s స్థితి"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS నిర్ధారణ"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5571,12 +5649,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "%s నుండి కొత్త అంతరంగిక సందేశం"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5595,12 +5673,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr ""
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5621,12 +5699,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) మీకు ఒక నోటీసుని పంపించారు"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5884,10 +5962,6 @@ msgstr "స్పందనలు"
msgid "Favorites"
msgstr "ఇష్టాంశాలు"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "వాడుకరి"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "వచ్చినవి"
@@ -5913,7 +5987,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "చందాలు"
@@ -5921,23 +5995,23 @@ msgstr "చందాలు"
msgid "All subscriptions"
msgstr "అన్ని చందాలు"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "చందాదార్లు"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "అందరు చందాదార్లు"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "వాడుకరి ID"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "సభ్యులైన తేదీ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "అన్ని గుంపులు"
@@ -5978,7 +6052,12 @@ msgstr "ఈ నోటీసుని పునరావృతించాలా?
msgid "Repeat this notice"
msgstr "ఈ నోటీసుని పునరావృతించు"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "ఈ గుంపునుండి ఈ వాడుకరిని నిరోధించు"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6138,47 +6217,63 @@ msgstr "సందేశం"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "వాడుకరి ప్రొఫైలు"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "నిర్వాహకులు"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "కొన్ని క్షణాల క్రితం"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "ఓ నిమిషం క్రితం"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d నిమిషాల క్రితం"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "ఒక గంట క్రితం"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d గంటల క్రితం"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "ఓ రోజు క్రితం"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d రోజుల క్రితం"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "ఓ నెల క్రితం"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d నెలల క్రితం"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "ఒక సంవత్సరం క్రితం"
diff --git a/locale/tr/LC_MESSAGES/statusnet.po b/locale/tr/LC_MESSAGES/statusnet.po
index 71aaa6813..805e55268 100644
--- a/locale/tr/LC_MESSAGES/statusnet.po
+++ b/locale/tr/LC_MESSAGES/statusnet.po
@@ -9,19 +9,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:53+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:04+0000\n"
"Language-Team: Turkish\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: tr\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Kabul et"
@@ -108,7 +109,7 @@ msgstr "Böyle bir durum mesajı yok."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -124,7 +125,7 @@ msgstr "%s ve arkadaşları"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -179,7 +180,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s ve arkadaşları"
@@ -207,11 +208,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Onay kodu bulunamadı."
@@ -583,7 +584,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Hakkında"
@@ -676,18 +677,6 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -698,12 +687,12 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -723,7 +712,7 @@ msgstr "%s için cevaplar"
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%s adli kullanicinin durum mesajlari"
@@ -765,7 +754,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -959,7 +948,7 @@ msgid "Conversation"
msgstr "Yer"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Durum mesajları"
@@ -981,7 +970,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:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1185,8 +1174,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1311,7 +1301,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Avatar bilgisi kaydedilemedi"
@@ -1435,7 +1425,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Geçersiz bir eposta adresi."
@@ -1628,6 +1618,25 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Cannot read file."
msgstr "Böyle bir durum mesajı yok."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Geçersiz büyüklük."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Bize o profili yollamadınız"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Kullanıcının profili yok."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1779,12 +1788,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2371,8 +2386,8 @@ msgstr "Bağlan"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2520,7 +2535,8 @@ msgstr "Yeni parola kaydedilemedi."
msgid "Password saved."
msgstr "Parola kaydedildi."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2645,7 +2661,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Geri al"
@@ -2705,11 +2721,11 @@ msgstr "Geçersiz bir eposta adresi."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "%s adli kullanicinin durum mesajlari"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Geçersiz durum mesajı"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2792,7 +2808,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2818,7 +2834,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Hakkında bölümü çok uzun (azm 140 karakter)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3125,7 +3141,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Eposta"
@@ -3214,7 +3230,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Abone ol"
@@ -3316,6 +3332,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%s için cevaplar"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Bize o profili yollamadınız"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Kullanıcının profili yok."
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3331,7 +3357,9 @@ msgstr "Bize o profili yollamadınız"
msgid "User is already sandboxed."
msgstr "Kullanıcının profili yok."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3355,7 +3383,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3391,8 +3419,8 @@ msgstr "Yer"
msgid "Description"
msgstr "Abonelikler"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "İstatistikler"
@@ -3526,47 +3554,47 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "%s için durum RSS beslemesi"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "Üyelik başlangıcı"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Yarat"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3576,7 +3604,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3585,7 +3613,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3697,149 +3725,137 @@ msgid "User is already silenced."
msgstr "Kullanıcının profili yok."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Geçersiz bir eposta adresi."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Kullanıcı için kaydedilmiş eposta adresi yok."
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Yer"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Durum mesajını kaydederken hata oluştu."
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Yeni durum mesajı"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Yeni durum mesajı"
#: actions/smssettings.php:58
#, fuzzy
@@ -3936,6 +3952,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Abonelikler"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Ayarlar"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
@@ -4144,7 +4220,7 @@ msgstr "Yetkilendirme isteği yok!"
msgid "Unsubscribed"
msgstr "Aboneliği sonlandır"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4344,16 +4420,22 @@ msgstr "Bütün abonelikler"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Bize o profili yollamadınız"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4397,7 +4479,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Kişisel"
@@ -4465,41 +4547,41 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Durum mesajını kaydederken hata oluştu."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4527,7 +4609,12 @@ msgstr "Bu kullanıcıyı zaten takip etmiyorsunuz!"
msgid "Couldn't delete self-subscription."
msgstr "Abonelik silinemedi."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Abonelik silinemedi."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Abonelik silinemedi."
@@ -4536,22 +4623,22 @@ msgstr "Abonelik silinemedi."
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Avatar bilgisi kaydedilemedi"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Abonelik oluşturulamadı."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Abonelik oluşturulamadı."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Abonelik oluşturulamadı."
@@ -4595,192 +4682,185 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Kişisel"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Parolayı değiştir"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Hakkında"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Sunucuya yönlendirme yapılamadı: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Bağlan"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Abonelikler"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Geçersiz büyüklük."
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Çıkış"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Yeni hesap oluştur"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Kayıt"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Giriş"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Yardım"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Yardım"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Ara"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Yeni durum mesajı"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Yeni durum mesajı"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Abonelikler"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Yardım"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Hakkında"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "SSS"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Gizlilik"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Kaynak"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "İletişim"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4789,12 +4869,12 @@ msgstr ""
"**%%site.name%%** [%%site.broughtby%%](%%site.broughtbyurl%%)\" tarafından "
"hazırlanan anında mesajlaşma ağıdır. "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** bir aninda mesajlaşma sosyal ağıdır."
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4805,56 +4885,56 @@ 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:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Yeni durum mesajı"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« Sonra"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Önce »"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4869,95 +4949,86 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Eposta adresi onayı"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Yeni durum mesajı"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Eposta adresi onayı"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Kişisel"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Eposta adresi onayı"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Eposta adresi onayı"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Kabul et"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Eposta adresi onayı"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Eposta adresi onayı"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Kişisel"
+msgid "Edit site notice"
+msgstr "Yeni durum mesajı"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Eposta adresi onayı"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5153,12 +5224,12 @@ msgstr "%1$s'in %2$s'deki durum mesajları "
msgid "Fullname: %s"
msgstr "Tam İsim"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5461,6 +5532,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5608,11 +5684,11 @@ msgstr "Geçersiz kullanıcı adı veya parola."
msgid "Sign up for a new account"
msgstr "Yeni hesap oluştur"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Eposta adresi onayı"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5629,12 +5705,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s %2$s'da durumunuzu takip ediyor"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5655,17 +5731,17 @@ msgstr ""
"Kendisini durumsuz bırakmayın!,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "Hakkında"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5678,21 +5754,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s durum"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5708,12 +5784,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5732,12 +5808,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%1$s %2$s'da durumunuzu takip ediyor"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5758,12 +5834,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6013,10 +6089,6 @@ msgstr "Cevaplar"
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -6042,7 +6114,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Abonelikler"
@@ -6050,24 +6122,24 @@ msgstr "Abonelikler"
msgid "All subscriptions"
msgstr "Bütün abonelikler"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Abone olanlar"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Abone olanlar"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Üyelik başlangıcı"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -6111,7 +6183,12 @@ msgstr "Böyle bir durum mesajı yok."
msgid "Repeat this notice"
msgstr "Böyle bir durum mesajı yok."
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Böyle bir kullanıcı yok."
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6274,47 +6351,62 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Kullanıcının profili yok."
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "birkaç saniye önce"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "yaklaşık bir dakika önce"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "yaklaşık %d dakika önce"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "yaklaşık bir saat önce"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "yaklaşık %d saat önce"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "yaklaşık bir gün önce"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "yaklaşık %d gün önce"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "yaklaşık bir ay önce"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "yaklaşık %d ay önce"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "yaklaşık bir yıl önce"
diff --git a/locale/uk/LC_MESSAGES/statusnet.po b/locale/uk/LC_MESSAGES/statusnet.po
index fd168ba50..78aa5dc23 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-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:56+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:07+0000\n"
"Language-Team: Ukrainian\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); 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"
@@ -23,7 +23,8 @@ msgstr ""
"10< =4 && (n%100<10 or n%100>=20) ? 1 : 2);\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
msgid "Access"
msgstr "Погодитись"
@@ -46,7 +47,6 @@ msgstr ""
#. TRANS: Checkbox label for prohibiting anonymous users from viewing site.
#: actions/accessadminpanel.php:167
-#, fuzzy
msgctxt "LABEL"
msgid "Private"
msgstr "Приватно"
@@ -77,7 +77,6 @@ msgid "Save access settings"
msgstr "Зберегти параметри доступу"
#: actions/accessadminpanel.php:203
-#, fuzzy
msgctxt "BUTTON"
msgid "Save"
msgstr "Зберегти"
@@ -106,7 +105,7 @@ msgstr "Немає такої сторінки"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -122,7 +121,7 @@ msgstr "%1$s та друзі, сторінка %2$d"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -183,7 +182,7 @@ msgstr ""
"«розштовхати» %s або щось йому написати."
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
msgid "You and friends"
msgstr "Ви з друзями"
@@ -210,11 +209,11 @@ msgstr "Оновлення від %1$s та друзів на %2$s!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
msgid "API method not found."
msgstr "API метод не знайдено."
@@ -579,7 +578,7 @@ msgstr ""
"на доступ до Вашого акаунту %4$s лише тим стороннім додаткам, яким Ви "
"довіряєте."
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "Акаунт"
@@ -623,11 +622,11 @@ msgstr "Такого допису немає."
#: actions/apistatusesretweet.php:83
msgid "Cannot repeat your own notice."
-msgstr "Не можу вторувати Вашому власному допису."
+msgstr "Не можу повторити Ваш власний допис."
#: actions/apistatusesretweet.php:91
msgid "Already repeated that notice."
-msgstr "Цьому допису вже вторували."
+msgstr "Цей допис вже повторено."
#: actions/apistatusesshow.php:138
msgid "Status deleted."
@@ -668,18 +667,6 @@ msgstr "%1$s / Обрані від %2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%1$s оновлення обраних від %2$s / %2$s."
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s стрічка"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "Оновлення від %1$s на %2$s!"
-
#: actions/apitimelinementions.php:117
#, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -690,12 +677,12 @@ msgstr "%1$s / Оновленні відповіді %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "%1$s оновив цю відповідь на допис від %2$s / %3$s."
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s загальна стрічка"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "%s оновлення від усіх!"
@@ -703,19 +690,19 @@ msgstr "%s оновлення від усіх!"
#: actions/apitimelineretweetedtome.php:111
#, php-format
msgid "Repeated to %s"
-msgstr "Вторування за %s"
+msgstr "Повторено для %s"
#: actions/apitimelineretweetsofme.php:114
#, php-format
msgid "Repeats of %s"
-msgstr "Вторування %s"
+msgstr "Повторення %s"
#: actions/apitimelinetag.php:102 actions/tag.php:67
#, php-format
msgid "Notices tagged with %s"
msgstr "Дописи позначені з %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Оновлення позначені з %1$s на %2$s!"
@@ -755,7 +742,7 @@ msgstr "Ви можете завантажити аватару. Максима
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "Користувач з невідповідним профілем"
@@ -941,7 +928,7 @@ msgid "Conversation"
msgstr "Розмова"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Дописи"
@@ -960,7 +947,7 @@ msgstr "Ви не є власником цього додатку."
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr "Виникли певні проблеми з токеном поточної сесії."
@@ -1154,8 +1141,9 @@ msgstr "Повернутись до початкових налаштувань"
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1271,7 +1259,7 @@ msgstr "опис надто довгий (%d знаків максимум)."
msgid "Could not update group."
msgstr "Не вдалося оновити групу."
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
msgid "Could not create aliases."
msgstr "Неможна призначити додаткові імена."
@@ -1393,7 +1381,7 @@ msgid "Cannot normalize that email address"
msgstr "Не можна полагодити цю поштову адресу"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Це недійсна електронна адреса."
@@ -1584,6 +1572,22 @@ msgstr "Такого файлу немає."
msgid "Cannot read file."
msgstr "Не можу прочитати файл."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+msgid "Invalid role."
+msgstr "Невірна роль."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr "Цю роль вже зарезервовано і не може бути встановлено."
+
+#: actions/grantrole.php:75
+msgid "You cannot grant user roles on this site."
+msgstr "Ви не можете надавати користувачеві жодних ролей на цьому сайті."
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr "Користувач вже має цю роль."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1731,12 +1735,18 @@ msgstr "Зробити адміном"
msgid "Make this user an admin"
msgstr "Надати цьому користувачеві права адміністратора"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s стрічка"
+
#: actions/grouprss.php:140
#, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Оновлення членів %1$s на %2$s!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "Групи"
@@ -1999,7 +2009,6 @@ msgstr "Можна додати персональне повідомлення
#. TRANS: Send button for inviting friends
#: actions/invite.php:198
-#, fuzzy
msgctxt "BUTTON"
msgid "Send"
msgstr "Надіслати"
@@ -2361,8 +2370,8 @@ msgstr "тип змісту "
msgid "Only "
msgstr "Лише "
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Такий формат даних не підтримується."
@@ -2503,7 +2512,8 @@ msgstr "Неможна зберегти новий пароль."
msgid "Password saved."
msgstr "Пароль збережено."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr "Шлях"
@@ -2623,7 +2633,7 @@ msgstr "Директорія фонів"
msgid "SSL"
msgstr "SSL-шифрування"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr "Ніколи"
@@ -2679,11 +2689,11 @@ msgstr "Це недійсний особистий теґ: %s"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Користувачі з особистим теґом %1$s — сторінка %2$d"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Недійсний зміст допису"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr "Ліцензія допису «%1$s» є несумісною з ліцензією сайту «%2$s»."
@@ -2763,7 +2773,7 @@ msgstr ""
"Позначте себе теґами (літери, цифри, -, . та _), відокремлюючи кожен комою "
"або пробілом"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Мова"
@@ -2790,7 +2800,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "Ви перевищили ліміт (%d знаків максимум)."
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "Часовий пояс не обрано."
@@ -3111,7 +3121,7 @@ msgid "Same as password above. Required."
msgstr "Такий само, як і пароль вище. Неодмінно."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Пошта"
@@ -3216,7 +3226,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL-адреса Вашого профілю на іншому сумісному сервісі"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Підписатись"
@@ -3239,7 +3249,7 @@ msgstr "Не вдалося отримати токен запиту."
#: actions/repeat.php:57
msgid "Only logged-in users can repeat notices."
-msgstr "Лише користувачі, що знаходяться у системі, можуть вторувати дописам."
+msgstr "Лише користувачі, що знаходяться у системі, можуть повторювати дописи."
#: actions/repeat.php:64 actions/repeat.php:71
msgid "No notice specified."
@@ -3247,19 +3257,19 @@ msgstr "Зазначеного допису немає."
#: actions/repeat.php:76
msgid "You can't repeat your own notice."
-msgstr "Ви не можете вторувати своїм власним дописам."
+msgstr "Ви не можете повторювати свої власні дописи."
#: actions/repeat.php:90
msgid "You already repeated that notice."
-msgstr "Ви вже вторували цьому допису."
+msgstr "Ви вже повторили цей допис."
#: actions/repeat.php:114 lib/noticelist.php:674
msgid "Repeated"
-msgstr "Вторування"
+msgstr "Повторено"
#: actions/repeat.php:119
msgid "Repeated!"
-msgstr "Вторувати!"
+msgstr "Повторено!"
#: actions/replies.php:126 actions/repliesrss.php:68
#: lib/personalgroupnav.php:105
@@ -3319,6 +3329,14 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "Відповіді до %1$s на %2$s!"
+#: actions/revokerole.php:75
+msgid "You cannot revoke user roles on this site."
+msgstr "Ви не можете позбавляти користувачів ролей на цьому сайті."
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr "Користувач не має цієї ролі."
+
#: actions/rsd.php:146 actions/version.php:157
msgid "StatusNet"
msgstr "StatusNet"
@@ -3331,7 +3349,9 @@ msgstr "Ви не можете нікого ізолювати на цьому
msgid "User is already sandboxed."
msgstr "Користувача ізольовано доки набереться уму-розуму."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr "Сесії"
@@ -3355,7 +3375,7 @@ msgstr "Сесія наладки"
msgid "Turn on debugging output for sessions."
msgstr "Виводити дані сесії наладки."
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
msgid "Save site settings"
msgstr "Зберегти налаштування сайту"
@@ -3386,8 +3406,8 @@ msgstr "Організація"
msgid "Description"
msgstr "Опис"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Статистика"
@@ -3529,45 +3549,45 @@ msgstr "Додаткові імена"
msgid "Group actions"
msgstr "Діяльність групи"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Стрічка дописів групи %s (RSS 1.0)"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Стрічка дописів групи %s (RSS 2.0)"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Стрічка дописів групи %s (Atom)"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "FOAF для групи %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Учасники"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(Пусто)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "Всі учасники"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
msgid "Created"
msgstr "Створено"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3582,7 +3602,7 @@ msgstr ""
"короткі дописи про своє життя та інтереси. [Приєднуйтесь](%%action.register%"
"%) зараз і долучіться до спілкування! ([Дізнатися більше](%%doc.help%%))"
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3595,7 +3615,7 @@ msgstr ""
"забезпеченні [StatusNet](http://status.net/). Члени цієї групи роблять "
"короткі дописи про своє життя та інтереси. "
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr "Адміни"
@@ -3706,7 +3726,7 @@ msgstr ""
#: actions/showstream.php:305
#, php-format
msgid "Repeat of %s"
-msgstr "Вторування %s"
+msgstr "Повторення за %s"
#: actions/silence.php:65 actions/unsilence.php:65
msgid "You cannot silence users on this site."
@@ -3717,150 +3737,136 @@ msgid "User is already silenced."
msgstr "Користувачу наразі заклеїли рота скотчем."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
-msgstr "Загальні налаштування цього сайту StatusNet."
+msgid "Basic settings for this StatusNet site"
+msgstr "Основні налаштування цього сайту StatusNet"
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr "Ім’я сайту не може бути порожнім."
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
msgid "You must have a valid contact email address."
msgstr "Електронна адреса має бути чинною."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr "Невідома мова «%s»."
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr "Помилковий снепшот URL."
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr "Помилкове значення снепшоту."
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr "Частота повторення снепшотів має містити цифру."
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr "Ліміт текстових повідомлень становить 140 знаків."
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
"Часове обмеження при надсиланні дублікату повідомлення має становити від 1 і "
"більше секунд."
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr "Основні"
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
msgid "Site name"
msgstr "Назва сайту"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr "Назва Вашого сайту, штибу \"Мікроблоґи компанії ...\""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr "Надано"
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr "Текст використаний для посілань кредитів унизу кожної сторінки"
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr "Наданий URL"
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr "URL використаний для посілань кредитів унизу кожної сторінки"
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
msgid "Contact email address for your site"
msgstr "Контактна електронна адреса для Вашого сайту"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
msgid "Local"
msgstr "Локаль"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr "Часовий пояс за замовчуванням"
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr "Часовий пояс за замовчуванням для сайту; зазвичай UTC."
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr "Мова сайту за замовчуванням"
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr "Снепшоти"
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
-msgstr "Випадково під час веб-хіта"
-
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
-msgstr "Згідно плану робіт"
-
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
-msgstr "Снепшоти даних"
-
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
-msgstr "Коли надсилати статистичні дані до серверів status.net"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
+msgstr "Мова за замовчуванням"
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
-msgstr "Частота"
-
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
-msgstr "Снепшоти надсилатимуться раз на N веб-хітів"
-
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr "Звітня URL-адреса"
-
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr "Снепшоти надсилатимуться на цю URL-адресу"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
+msgstr ""
+"Мова сайту на випадок, коли автовизначення мови за настройками браузера не "
+"доступно"
-#: actions/siteadminpanel.php:315
+#: actions/siteadminpanel.php:271
msgid "Limits"
msgstr "Обмеження"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Text limit"
msgstr "Текстові обмеження"
-#: actions/siteadminpanel.php:318
+#: actions/siteadminpanel.php:274
msgid "Maximum number of characters for notices."
msgstr "Максимальна кількість знаків у дописі."
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "Dupe limit"
msgstr "Часове обмеження"
-#: actions/siteadminpanel.php:322
+#: actions/siteadminpanel.php:278
msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
"Як довго користувачі мають зачекати (в секундах) аби надіслати той самий "
"допис ще раз."
+#: actions/sitenoticeadminpanel.php:56
+msgid "Site Notice"
+msgstr "Повідомлення сайту"
+
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
+msgstr "Змінити повідомлення сайту"
+
+#: actions/sitenoticeadminpanel.php:103
+msgid "Unable to save site notice."
+msgstr "Не вдається зберегти повідомлення сайту."
+
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
+msgstr "Максимальна довжина повідомлення сайту становить 255 символів"
+
+#: actions/sitenoticeadminpanel.php:176
+msgid "Site notice text"
+msgstr "Текст повідомлення сайту"
+
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
+msgstr "Текст повідомлення сайту (255 символів максимум; HTML дозволено)"
+
+#: actions/sitenoticeadminpanel.php:198
+msgid "Save site notice"
+msgstr "Зберегти повідомлення сайту"
+
#: actions/smssettings.php:58
msgid "SMS settings"
msgstr "Налаштування СМС"
@@ -3960,6 +3966,64 @@ msgstr ""
msgid "No code entered"
msgstr "Код не введено"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr "Снепшоти"
+
+#: actions/snapshotadminpanel.php:65
+msgid "Manage snapshot configuration"
+msgstr "Керування конфігурацією знімку"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr "Помилкове значення снепшоту."
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr "Частота повторення снепшотів має містити цифру."
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr "Помилковий снепшот URL."
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr "Випадково під час веб-хіта"
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr "Згідно плану робіт"
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr "Снепшоти даних"
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr "Коли надсилати статистичні дані до серверів status.net"
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr "Частота"
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr "Снепшоти надсилатимуться раз на N веб-хітів"
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr "Звітня URL-адреса"
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr "Снепшоти надсилатимуться на цю URL-адресу"
+
+#: actions/snapshotadminpanel.php:248
+msgid "Save snapshot settings"
+msgstr "Зберегти налаштування знімку"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr "Ви не підписані до цього профілю."
@@ -4167,7 +4231,7 @@ msgstr "У запиті відсутній ID профілю."
msgid "Unsubscribed"
msgstr "Відписано"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4175,7 +4239,6 @@ msgstr "Ліцензія «%1$s» не відповідає ліцензії с
#. TRANS: User admin panel title
#: actions/useradminpanel.php:59
-#, fuzzy
msgctxt "TITLE"
msgid "User"
msgstr "Користувач"
@@ -4370,17 +4433,23 @@ msgstr "Групи %1$s, сторінка %2$d"
msgid "Search for more groups"
msgstr "Шукати групи ще"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr "%s не є учасником жодної групи."
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
"Спробуйте [знайти якісь групи](%%action.groupsearch%%) і приєднайтеся до них."
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "Оновлення від %1$s на %2$s!"
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4436,7 +4505,7 @@ msgstr ""
msgid "Plugins"
msgstr "Додатки"
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
msgid "Version"
msgstr "Версія"
@@ -4501,22 +4570,22 @@ msgstr "Не можна оновити повідомлення з новим UR
msgid "DB error inserting hashtag: %s"
msgstr "Помилка бази даних при додаванні теґу: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
msgid "Problem saving notice. Too long."
msgstr "Проблема при збереженні допису. Надто довге."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
msgid "Problem saving notice. Unknown user."
msgstr "Проблема при збереженні допису. Невідомий користувач."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
"Дуже багато дописів за короткий термін; ходіть подихайте повітрям і "
"повертайтесь за кілька хвилин."
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
@@ -4524,19 +4593,19 @@ msgstr ""
"Дуже багато повідомлень за короткий термін; ходіть подихайте повітрям і "
"повертайтесь за кілька хвилин."
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "Вам заборонено надсилати дописи до цього сайту."
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Проблема при збереженні допису."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
msgid "Problem saving group inbox."
msgstr "Проблема при збереженні вхідних дописів для групи."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr "RT @%1$s %2$s"
@@ -4561,7 +4630,11 @@ msgstr "Не підписано!"
msgid "Couldn't delete self-subscription."
msgstr "Не можу видалити самопідписку."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+msgid "Couldn't delete subscription OMB token."
+msgstr "Не вдається видалити токен підписки OMB."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Не вдалося видалити підписку."
@@ -4570,19 +4643,19 @@ msgstr "Не вдалося видалити підписку."
msgid "Welcome to %1$s, @%2$s!"
msgstr "Вітаємо на %1$s, @%2$s!"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "Не вдалося створити нову групу."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
msgid "Could not set group URI."
msgstr "Не вдалося встановити URI групи."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
msgid "Could not set group membership."
msgstr "Не вдалося встановити членство."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
msgid "Could not save local group info."
msgstr "Не вдалося зберегти інформацію про локальну групу."
@@ -4623,194 +4696,170 @@ msgstr "%1$s — %2$s"
msgid "Untitled page"
msgstr "Сторінка без заголовку"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "Відправна навігація по сайту"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
-#, fuzzy
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "Персональний профіль і стрічка друзів"
-#: lib/action.php:442
-#, fuzzy
+#: lib/action.php:433
msgctxt "MENU"
msgid "Personal"
msgstr "Особисте"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
-#, fuzzy
+#: lib/action.php:435
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Змінити електронну адресу, аватару, пароль, профіль"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Акаунт"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
-#, fuzzy
+#: lib/action.php:440
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "З’єднання з сервісами"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "З’єднання"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
-#, fuzzy
+#: lib/action.php:446
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Змінити конфігурацію сайту"
-#: lib/action.php:460
-#, fuzzy
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr "Адмін"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
-#, fuzzy, php-format
+#: lib/action.php:453
+#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "Запросіть друзів та колег приєднатись до Вас на %s"
-#: lib/action.php:467
-#, fuzzy
+#: lib/action.php:456
msgctxt "MENU"
msgid "Invite"
msgstr "Запросити"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
-#, fuzzy
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "Вийти з сайту"
-#: lib/action.php:476
-#, fuzzy
+#: lib/action.php:465
msgctxt "MENU"
msgid "Logout"
msgstr "Вийти"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
-#, fuzzy
+#: lib/action.php:470
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Створити новий акаунт"
-#: lib/action.php:484
-#, fuzzy
+#: lib/action.php:473
msgctxt "MENU"
msgid "Register"
msgstr "Реєстрація"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
-#, fuzzy
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "Увійти на сайт"
-#: lib/action.php:490
-#, fuzzy
+#: lib/action.php:479
msgctxt "MENU"
msgid "Login"
msgstr "Увійти"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
-#, fuzzy
+#: lib/action.php:482
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Допоможіть!"
-#: lib/action.php:496
-#, fuzzy
+#: lib/action.php:485
msgctxt "MENU"
msgid "Help"
-msgstr "Допомога"
+msgstr "Довідка"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
-#, fuzzy
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "Пошук людей або текстів"
-#: lib/action.php:502
-#, fuzzy
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr "Пошук"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
msgid "Site notice"
msgstr "Зауваження сайту"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "Огляд"
-#: lib/action.php:656
+#: lib/action.php:645
msgid "Page notice"
msgstr "Зауваження сторінки"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr "Другорядна навігація по сайту"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Допомога"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Про"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "ЧаПи"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr "Умови"
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Конфіденційність"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Джерело"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Контакт"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr "Бедж"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "Ліцензія програмного забезпечення StatusNet"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4819,12 +4868,12 @@ msgstr ""
"**%%site.name%%** — це сервіс мікроблоґів наданий вам [%%site.broughtby%%](%%"
"site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** — це сервіс мікроблоґів. "
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4835,54 +4884,54 @@ msgstr ""
"для мікроблоґів, версія %s, доступному під [GNU Affero General Public "
"License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
msgid "Site content license"
msgstr "Ліцензія змісту сайту"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr "Зміст і дані %1$s є приватними і конфіденційними."
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr "Авторські права на зміст і дані належать %1$s. Всі права захищено."
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
"Авторські права на зміст і дані належать розробникам. Всі права захищено."
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "Всі "
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "ліцензія."
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "Нумерація сторінок"
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr "Вперед"
-#: lib/action.php:1180
+#: lib/action.php:1169
msgid "Before"
msgstr "Назад"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr "Поки що не можу обробити віддалений контент."
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr "Поки що не можу обробити вбудований XML контент."
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr "Поки що не можу обробити вбудований контент Base64."
@@ -4897,91 +4946,76 @@ msgid "Changes to that panel are not allowed."
msgstr "Для цієї панелі зміни не припустимі."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr "showForm() не виконано."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr "saveSettings() не виконано."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr "Немає можливості видалити налаштування дизайну."
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
msgid "Basic site configuration"
msgstr "Основна конфігурація сайту"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
-#, fuzzy
+#: lib/adminpanelaction.php:350
msgctxt "MENU"
msgid "Site"
msgstr "Сайт"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
msgid "Design configuration"
msgstr "Конфігурація дизайну"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
-#, fuzzy
+#: lib/adminpanelaction.php:358
msgctxt "MENU"
msgid "Design"
msgstr "Дизайн"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
msgid "User configuration"
msgstr "Конфігурація користувача"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "Користувач"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
msgid "Access configuration"
msgstr "Прийняти конфігурацію"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Погодитись"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
msgid "Paths configuration"
msgstr "Конфігурація шляху"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-#, fuzzy
-msgctxt "MENU"
-msgid "Paths"
-msgstr "Шлях"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
msgid "Sessions configuration"
msgstr "Конфігурація сесій"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
-#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Сесії"
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
+msgid "Edit site notice"
+msgstr "Редагувати повідомлення сайту"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+msgid "Snapshots configuration"
+msgstr "Конфігурація знімків"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5172,12 +5206,12 @@ msgstr "%1$s залишив групу %2$s"
msgid "Fullname: %s"
msgstr "Повне ім’я: %s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "Локація: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "Веб-сторінка: %s"
@@ -5203,20 +5237,20 @@ msgstr "Помилка при відправці прямого повідомл
#: lib/command.php:413
msgid "Cannot repeat your own notice"
-msgstr "Не можу вторувати Вашому власному допису"
+msgstr "Не можу повторити Ваш власний допис"
#: lib/command.php:418
msgid "Already repeated that notice"
-msgstr "Цьому допису вже вторували"
+msgstr "Цей допис вже повторили"
#: lib/command.php:426
#, php-format
msgid "Notice from %s repeated"
-msgstr "Допису від %s вторували"
+msgstr "Допис %s повторили"
#: lib/command.php:428
msgid "Error repeating notice."
-msgstr "Помилка із вторуванням допису."
+msgstr "Помилка при повторенні допису."
#: lib/command.php:482
#, php-format
@@ -5510,6 +5544,11 @@ msgstr "Оберіть теґ до звуженого списку"
msgid "Go"
msgstr "Вперед"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr "Надати цьому користувачеві роль \"%s\""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr "URL-адреса веб-сторінки, блоґу групи, або тематичного блоґу"
@@ -5646,11 +5685,11 @@ msgstr "Увійти використовуючи ім’я та пароль"
msgid "Sign up for a new account"
msgstr "Зареєструвати новий акаунт"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Підтвердження електронної адреси"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5679,12 +5718,12 @@ msgstr ""
"Дякуємо за Ваш час \n"
"%s\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s тепер слідкує за Вашими дописами на %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5709,17 +5748,17 @@ msgstr ""
"----\n"
"Змінити електронну адресу або умови сповіщення — %8$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, php-format
msgid "Bio: %s"
msgstr "Про себе: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Нова електронна адреса для надсилання повідомлень на %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5740,21 +5779,21 @@ msgstr ""
"Щиро Ваші,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s статус"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Підтвердження СМС"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "Вас спробував «розштовхати» %s"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5781,12 +5820,12 @@ msgstr ""
"З найкращими побажаннями,\n"
"%4$s\n"
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Нове приватне повідомлення від %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5819,12 +5858,12 @@ msgstr ""
"З найкращими побажаннями,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s (@%s) додав(ла) Ваш допис обраних"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5861,12 +5900,12 @@ msgstr ""
"Щиро Ваші,\n"
"%6$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr "%s (@%s) пропонує до Вашої уваги наступний допис"
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6067,7 +6106,7 @@ msgstr "в контексті"
#: lib/noticelist.php:601
msgid "Repeated by"
-msgstr "Вторуванні"
+msgstr "Повторено"
#: lib/noticelist.php:628
msgid "Reply to this notice"
@@ -6079,7 +6118,7 @@ msgstr "Відповісти"
#: lib/noticelist.php:673
msgid "Notice repeated"
-msgstr "Допис вторували"
+msgstr "Допис повторили"
#: lib/nudgeform.php:116
msgid "Nudge this user"
@@ -6125,10 +6164,6 @@ msgstr "Відповіді"
msgid "Favorites"
msgstr "Обрані"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "Користувач"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Вхідні"
@@ -6154,7 +6189,7 @@ msgstr "Теґи у дописах %s"
msgid "Unknown"
msgstr "Невідомо"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Підписки"
@@ -6162,23 +6197,23 @@ msgstr "Підписки"
msgid "All subscriptions"
msgstr "Всі підписки"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Підписчики"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
msgid "All subscribers"
msgstr "Всі підписчики"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr "ІД"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "З нами від"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "Всі групи"
@@ -6216,9 +6251,14 @@ msgstr "Повторити цей допис?"
#: lib/repeatform.php:132
msgid "Repeat this notice"
-msgstr "Вторувати цьому допису"
+msgstr "Повторити цей допис"
+
+#: lib/revokeroleform.php:91
+#, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Відкликати роль \"%s\" для цього користувача"
-#: lib/router.php:668
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr "Користувача для однокористувацького режиму не визначено."
@@ -6372,47 +6412,61 @@ msgstr "Повідомлення"
msgid "Moderate"
msgstr "Модерувати"
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+msgid "User role"
+msgstr "Роль користувача"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr "Адміністратор"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr "Модератор"
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "мить тому"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "хвилину тому"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "близько %d хвилин тому"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "годину тому"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "близько %d годин тому"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "день тому"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "близько %d днів тому"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "місяць тому"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "близько %d місяців тому"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "рік тому"
diff --git a/locale/vi/LC_MESSAGES/statusnet.po b/locale/vi/LC_MESSAGES/statusnet.po
index d64fae91d..59751aa5d 100644
--- a/locale/vi/LC_MESSAGES/statusnet.po
+++ b/locale/vi/LC_MESSAGES/statusnet.po
@@ -7,19 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:03:59+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:10+0000\n"
"Language-Team: Vietnamese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: vi\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "Chấp nhận"
@@ -107,7 +108,7 @@ msgstr "Không có tin nhắn nào."
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -123,7 +124,7 @@ msgstr "%s và bạn bè"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -178,7 +179,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s và bạn bè"
@@ -206,11 +207,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "Phương thức API không tìm thấy!"
@@ -585,7 +586,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "Giới thiệu"
@@ -677,18 +678,6 @@ msgstr "Tìm kiếm các tin nhắn ưa thích của %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "Tất cả các cập nhật của %s"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, fuzzy, php-format
-msgid "%s timeline"
-msgstr "Dòng tin nhắn của %s"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -699,12 +688,12 @@ msgstr "%1$s / Các cập nhật đang trả lời tới %2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, fuzzy, php-format
msgid "%s public timeline"
msgstr "Dòng tin công cộng"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 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!"
@@ -724,7 +713,7 @@ msgstr "Trả lời cho %s"
msgid "Notices tagged with %s"
msgstr "Thông báo được gắn thẻ %s"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "Dòng tin nhắn cho %s"
@@ -768,7 +757,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
#, fuzzy
msgid "User without matching profile"
msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
@@ -963,7 +952,7 @@ msgid "Conversation"
msgstr "Không có mã số xác nhận."
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "Tin nhắn"
@@ -985,7 +974,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:1228
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "Có lỗi xảy ra khi thao tác. Hãy thử lại lần nữa."
@@ -1197,8 +1186,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1330,7 +1320,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:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "Không thể tạo favorite."
@@ -1461,7 +1451,7 @@ msgid "Cannot normalize that email address"
msgstr "Không thể bình thường hóa địa chỉ GTalk này"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "Địa chỉ email không hợp lệ."
@@ -1667,6 +1657,25 @@ msgstr "Không có tin nhắn nào."
msgid "Cannot read file."
msgstr "Không có tin nhắn nào."
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "Kích thước không hợp lệ."
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "Bạn đã theo những người này:"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "Người dùng không có thông tin."
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1824,12 +1833,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr "Kênh mà bạn tham gia"
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, fuzzy, php-format
+msgid "%s timeline"
+msgstr "Dòng tin nhắn của %s"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "Dòng tin nhắn cho %s"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
#, fuzzy
msgid "Groups"
@@ -2460,8 +2475,8 @@ msgstr "Kết nối"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "Không hỗ trợ định dạng dữ liệu này."
@@ -2613,7 +2628,8 @@ msgstr "Không thể lưu mật khẩu mới"
msgid "Password saved."
msgstr "Đã lưu mật khẩu."
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2745,7 +2761,7 @@ msgstr "Background Theme:"
msgid "SSL"
msgstr "SMS"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "Khôi phục"
@@ -2804,11 +2820,11 @@ msgstr "Địa chỉ email không hợp lệ."
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "Dòng tin nhắn cho %s"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "Nội dung tin nhắn không hợp lệ"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2888,7 +2904,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "Ngôn ngữ"
@@ -2914,7 +2930,7 @@ msgstr "Tự động theo những người nào đăng ký theo tôi"
msgid "Bio is too long (max %d chars)."
msgstr "Lý lịch quá dài (không quá 140 ký tự)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3228,7 +3244,7 @@ msgid "Same as password above. Required."
msgstr "Cùng mật khẩu ở trên. Bắt buộc."
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "Email"
@@ -3332,7 +3348,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "URL trong hồ sơ cá nhân của bạn ở trên các trang microblogging khác"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "Theo bạn này"
@@ -3435,6 +3451,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "%s chào mừng bạn "
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "Bạn đã theo những người này:"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "Hồ sơ ở nơi khác không khớp với hồ sơ này của bạn"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3450,7 +3476,9 @@ msgstr "Bạn đã theo những người này:"
msgid "User is already sandboxed."
msgstr "Người dùng không có thông tin."
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3474,7 +3502,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3510,8 +3538,8 @@ msgstr "Thư mời đã gửi"
msgid "Description"
msgstr "Mô tả"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "Số liệu thống kê"
@@ -3647,47 +3675,47 @@ msgstr ""
msgid "Group actions"
msgstr "Mã nhóm"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "Dòng tin nhắn cho %s"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "Hộp thư đi của %s"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
msgid "Members"
msgstr "Thành viên"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
#, fuzzy
msgid "All members"
msgstr "Thành viên"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "Tạo"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3697,7 +3725,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3706,7 +3734,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3820,150 +3848,139 @@ msgid "User is already silenced."
msgstr "Người dùng không có thông tin."
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "Địa chỉ email không hợp lệ."
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "Dia chi email moi de gui tin nhan den %s"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "Thành phố"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "Ngôn ngữ bạn thích"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "Tin mới nhất"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "Không thể lưu thông tin Twitter của bạn!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "Thông báo mới"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "Thông báo mới"
#: actions/smssettings.php:58
#, fuzzy
@@ -4075,6 +4092,66 @@ msgstr ""
msgid "No code entered"
msgstr "Không có mã nào được nhập"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "Tôi theo"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "Thay đổi hình đại diện"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
@@ -4284,7 +4361,7 @@ msgstr "Không có URL cho hồ sơ để quay về."
msgid "Unsubscribed"
msgstr "Hết theo"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4493,16 +4570,22 @@ msgstr "Thành viên"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "Bạn chưa cập nhật thông tin riêng"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4546,7 +4629,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "Cá nhân"
@@ -4617,41 +4700,41 @@ msgstr "Không thể cập nhật thông tin user với địa chỉ email đã
msgid "DB error inserting hashtag: %s"
msgstr "Lỗi cơ sở dữ liệu khi chèn trả lời: %s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "Có lỗi xảy ra khi lưu tin nhắn."
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%s (%s)"
@@ -4679,7 +4762,12 @@ msgstr "Chưa đăng nhận!"
msgid "Couldn't delete self-subscription."
msgstr "Không thể xóa đăng nhận."
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "Không thể xóa đăng nhận."
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "Không thể xóa đăng nhận."
@@ -4688,22 +4776,22 @@ msgstr "Không thể xóa đăng nhận."
msgid "Welcome to %1$s, @%2$s!"
msgstr "%s chào mừng bạn "
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "Không thể tạo favorite."
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "Không thể tạo đăng nhận."
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "Không thể tạo đăng nhận."
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "Không thể tạo đăng nhận."
@@ -4748,62 +4836,54 @@ msgstr "%s (%s)"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "Cá nhân"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "Thay đổi mật khẩu của bạn"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "Giới thiệu"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "Không thể chuyển đến máy chủ: %s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "Kết nối"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "Tôi theo"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
@@ -4811,132 +4891,133 @@ msgstr ""
"Điền địa chỉ email và nội dung tin nhắn để gửi thư mời bạn bè và đồng nghiệp "
"của bạn tham gia vào dịch vụ này."
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "Thư mời"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "Thoát"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "Tạo tài khoản mới"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "Đăng ký"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "Đăng nhập"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "Hướng dẫn"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "Hướng dẫn"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "Tìm kiếm"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "Thông báo mới"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "Thông báo mới"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "Tôi theo"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "Hướng dẫn"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "Giới thiệu"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "Riêng tư"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "Nguồn"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "Liên hệ"
-#: lib/action.php:782
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "Tin đã gửi"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4945,12 +5026,12 @@ msgstr ""
"**%%site.name%%** là dịch vụ gửi tin nhắn được cung cấp từ [%%site.broughtby%"
"%](%%site.broughtbyurl%%). "
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** là dịch vụ gửi tin nhắn. "
-#: lib/action.php:817
+#: lib/action.php:806
#, fuzzy, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4961,56 +5042,56 @@ msgstr ""
"quyền [GNU Affero General Public License](http://www.fsf.org/licensing/"
"licenses/agpl-3.0.html)."
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "Tìm theo nội dung của tin nhắn"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "Sau"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "Trước"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -5027,96 +5108,87 @@ msgid "Changes to that panel are not allowed."
msgstr "Biệt hiệu không được cho phép."
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "Không thể lưu thông tin Twitter của bạn!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "Xac nhan dia chi email"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "Thư mời"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "Xác nhận SMS"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "Cá nhân"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "Xác nhận SMS"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "Xác nhận SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "Chấp nhận"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "Xác nhận SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "Xác nhận SMS"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "Cá nhân"
+msgid "Edit site notice"
+msgstr "Thông báo mới"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "Xác nhận SMS"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5314,12 +5386,12 @@ msgstr "%s và nhóm"
msgid "Fullname: %s"
msgstr "Tên đầy đủ"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, fuzzy, php-format
msgid "Location: %s"
msgstr "Thành phố: %s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, fuzzy, php-format
msgid "Homepage: %s"
msgstr "Trang chủ hoặc Blog: %s"
@@ -5630,6 +5702,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5779,11 +5856,11 @@ msgstr "Sai tên đăng nhập hoặc mật khẩu."
msgid "Sign up for a new account"
msgstr "Tạo tài khoản mới"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "Xac nhan dia chi email"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, fuzzy, php-format
msgid ""
"Hey, %s.\n"
@@ -5815,12 +5892,12 @@ msgstr ""
"%4$s\n"
"\n"
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s đang theo dõi lưu ý của bạn trên %2$s."
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5841,17 +5918,17 @@ msgstr ""
"Người bạn trung thành của bạn,\n"
"%4$s.\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "Thành phố: %s"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "Dia chi email moi de gui tin nhan den %s"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5872,21 +5949,21 @@ msgstr ""
"Chúc sức khỏe,\n"
"%4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, fuzzy, php-format
msgid "%s status"
msgstr "Trạng thái của %1$s vào %2$s"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "Xác nhận SMS"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5902,12 +5979,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "Bạn có tin nhắn riêng từ %s"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5940,12 +6017,12 @@ msgstr ""
"Chúc sức khỏe,\n"
"%5$s\n"
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s da them tin nhan cua ban vao danh sach tin nhan ua thich"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, fuzzy, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5979,12 +6056,12 @@ msgstr ""
"Chúc sức khỏe,\n"
"%5$s\n"
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6241,10 +6318,6 @@ msgstr "Trả lời"
msgid "Favorites"
msgstr "Ưa thích"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "Hộp thư đến"
@@ -6271,7 +6344,7 @@ msgstr "cảnh báo tin nhắn"
msgid "Unknown"
msgstr "Không tìm thấy action"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "Tôi theo bạn này"
@@ -6279,24 +6352,24 @@ msgstr "Tôi theo bạn này"
msgid "All subscriptions"
msgstr "Tất cả đăng nhận"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "Bạn này theo tôi"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "Bạn này theo tôi"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "Gia nhập từ"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
#, fuzzy
msgid "All groups"
msgstr "Nhóm"
@@ -6343,7 +6416,12 @@ msgstr "Trả lời tin nhắn này"
msgid "Repeat this notice"
msgstr "Trả lời tin nhắn này"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "Ban user"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6515,47 +6593,62 @@ msgstr "Tin mới nhất"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "Hồ sơ"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "vài giây trước"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "1 phút trước"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d phút trước"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "1 giờ trước"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d giờ trước"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "1 ngày trước"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d ngày trước"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "1 tháng trước"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d tháng trước"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "1 năm trước"
diff --git a/locale/zh_CN/LC_MESSAGES/statusnet.po b/locale/zh_CN/LC_MESSAGES/statusnet.po
index 45fdfe6dc..cc1761616 100644
--- a/locale/zh_CN/LC_MESSAGES/statusnet.po
+++ b/locale/zh_CN/LC_MESSAGES/statusnet.po
@@ -10,19 +10,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:04:02+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:13+0000\n"
"Language-Team: Simplified Chinese\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: MediaWiki 1.17alpha (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hans\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "接受"
@@ -109,7 +110,7 @@ msgstr "没有该页面"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -125,7 +126,7 @@ msgstr "%s 及好友"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -180,7 +181,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s 及好友"
@@ -208,11 +209,11 @@ msgstr "来自%2$s 上 %1$s 和好友的更新!"
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "API 方法未实现!"
@@ -583,7 +584,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
msgid "Account"
msgstr "帐号"
@@ -675,18 +676,6 @@ msgstr "%s 的收藏 / %s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "%s 收藏了 %s 的 %s 通告。"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr "%s 时间表"
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr "%2$s 上 %1$s 的更新!"
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -697,12 +686,12 @@ msgstr "%1$s / 回复 %2$s 的消息"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr "回复 %2$s / %3$s 的 %1$s 更新。"
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr "%s 公众时间表"
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr "来自所有人的 %s 消息!"
@@ -722,7 +711,7 @@ msgstr "%s 的回复"
msgid "Notices tagged with %s"
msgstr "带 %s 标签的通告"
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "%2$s 上 %1$s 的更新!"
@@ -764,7 +753,7 @@ msgstr "您可以在这里上传个人头像。"
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr "找不到匹配的用户。"
@@ -959,7 +948,7 @@ msgid "Conversation"
msgstr "确认码"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr "通告"
@@ -981,7 +970,7 @@ msgstr "您未告知此个人信息"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
#, fuzzy
msgid "There was a problem with your session token."
msgstr "会话标识有问题,请重试。"
@@ -1189,8 +1178,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1318,7 +1308,7 @@ msgstr "描述过长(不能超过140字符)。"
msgid "Could not update group."
msgstr "无法更新组"
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "无法创建收藏。"
@@ -1444,7 +1434,7 @@ msgid "Cannot normalize that email address"
msgstr "无法识别此电子邮件"
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "不是有效的电子邮件。"
@@ -1643,6 +1633,25 @@ msgstr "没有这份通告。"
msgid "Cannot read file."
msgstr "没有这份通告。"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "大小不正确。"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "无法向此用户发送消息。"
+
+#: actions/grantrole.php:82
+#, fuzzy
+msgid "User already has this role."
+msgstr "用户没有个人信息。"
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1801,12 +1810,18 @@ msgstr "admin管理员"
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr "%s 时间表"
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "%2$s 上 %1$s 的更新!"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr "组"
@@ -2410,8 +2425,8 @@ msgstr "连接"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr "不支持的数据格式。"
@@ -2560,7 +2575,8 @@ msgstr "无法保存新密码。"
msgid "Password saved."
msgstr "密码已保存。"
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2688,7 +2704,7 @@ msgstr ""
msgid "SSL"
msgstr "SMS短信"
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
#, fuzzy
msgid "Never"
msgstr "恢复"
@@ -2747,11 +2763,11 @@ msgstr "不是有效的电子邮件"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "用户自加标签 %s - 第 %d 页"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr "通告内容不正确"
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2829,7 +2845,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr "你的标签 (字母letters, 数字numbers, -, ., 和 _), 以逗号或空格分隔"
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr "语言"
@@ -2855,7 +2871,7 @@ msgstr "自动订阅任何订阅我的更新的人(这个选项最适合机器
msgid "Bio is too long (max %d chars)."
msgstr "自述过长(不能超过140字符)。"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr "未选择时区。"
@@ -3163,7 +3179,7 @@ msgid "Same as password above. Required."
msgstr "相同的密码。此项必填。"
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "电子邮件"
@@ -3264,7 +3280,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr "您在其他兼容的微博客服务的个人信息URL"
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr "订阅"
@@ -3369,6 +3385,16 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "发送给 %1$s 的 %2$s 消息"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "无法向此用户发送消息。"
+
+#: actions/revokerole.php:82
+#, fuzzy
+msgid "User doesn't have this role."
+msgstr "找不到匹配的用户。"
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3384,7 +3410,9 @@ msgstr "无法向此用户发送消息。"
msgid "User is already sandboxed."
msgstr "用户没有个人信息。"
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3408,7 +3436,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3445,8 +3473,8 @@ msgstr "分页"
msgid "Description"
msgstr "描述"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr "统计"
@@ -3581,47 +3609,47 @@ msgstr ""
msgid "Group actions"
msgstr "组动作"
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr "%s 的通告聚合"
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, fuzzy, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr "%s 的通告聚合"
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, fuzzy, php-format
msgid "Notice feed for %s group (Atom)"
msgstr "%s 的通告聚合"
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, php-format
msgid "FOAF for %s group"
msgstr "%s 的发件箱"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "注册于"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr "(没有)"
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr "所有成员"
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "创建"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3631,7 +3659,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, fuzzy, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3642,7 +3670,7 @@ msgstr ""
"**%s** 是一个 %%%%site.name%%%% 的用户组,一个微博客服务 [micro-blogging]"
"(http://en.wikipedia.org/wiki/Micro-blogging)"
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
#, fuzzy
msgid "Admins"
msgstr "admin管理员"
@@ -3758,150 +3786,139 @@ msgid "User is already silenced."
msgstr "用户没有个人信息。"
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "不是有效的电子邮件"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新通告"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "新的电子邮件地址,用于发布 %s 信息"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "本地显示"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
+#: actions/siteadminpanel.php:262
#, fuzzy
-msgid "Default site language"
+msgid "Default language"
msgstr "首选语言"
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
-msgstr ""
-
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "新通告"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:67
+#, fuzzy
+msgid "Edit site-wide message"
+msgstr "新消息"
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "无法保存 Twitter 设置!"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新通告"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "新通告"
#: actions/smssettings.php:58
#, fuzzy
@@ -4004,6 +4021,66 @@ msgstr ""
msgid "No code entered"
msgstr "没有输入验证码"
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "主站导航"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "头像设置"
+
#: actions/subedit.php:70
#, fuzzy
msgid "You are not subscribed to that profile."
@@ -4214,7 +4291,7 @@ msgstr "服务器没有返回个人信息URL。"
msgid "Unsubscribed"
msgstr "退订"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4421,16 +4498,22 @@ msgstr "%s 组成员, 第 %d 页"
msgid "Search for more groups"
msgstr "检索人或文字"
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, fuzzy, php-format
msgid "%s is not a member of any group."
msgstr "您未告知此个人信息"
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr "%2$s 上 %1$s 的更新!"
+
#: actions/version.php:73
#, fuzzy, php-format
msgid "StatusNet %s"
@@ -4474,7 +4557,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "个人"
@@ -4543,42 +4626,42 @@ msgstr "无法添加新URI的信息。"
msgid "DB error inserting hashtag: %s"
msgstr "添加标签时数据库出错:%s"
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "保存通告时出错。"
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "保存通告时出错。"
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr "你在短时间里发布了过多的消息,请深呼吸,过几分钟再发消息。"
-#: classes/Notice.php:254
+#: classes/Notice.php:256
#, fuzzy
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr "你在短时间里发布了过多的消息,请深呼吸,过几分钟再发消息。"
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr "在这个网站你被禁止发布消息。"
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr "保存通告时出错。"
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "保存通告时出错。"
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, fuzzy, php-format
msgid "RT @%1$s %2$s"
msgstr "%1$s (%2$s)"
@@ -4607,7 +4690,12 @@ msgstr "未订阅!"
msgid "Couldn't delete self-subscription."
msgstr "无法删除订阅。"
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "无法删除订阅。"
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "无法删除订阅。"
@@ -4616,21 +4704,21 @@ msgstr "无法删除订阅。"
msgid "Welcome to %1$s, @%2$s!"
msgstr "发送给 %1$s 的 %2$s 消息"
-#: classes/User_group.php:462
+#: classes/User_group.php:477
msgid "Could not create group."
msgstr "无法创建组。"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "无法删除订阅。"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "无法删除订阅。"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "无法删除订阅。"
@@ -4673,198 +4761,191 @@ msgstr "%1$s (%2$s)"
msgid "Untitled page"
msgstr "无标题页"
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr "主站导航"
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
#, fuzzy
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr "个人资料及朋友年表"
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "个人"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "修改资料"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "帐号"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "无法重定向到服务器:%s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "连接"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "主站导航"
-#: lib/action.php:460
+#: lib/action.php:449
#, fuzzy
msgctxt "MENU"
msgid "Admin"
msgstr "admin管理员"
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, fuzzy, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr "使用这个表单来邀请好友和同事加入。"
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "邀请"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
#, fuzzy
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr "登出本站"
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "登出"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "创建新帐号"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "注册"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
#, fuzzy
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr "登入本站"
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "登录"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "帮助"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "帮助"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
#, fuzzy
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr "检索人或文字"
-#: lib/action.php:502
+#: lib/action.php:491
#, fuzzy
msgctxt "MENU"
msgid "Search"
msgstr "搜索"
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "新通告"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr "本地显示"
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新通告"
-#: lib/action.php:758
+#: lib/action.php:747
#, fuzzy
msgid "Secondary site navigation"
msgstr "次项站导航"
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "帮助"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "关于"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "常见问题FAQ"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr "隐私"
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr "来源"
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "联系人"
-#: lib/action.php:782
+#: lib/action.php:771
#, fuzzy
msgid "Badge"
msgstr "呼叫"
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr "StatusNet软件注册证"
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4873,12 +4954,12 @@ msgstr ""
"**%%site.name%%** 是一个微博客服务,提供者为 [%%site.broughtby%%](%%site."
"broughtbyurl%%)。"
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%** 是一个微博客服务。"
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4889,56 +4970,56 @@ msgstr ""
"General Public License](http://www.fsf.org/licensing/licenses/agpl-3.0.html)"
"授权。"
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "StatusNet软件注册证"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr "全部"
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr "注册证"
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr "分页"
-#: lib/action.php:1172
+#: lib/action.php:1161
#, fuzzy
msgid "After"
msgstr "« 之后"
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "之前 »"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4955,99 +5036,89 @@ msgid "Changes to that panel are not allowed."
msgstr "不允许注册。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
#, fuzzy
msgid "showForm() not implemented."
msgstr "命令尚未实现。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
#, fuzzy
msgid "saveSettings() not implemented."
msgstr "命令尚未实现。"
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
#, fuzzy
msgid "Unable to delete design setting."
msgstr "无法保存 Twitter 设置!"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "电子邮件地址确认"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "邀请"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "SMS短信确认"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "个人"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "SMS短信确认"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-#, fuzzy
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr "用户"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "SMS短信确认"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "接受"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "SMS短信确认"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "SMS短信确认"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "个人"
+msgid "Edit site notice"
+msgstr "新通告"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "SMS短信确认"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5240,12 +5311,12 @@ msgstr "%s 离开群 %s"
msgid "Fullname: %s"
msgstr "全名:%s"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr "位置:%s"
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr "主页:%s"
@@ -5551,6 +5622,11 @@ msgstr "选择标签缩小清单"
msgid "Go"
msgstr "执行"
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
#, fuzzy
msgid "URL of the homepage or blog of the group or topic"
@@ -5696,11 +5772,11 @@ msgstr "输入用户名和密码以登录。"
msgid "Sign up for a new account"
msgstr "创建新帐号"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "电子邮件地址确认"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5717,12 +5793,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "%1$s 开始关注您的 %2$s 信息。"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5742,19 +5818,19 @@ msgstr ""
"\n"
"为您效力的 %4$s\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr ""
"自传Bio: %s\n"
"\n"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr "新的电子邮件地址,用于发布 %s 信息"
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5774,21 +5850,21 @@ msgstr ""
"\n"
"为您效力的 %4$s"
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr "%s 状态"
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr "SMS短信确认"
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr "%s 振铃呼叫你"
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5804,12 +5880,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr "%s 发送了新的私人信息"
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5828,12 +5904,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "%s 收藏了您的通告"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5854,12 +5930,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -6114,10 +6190,6 @@ msgstr "回复"
msgid "Favorites"
msgstr "收藏夹"
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr "用户"
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr "收件箱"
@@ -6144,7 +6216,7 @@ msgstr "%s's 的消息的标签"
msgid "Unknown"
msgstr "未知动作"
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr "订阅"
@@ -6152,25 +6224,25 @@ msgstr "订阅"
msgid "All subscriptions"
msgstr "所有订阅"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr "订阅者"
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "订阅者"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
#, fuzzy
msgid "User ID"
msgstr "用户"
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "用户始于"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr "所有组"
@@ -6215,7 +6287,12 @@ msgstr "无法删除通告。"
msgid "Repeat this notice"
msgstr "无法删除通告。"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "该组成员列表。"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6386,47 +6463,63 @@ msgstr "新消息"
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "用户没有个人信息。"
+
+#: lib/userprofile.php:354
+#, fuzzy
+msgctxt "role"
+msgid "Administrator"
+msgstr "admin管理员"
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
+msgstr ""
+
+#: lib/util.php:1015
msgid "a few seconds ago"
msgstr "几秒前"
-#: lib/util.php:1015
+#: lib/util.php:1017
msgid "about a minute ago"
msgstr "一分钟前"
-#: lib/util.php:1017
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr "%d 分钟前"
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr "一小时前"
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr "%d 小时前"
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr "一天前"
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr "%d 天前"
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr "一个月前"
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr "%d 个月前"
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr "一年前"
diff --git a/locale/zh_TW/LC_MESSAGES/statusnet.po b/locale/zh_TW/LC_MESSAGES/statusnet.po
index 5cca450ca..3ea887beb 100644
--- a/locale/zh_TW/LC_MESSAGES/statusnet.po
+++ b/locale/zh_TW/LC_MESSAGES/statusnet.po
@@ -7,19 +7,20 @@ msgid ""
msgstr ""
"Project-Id-Version: StatusNet\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-02 21:02+0000\n"
-"PO-Revision-Date: 2010-03-02 21:04:05+0000\n"
+"POT-Creation-Date: 2010-03-06 23:49+0000\n"
+"PO-Revision-Date: 2010-03-06 23:51:15+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 (r63186); Translate extension (2010-01-16)\n"
+"X-Generator: MediaWiki 1.17alpha (r63350); Translate extension (2010-01-16)\n"
"X-Translation-Project: translatewiki.net at http://translatewiki.net\n"
"X-Language-Code: zh-hant\n"
"X-Message-Group: out-statusnet\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#. TRANS: Page title
-#: actions/accessadminpanel.php:55
+#. TRANS: Menu item for site administration
+#: actions/accessadminpanel.php:55 lib/adminpanelaction.php:374
#, fuzzy
msgid "Access"
msgstr "接受"
@@ -104,7 +105,7 @@ msgstr "無此通知"
#: actions/otp.php:76 actions/remotesubscribe.php:145
#: actions/remotesubscribe.php:154 actions/replies.php:73
#: actions/repliesrss.php:38 actions/rsd.php:116 actions/showfavorites.php:105
-#: actions/userbyid.php:74 actions/usergroups.php:91 actions/userrss.php:38
+#: actions/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
@@ -120,7 +121,7 @@ msgstr "%s與好友"
#. TRANS: Page title. %1$s is user nickname
#. TRANS: H1 text. %1$s is user nickname
-#: actions/all.php:89 actions/all.php:177 actions/allrss.php:115
+#: actions/all.php:89 actions/all.php:181 actions/allrss.php:115
#: actions/apitimelinefriends.php:114 actions/apitimelinehome.php:115
#: lib/personalgroupnav.php:100
#, php-format
@@ -175,7 +176,7 @@ msgid ""
msgstr ""
#. TRANS: H1 text
-#: actions/all.php:174
+#: actions/all.php:178
#, fuzzy
msgid "You and friends"
msgstr "%s與好友"
@@ -203,11 +204,11 @@ msgstr ""
#: actions/apistatusesshow.php:108 actions/apistatusnetconfig.php:135
#: actions/apistatusnetversion.php:93 actions/apisubscriptions.php:111
#: actions/apitimelinefavorites.php:183 actions/apitimelinefriends.php:187
-#: actions/apitimelinegroup.php:185 actions/apitimelinehome.php:184
-#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:152
+#: actions/apitimelinegroup.php:160 actions/apitimelinehome.php:184
+#: actions/apitimelinementions.php:175 actions/apitimelinepublic.php:148
#: actions/apitimelineretweetedtome.php:121
#: actions/apitimelineretweetsofme.php:152 actions/apitimelinetag.php:166
-#: actions/apitimelineuser.php:196 actions/apiusershow.php:101
+#: actions/apitimelineuser.php:165 actions/apiusershow.php:101
#, fuzzy
msgid "API method not found."
msgstr "確認碼遺失"
@@ -574,7 +575,7 @@ msgid ""
"give access to your %4$s account to third parties you trust."
msgstr ""
-#: actions/apioauthauthorize.php:310
+#: actions/apioauthauthorize.php:310 lib/action.php:438
#, fuzzy
msgid "Account"
msgstr "關於"
@@ -665,18 +666,6 @@ msgstr "%1$s的狀態是%2$s"
msgid "%1$s updates favorited by %2$s / %2$s."
msgstr "&s的微型部落格"
-#: actions/apitimelinegroup.php:109 actions/apitimelineuser.php:118
-#: actions/grouprss.php:138 actions/userrss.php:90
-#, php-format
-msgid "%s timeline"
-msgstr ""
-
-#: actions/apitimelinegroup.php:112 actions/apitimelineuser.php:124
-#: actions/userrss.php:92
-#, php-format
-msgid "Updates from %1$s on %2$s!"
-msgstr ""
-
#: actions/apitimelinementions.php:117
#, fuzzy, php-format
msgid "%1$s / Updates mentioning %2$s"
@@ -687,12 +676,12 @@ msgstr "%1$s的狀態是%2$s"
msgid "%1$s updates that reply to updates from %2$s / %3$s."
msgstr ""
-#: actions/apitimelinepublic.php:111 actions/publicrss.php:103
+#: actions/apitimelinepublic.php:107 actions/publicrss.php:103
#, php-format
msgid "%s public timeline"
msgstr ""
-#: actions/apitimelinepublic.php:115 actions/publicrss.php:105
+#: actions/apitimelinepublic.php:111 actions/publicrss.php:105
#, php-format
msgid "%s updates from everyone!"
msgstr ""
@@ -712,7 +701,7 @@ msgstr ""
msgid "Notices tagged with %s"
msgstr ""
-#: actions/apitimelinetag.php:104 actions/tagrss.php:64
+#: actions/apitimelinetag.php:104 actions/tagrss.php:65
#, fuzzy, php-format
msgid "Updates tagged with %1$s on %2$s!"
msgstr "&s的微型部落格"
@@ -754,7 +743,7 @@ msgstr ""
#: actions/avatarsettings.php:106 actions/avatarsettings.php:185
#: actions/remotesubscribe.php:191 actions/userauthorization.php:72
-#: actions/userrss.php:103
+#: actions/userrss.php:106
msgid "User without matching profile"
msgstr ""
@@ -948,7 +937,7 @@ msgid "Conversation"
msgstr "地點"
#: actions/conversation.php:154 lib/mailbox.php:116 lib/noticelist.php:87
-#: lib/profileaction.php:216 lib/searchgroupnav.php:82
+#: lib/profileaction.php:218 lib/searchgroupnav.php:82
msgid "Notices"
msgstr ""
@@ -970,7 +959,7 @@ msgstr "無法連結到伺服器:%s"
#: actions/deleteapplication.php:102 actions/editapplication.php:127
#: actions/newapplication.php:110 actions/showapplication.php:118
-#: lib/action.php:1228
+#: lib/action.php:1217
msgid "There was a problem with your session token."
msgstr ""
@@ -1172,8 +1161,9 @@ msgstr ""
#: actions/designadminpanel.php:586 actions/emailsettings.php:195
#: actions/imsettings.php:163 actions/othersettings.php:126
#: actions/pathsadminpanel.php:351 actions/profilesettings.php:174
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
-#: actions/smssettings.php:181 actions/subscriptions.php:208
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
+#: actions/sitenoticeadminpanel.php:195 actions/smssettings.php:181
+#: actions/snapshotadminpanel.php:245 actions/subscriptions.php:208
#: actions/tagother.php:154 actions/useradminpanel.php:294
#: lib/applicationeditform.php:333 lib/applicationeditform.php:334
#: lib/designsettings.php:256 lib/groupeditform.php:202
@@ -1298,7 +1288,7 @@ msgstr "自我介紹過長(共140個字元)"
msgid "Could not update group."
msgstr "無法更新使用者"
-#: actions/editgroup.php:264 classes/User_group.php:478
+#: actions/editgroup.php:264 classes/User_group.php:493
#, fuzzy
msgid "Could not create aliases."
msgstr "無法存取個人圖像資料"
@@ -1421,7 +1411,7 @@ msgid "Cannot normalize that email address"
msgstr ""
#: actions/emailsettings.php:331 actions/register.php:201
-#: actions/siteadminpanel.php:143
+#: actions/siteadminpanel.php:144
msgid "Not a valid email address."
msgstr "此信箱無效"
@@ -1613,6 +1603,24 @@ msgstr "無此通知"
msgid "Cannot read file."
msgstr "無此通知"
+#: actions/grantrole.php:62 actions/revokerole.php:62
+#, fuzzy
+msgid "Invalid role."
+msgstr "尺寸錯誤"
+
+#: actions/grantrole.php:66 actions/revokerole.php:66
+msgid "This role is reserved and cannot be set."
+msgstr ""
+
+#: actions/grantrole.php:75
+#, fuzzy
+msgid "You cannot grant user roles on this site."
+msgstr "無法連結到伺服器:%s"
+
+#: actions/grantrole.php:82
+msgid "User already has this role."
+msgstr ""
+
#: actions/groupblock.php:71 actions/groupunblock.php:71
#: actions/makeadmin.php:71 actions/subedit.php:46
#: lib/profileformaction.php:70
@@ -1760,12 +1768,18 @@ msgstr ""
msgid "Make this user an admin"
msgstr ""
+#: actions/grouprss.php:138 actions/userrss.php:93
+#: lib/atomgroupnoticefeed.php:61 lib/atomusernoticefeed.php:67
+#, php-format
+msgid "%s timeline"
+msgstr ""
+
#: actions/grouprss.php:140
#, fuzzy, php-format
msgid "Updates from members of %1$s on %2$s!"
msgstr "&s的微型部落格"
-#: actions/groups.php:62 lib/profileaction.php:210 lib/profileaction.php:230
+#: actions/groups.php:62 lib/profileaction.php:212 lib/profileaction.php:232
#: lib/publicgroupnav.php:81 lib/searchgroupnav.php:84 lib/subgroupnav.php:98
msgid "Groups"
msgstr ""
@@ -2328,8 +2342,8 @@ msgstr "連結"
msgid "Only "
msgstr ""
-#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1040
-#: lib/apiaction.php:1068 lib/apiaction.php:1177
+#: actions/oembed.php:181 actions/oembed.php:200 lib/apiaction.php:1042
+#: lib/apiaction.php:1070 lib/apiaction.php:1179
msgid "Not a supported data format."
msgstr ""
@@ -2475,7 +2489,8 @@ msgstr "無法存取新密碼"
msgid "Password saved."
msgstr ""
-#: actions/pathsadminpanel.php:59
+#. TRANS: Menu item for site administration
+#: actions/pathsadminpanel.php:59 lib/adminpanelaction.php:382
msgid "Paths"
msgstr ""
@@ -2600,7 +2615,7 @@ msgstr ""
msgid "SSL"
msgstr ""
-#: actions/pathsadminpanel.php:323 actions/siteadminpanel.php:294
+#: actions/pathsadminpanel.php:323 actions/snapshotadminpanel.php:202
msgid "Never"
msgstr ""
@@ -2655,11 +2670,11 @@ msgstr "此信箱無效"
msgid "Users self-tagged with %1$s - page %2$d"
msgstr "&s的微型部落格"
-#: actions/postnotice.php:84
+#: actions/postnotice.php:95
msgid "Invalid notice content"
msgstr ""
-#: actions/postnotice.php:90
+#: actions/postnotice.php:101
#, php-format
msgid "Notice license ‘%1$s’ is not compatible with site license ‘%2$s’."
msgstr ""
@@ -2736,7 +2751,7 @@ msgid ""
"Tags for yourself (letters, numbers, -, ., and _), comma- or space- separated"
msgstr ""
-#: actions/profilesettings.php:151 actions/siteadminpanel.php:280
+#: actions/profilesettings.php:151
msgid "Language"
msgstr ""
@@ -2762,7 +2777,7 @@ msgstr ""
msgid "Bio is too long (max %d chars)."
msgstr "自我介紹過長(共140個字元)"
-#: actions/profilesettings.php:235 actions/siteadminpanel.php:150
+#: actions/profilesettings.php:235 actions/siteadminpanel.php:151
msgid "Timezone not selected."
msgstr ""
@@ -3064,7 +3079,7 @@ msgid "Same as password above. Required."
msgstr ""
#: actions/register.php:438 actions/register.php:442
-#: actions/siteadminpanel.php:256 lib/accountsettingsaction.php:120
+#: actions/siteadminpanel.php:238 lib/accountsettingsaction.php:120
msgid "Email"
msgstr "電子信箱"
@@ -3149,7 +3164,7 @@ msgid "URL of your profile on another compatible microblogging service"
msgstr ""
#: actions/remotesubscribe.php:137 lib/subscribeform.php:139
-#: lib/userprofile.php:368
+#: lib/userprofile.php:394
msgid "Subscribe"
msgstr ""
@@ -3250,6 +3265,15 @@ msgstr ""
msgid "Replies to %1$s on %2$s!"
msgstr "&s的微型部落格"
+#: actions/revokerole.php:75
+#, fuzzy
+msgid "You cannot revoke user roles on this site."
+msgstr "無法連結到伺服器:%s"
+
+#: actions/revokerole.php:82
+msgid "User doesn't have this role."
+msgstr ""
+
#: actions/rsd.php:146 actions/version.php:157
#, fuzzy
msgid "StatusNet"
@@ -3264,7 +3288,9 @@ msgstr "無法連結到伺服器:%s"
msgid "User is already sandboxed."
msgstr ""
+#. TRANS: Menu item for site administration
#: actions/sessionsadminpanel.php:54 actions/sessionsadminpanel.php:170
+#: lib/adminpanelaction.php:390
msgid "Sessions"
msgstr ""
@@ -3288,7 +3314,7 @@ msgstr ""
msgid "Turn on debugging output for sessions."
msgstr ""
-#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:336
+#: actions/sessionsadminpanel.php:199 actions/siteadminpanel.php:292
#: actions/useradminpanel.php:294
#, fuzzy
msgid "Save site settings"
@@ -3323,8 +3349,8 @@ msgstr "地點"
msgid "Description"
msgstr "所有訂閱"
-#: actions/showapplication.php:192 actions/showgroup.php:437
-#: lib/profileaction.php:174
+#: actions/showapplication.php:192 actions/showgroup.php:438
+#: lib/profileaction.php:176
msgid "Statistics"
msgstr ""
@@ -3457,47 +3483,47 @@ msgstr ""
msgid "Group actions"
msgstr ""
-#: actions/showgroup.php:336
+#: actions/showgroup.php:337
#, php-format
msgid "Notice feed for %s group (RSS 1.0)"
msgstr ""
-#: actions/showgroup.php:342
+#: actions/showgroup.php:343
#, php-format
msgid "Notice feed for %s group (RSS 2.0)"
msgstr ""
-#: actions/showgroup.php:348
+#: actions/showgroup.php:349
#, php-format
msgid "Notice feed for %s group (Atom)"
msgstr ""
-#: actions/showgroup.php:353
+#: actions/showgroup.php:354
#, fuzzy, php-format
msgid "FOAF for %s group"
msgstr "無此通知"
-#: actions/showgroup.php:389 actions/showgroup.php:446 lib/groupnav.php:91
+#: actions/showgroup.php:390 actions/showgroup.php:447 lib/groupnav.php:91
#, fuzzy
msgid "Members"
msgstr "何時加入會員的呢?"
-#: actions/showgroup.php:394 lib/profileaction.php:117
-#: lib/profileaction.php:148 lib/profileaction.php:236 lib/section.php:95
+#: actions/showgroup.php:395 lib/profileaction.php:117
+#: lib/profileaction.php:150 lib/profileaction.php:238 lib/section.php:95
#: lib/subscriptionlist.php:126 lib/tagcloudsection.php:71
msgid "(None)"
msgstr ""
-#: actions/showgroup.php:400
+#: actions/showgroup.php:401
msgid "All members"
msgstr ""
-#: actions/showgroup.php:440
+#: actions/showgroup.php:441
#, fuzzy
msgid "Created"
msgstr "新增"
-#: actions/showgroup.php:456
+#: actions/showgroup.php:457
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3507,7 +3533,7 @@ msgid ""
"of this group and many more! ([Read more](%%%%doc.help%%%%))"
msgstr ""
-#: actions/showgroup.php:462
+#: actions/showgroup.php:463
#, php-format
msgid ""
"**%s** is a user group on %%%%site.name%%%%, a [micro-blogging](http://en."
@@ -3516,7 +3542,7 @@ msgid ""
"their life and interests. "
msgstr ""
-#: actions/showgroup.php:490
+#: actions/showgroup.php:491
msgid "Admins"
msgstr ""
@@ -3627,149 +3653,137 @@ msgid "User is already silenced."
msgstr ""
#: actions/siteadminpanel.php:69
-msgid "Basic settings for this StatusNet site."
+msgid "Basic settings for this StatusNet site"
msgstr ""
-#: actions/siteadminpanel.php:132
+#: actions/siteadminpanel.php:133
msgid "Site name must have non-zero length."
msgstr ""
-#: actions/siteadminpanel.php:140
+#: actions/siteadminpanel.php:141
#, fuzzy
msgid "You must have a valid contact email address."
msgstr "此信箱無效"
-#: actions/siteadminpanel.php:158
+#: actions/siteadminpanel.php:159
#, php-format
msgid "Unknown language \"%s\"."
msgstr ""
#: actions/siteadminpanel.php:165
-msgid "Invalid snapshot report URL."
-msgstr ""
-
-#: actions/siteadminpanel.php:171
-msgid "Invalid snapshot run value."
-msgstr ""
-
-#: actions/siteadminpanel.php:177
-msgid "Snapshot frequency must be a number."
-msgstr ""
-
-#: actions/siteadminpanel.php:183
msgid "Minimum text limit is 140 characters."
msgstr ""
-#: actions/siteadminpanel.php:189
+#: actions/siteadminpanel.php:171
msgid "Dupe limit must 1 or more seconds."
msgstr ""
-#: actions/siteadminpanel.php:239
+#: actions/siteadminpanel.php:221
msgid "General"
msgstr ""
-#: actions/siteadminpanel.php:242
+#: actions/siteadminpanel.php:224
#, fuzzy
msgid "Site name"
msgstr "新訊息"
-#: actions/siteadminpanel.php:243
+#: actions/siteadminpanel.php:225
msgid "The name of your site, like \"Yourcompany Microblog\""
msgstr ""
-#: actions/siteadminpanel.php:247
+#: actions/siteadminpanel.php:229
msgid "Brought by"
msgstr ""
-#: actions/siteadminpanel.php:248
+#: actions/siteadminpanel.php:230
msgid "Text used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:252
+#: actions/siteadminpanel.php:234
msgid "Brought by URL"
msgstr ""
-#: actions/siteadminpanel.php:253
+#: actions/siteadminpanel.php:235
msgid "URL used for credits link in footer of each page"
msgstr ""
-#: actions/siteadminpanel.php:257
+#: actions/siteadminpanel.php:239
#, fuzzy
msgid "Contact email address for your site"
msgstr "查無此使用者所註冊的信箱"
-#: actions/siteadminpanel.php:263
+#: actions/siteadminpanel.php:245
#, fuzzy
msgid "Local"
msgstr "地點"
-#: actions/siteadminpanel.php:274
+#: actions/siteadminpanel.php:256
msgid "Default timezone"
msgstr ""
-#: actions/siteadminpanel.php:275
+#: actions/siteadminpanel.php:257
msgid "Default timezone for the site; usually UTC."
msgstr ""
-#: actions/siteadminpanel.php:281
-msgid "Default site language"
-msgstr ""
-
-#: actions/siteadminpanel.php:289
-msgid "Snapshots"
+#: actions/siteadminpanel.php:262
+msgid "Default language"
msgstr ""
-#: actions/siteadminpanel.php:292
-msgid "Randomly during Web hit"
+#: actions/siteadminpanel.php:263
+msgid "Site language when autodetection from browser settings is not available"
msgstr ""
-#: actions/siteadminpanel.php:293
-msgid "In a scheduled job"
+#: actions/siteadminpanel.php:271
+msgid "Limits"
msgstr ""
-#: actions/siteadminpanel.php:295
-msgid "Data snapshots"
+#: actions/siteadminpanel.php:274
+msgid "Text limit"
msgstr ""
-#: actions/siteadminpanel.php:296
-msgid "When to send statistical data to status.net servers"
+#: actions/siteadminpanel.php:274
+msgid "Maximum number of characters for notices."
msgstr ""
-#: actions/siteadminpanel.php:301
-msgid "Frequency"
+#: actions/siteadminpanel.php:278
+msgid "Dupe limit"
msgstr ""
-#: actions/siteadminpanel.php:302
-msgid "Snapshots will be sent once every N web hits"
+#: actions/siteadminpanel.php:278
+msgid "How long users must wait (in seconds) to post the same thing again."
msgstr ""
-#: actions/siteadminpanel.php:307
-msgid "Report URL"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:56
+#, fuzzy
+msgid "Site Notice"
+msgstr "新訊息"
-#: actions/siteadminpanel.php:308
-msgid "Snapshots will be sent to this URL"
+#: actions/sitenoticeadminpanel.php:67
+msgid "Edit site-wide message"
msgstr ""
-#: actions/siteadminpanel.php:315
-msgid "Limits"
-msgstr ""
+#: actions/sitenoticeadminpanel.php:103
+#, fuzzy
+msgid "Unable to save site notice."
+msgstr "新訊息"
-#: actions/siteadminpanel.php:318
-msgid "Text limit"
+#: actions/sitenoticeadminpanel.php:113
+msgid "Max length for the site-wide notice is 255 chars"
msgstr ""
-#: actions/siteadminpanel.php:318
-msgid "Maximum number of characters for notices."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:176
+#, fuzzy
+msgid "Site notice text"
+msgstr "新訊息"
-#: actions/siteadminpanel.php:322
-msgid "Dupe limit"
+#: actions/sitenoticeadminpanel.php:178
+msgid "Site-wide notice text (255 chars max; HTML okay)"
msgstr ""
-#: actions/siteadminpanel.php:322
-msgid "How long users must wait (in seconds) to post the same thing again."
-msgstr ""
+#: actions/sitenoticeadminpanel.php:198
+#, fuzzy
+msgid "Save site notice"
+msgstr "新訊息"
#: actions/smssettings.php:58
#, fuzzy
@@ -3866,6 +3880,66 @@ msgstr ""
msgid "No code entered"
msgstr ""
+#. TRANS: Menu item for site administration
+#: actions/snapshotadminpanel.php:54 actions/snapshotadminpanel.php:196
+#: lib/adminpanelaction.php:406
+msgid "Snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:65
+#, fuzzy
+msgid "Manage snapshot configuration"
+msgstr "確認信箱"
+
+#: actions/snapshotadminpanel.php:127
+msgid "Invalid snapshot run value."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:133
+msgid "Snapshot frequency must be a number."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:144
+msgid "Invalid snapshot report URL."
+msgstr ""
+
+#: actions/snapshotadminpanel.php:200
+msgid "Randomly during Web hit"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:201
+msgid "In a scheduled job"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:206
+msgid "Data snapshots"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:208
+msgid "When to send statistical data to status.net servers"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:217
+msgid "Frequency"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:218
+msgid "Snapshots will be sent once every N web hits"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:226
+msgid "Report URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:227
+msgid "Snapshots will be sent to this URL"
+msgstr ""
+
+#: actions/snapshotadminpanel.php:248
+#, fuzzy
+msgid "Save snapshot settings"
+msgstr "線上即時通設定"
+
#: actions/subedit.php:70
msgid "You are not subscribed to that profile."
msgstr ""
@@ -4070,7 +4144,7 @@ msgstr "無確認請求"
msgid "Unsubscribed"
msgstr "此帳號已註冊"
-#: actions/updateprofile.php:62 actions/userauthorization.php:337
+#: actions/updateprofile.php:64 actions/userauthorization.php:337
#, php-format
msgid ""
"Listenee stream license ‘%1$s’ is not compatible with site license ‘%2$s’."
@@ -4263,16 +4337,22 @@ msgstr "所有訂閱"
msgid "Search for more groups"
msgstr ""
-#: actions/usergroups.php:153
+#: actions/usergroups.php:157
#, php-format
msgid "%s is not a member of any group."
msgstr ""
-#: actions/usergroups.php:158
+#: actions/usergroups.php:162
#, php-format
msgid "Try [searching for groups](%%action.groupsearch%%) and joining them."
msgstr ""
+#: actions/userrss.php:95 lib/atomgroupnoticefeed.php:66
+#: lib/atomusernoticefeed.php:72
+#, php-format
+msgid "Updates from %1$s on %2$s!"
+msgstr ""
+
#: actions/version.php:73
#, php-format
msgid "StatusNet %s"
@@ -4316,7 +4396,7 @@ msgstr ""
msgid "Plugins"
msgstr ""
-#: actions/version.php:196 lib/action.php:778
+#: actions/version.php:196 lib/action.php:767
#, fuzzy
msgid "Version"
msgstr "地點"
@@ -4384,41 +4464,41 @@ msgstr ""
msgid "DB error inserting hashtag: %s"
msgstr ""
-#: classes/Notice.php:239
+#: classes/Notice.php:241
#, fuzzy
msgid "Problem saving notice. Too long."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:243
+#: classes/Notice.php:245
#, fuzzy
msgid "Problem saving notice. Unknown user."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:248
+#: classes/Notice.php:250
msgid ""
"Too many notices too fast; take a breather and post again in a few minutes."
msgstr ""
-#: classes/Notice.php:254
+#: classes/Notice.php:256
msgid ""
"Too many duplicate messages too quickly; take a breather and post again in a "
"few minutes."
msgstr ""
-#: classes/Notice.php:260
+#: classes/Notice.php:262
msgid "You are banned from posting notices on this site."
msgstr ""
-#: classes/Notice.php:326 classes/Notice.php:352
+#: classes/Notice.php:328 classes/Notice.php:354
msgid "Problem saving notice."
msgstr ""
-#: classes/Notice.php:911
+#: classes/Notice.php:927
#, fuzzy
msgid "Problem saving group inbox."
msgstr "儲存使用者發生錯誤"
-#: classes/Notice.php:1442
+#: classes/Notice.php:1459
#, php-format
msgid "RT @%1$s %2$s"
msgstr ""
@@ -4445,7 +4525,12 @@ msgstr "此帳號已註冊"
msgid "Couldn't delete self-subscription."
msgstr "無法刪除帳號"
-#: classes/Subscription.php:179 lib/subs.php:69
+#: classes/Subscription.php:190
+#, fuzzy
+msgid "Couldn't delete subscription OMB token."
+msgstr "無法刪除帳號"
+
+#: classes/Subscription.php:201 lib/subs.php:69
msgid "Couldn't delete subscription."
msgstr "無法刪除帳號"
@@ -4454,22 +4539,22 @@ msgstr "無法刪除帳號"
msgid "Welcome to %1$s, @%2$s!"
msgstr ""
-#: classes/User_group.php:462
+#: classes/User_group.php:477
#, fuzzy
msgid "Could not create group."
msgstr "無法存取個人圖像資料"
-#: classes/User_group.php:471
+#: classes/User_group.php:486
#, fuzzy
msgid "Could not set group URI."
msgstr "註冊失敗"
-#: classes/User_group.php:492
+#: classes/User_group.php:507
#, fuzzy
msgid "Could not set group membership."
msgstr "註冊失敗"
-#: classes/User_group.php:506
+#: classes/User_group.php:521
#, fuzzy
msgid "Could not save local group info."
msgstr "註冊失敗"
@@ -4513,190 +4598,183 @@ msgstr "%1$s的狀態是%2$s"
msgid "Untitled page"
msgstr ""
-#: lib/action.php:433
+#: lib/action.php:424
msgid "Primary site navigation"
msgstr ""
#. TRANS: Tooltip for main menu option "Personal"
-#: lib/action.php:439
+#: lib/action.php:430
msgctxt "TOOLTIP"
msgid "Personal profile and friends timeline"
msgstr ""
-#: lib/action.php:442
+#: lib/action.php:433
#, fuzzy
msgctxt "MENU"
msgid "Personal"
msgstr "地點"
#. TRANS: Tooltip for main menu option "Account"
-#: lib/action.php:444
+#: lib/action.php:435
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change your email, avatar, password, profile"
msgstr "更改密碼"
-#: lib/action.php:447
-#, fuzzy
-msgctxt "MENU"
-msgid "Account"
-msgstr "關於"
-
#. TRANS: Tooltip for main menu option "Services"
-#: lib/action.php:450
+#: lib/action.php:440
#, fuzzy
msgctxt "TOOLTIP"
msgid "Connect to services"
msgstr "無法連結到伺服器:%s"
-#: lib/action.php:453
-#, fuzzy
-msgctxt "MENU"
+#: lib/action.php:443
msgid "Connect"
msgstr "連結"
#. TRANS: Tooltip for menu option "Admin"
-#: lib/action.php:457
+#: lib/action.php:446
#, fuzzy
msgctxt "TOOLTIP"
msgid "Change site configuration"
msgstr "確認信箱"
-#: lib/action.php:460
+#: lib/action.php:449
msgctxt "MENU"
msgid "Admin"
msgstr ""
#. TRANS: Tooltip for main menu option "Invite"
-#: lib/action.php:464
+#: lib/action.php:453
#, php-format
msgctxt "TOOLTIP"
msgid "Invite friends and colleagues to join you on %s"
msgstr ""
-#: lib/action.php:467
+#: lib/action.php:456
#, fuzzy
msgctxt "MENU"
msgid "Invite"
msgstr "尺寸錯誤"
#. TRANS: Tooltip for main menu option "Logout"
-#: lib/action.php:473
+#: lib/action.php:462
msgctxt "TOOLTIP"
msgid "Logout from the site"
msgstr ""
-#: lib/action.php:476
+#: lib/action.php:465
#, fuzzy
msgctxt "MENU"
msgid "Logout"
msgstr "登出"
#. TRANS: Tooltip for main menu option "Register"
-#: lib/action.php:481
+#: lib/action.php:470
#, fuzzy
msgctxt "TOOLTIP"
msgid "Create an account"
msgstr "新增帳號"
-#: lib/action.php:484
+#: lib/action.php:473
#, fuzzy
msgctxt "MENU"
msgid "Register"
msgstr "所有訂閱"
#. TRANS: Tooltip for main menu option "Login"
-#: lib/action.php:487
+#: lib/action.php:476
msgctxt "TOOLTIP"
msgid "Login to the site"
msgstr ""
-#: lib/action.php:490
+#: lib/action.php:479
#, fuzzy
msgctxt "MENU"
msgid "Login"
msgstr "登入"
#. TRANS: Tooltip for main menu option "Help"
-#: lib/action.php:493
+#: lib/action.php:482
#, fuzzy
msgctxt "TOOLTIP"
msgid "Help me!"
msgstr "求救"
-#: lib/action.php:496
+#: lib/action.php:485
#, fuzzy
msgctxt "MENU"
msgid "Help"
msgstr "求救"
#. TRANS: Tooltip for main menu option "Search"
-#: lib/action.php:499
+#: lib/action.php:488
msgctxt "TOOLTIP"
msgid "Search for people or text"
msgstr ""
-#: lib/action.php:502
+#: lib/action.php:491
msgctxt "MENU"
msgid "Search"
msgstr ""
#. TRANS: DT element for site notice. String is hidden in default CSS.
-#: lib/action.php:524
+#. TRANS: Menu item for site administration
+#: lib/action.php:513 lib/adminpanelaction.php:398
#, fuzzy
msgid "Site notice"
msgstr "新訊息"
-#: lib/action.php:590
+#: lib/action.php:579
msgid "Local views"
msgstr ""
-#: lib/action.php:656
+#: lib/action.php:645
#, fuzzy
msgid "Page notice"
msgstr "新訊息"
-#: lib/action.php:758
+#: lib/action.php:747
msgid "Secondary site navigation"
msgstr ""
-#: lib/action.php:763
+#: lib/action.php:752
msgid "Help"
msgstr "求救"
-#: lib/action.php:765
+#: lib/action.php:754
msgid "About"
msgstr "關於"
-#: lib/action.php:767
+#: lib/action.php:756
msgid "FAQ"
msgstr "常見問題"
-#: lib/action.php:771
+#: lib/action.php:760
msgid "TOS"
msgstr ""
-#: lib/action.php:774
+#: lib/action.php:763
msgid "Privacy"
msgstr ""
-#: lib/action.php:776
+#: lib/action.php:765
msgid "Source"
msgstr ""
-#: lib/action.php:780
+#: lib/action.php:769
msgid "Contact"
msgstr "好友名單"
-#: lib/action.php:782
+#: lib/action.php:771
msgid "Badge"
msgstr ""
-#: lib/action.php:810
+#: lib/action.php:799
msgid "StatusNet software license"
msgstr ""
-#: lib/action.php:813
+#: lib/action.php:802
#, php-format
msgid ""
"**%%site.name%%** is a microblogging service brought to you by [%%site."
@@ -4705,12 +4783,12 @@ msgstr ""
"**%%site.name%%**是由[%%site.broughtby%%](%%site.broughtbyurl%%)所提供的微型"
"部落格服務"
-#: lib/action.php:815
+#: lib/action.php:804
#, php-format
msgid "**%%site.name%%** is a microblogging service. "
msgstr "**%%site.name%%**是個微型部落格"
-#: lib/action.php:817
+#: lib/action.php:806
#, php-format
msgid ""
"It runs the [StatusNet](http://status.net/) microblogging software, version %"
@@ -4718,55 +4796,55 @@ msgid ""
"org/licensing/licenses/agpl-3.0.html)."
msgstr ""
-#: lib/action.php:832
+#: lib/action.php:821
#, fuzzy
msgid "Site content license"
msgstr "新訊息"
-#: lib/action.php:837
+#: lib/action.php:826
#, php-format
msgid "Content and data of %1$s are private and confidential."
msgstr ""
-#: lib/action.php:842
+#: lib/action.php:831
#, php-format
msgid "Content and data copyright by %1$s. All rights reserved."
msgstr ""
-#: lib/action.php:845
+#: lib/action.php:834
msgid "Content and data copyright by contributors. All rights reserved."
msgstr ""
-#: lib/action.php:858
+#: lib/action.php:847
msgid "All "
msgstr ""
-#: lib/action.php:864
+#: lib/action.php:853
msgid "license."
msgstr ""
-#: lib/action.php:1163
+#: lib/action.php:1152
msgid "Pagination"
msgstr ""
-#: lib/action.php:1172
+#: lib/action.php:1161
msgid "After"
msgstr ""
-#: lib/action.php:1180
+#: lib/action.php:1169
#, fuzzy
msgid "Before"
msgstr "之前的內容»"
-#: lib/activity.php:449
+#: lib/activity.php:453
msgid "Can't handle remote content yet."
msgstr ""
-#: lib/activity.php:477
+#: lib/activity.php:481
msgid "Can't handle embedded XML content yet."
msgstr ""
-#: lib/activity.php:481
+#: lib/activity.php:485
msgid "Can't handle embedded Base64 content yet."
msgstr ""
@@ -4781,95 +4859,86 @@ msgid "Changes to that panel are not allowed."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:211
+#: lib/adminpanelaction.php:229
msgid "showForm() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:241
+#: lib/adminpanelaction.php:259
msgid "saveSettings() not implemented."
msgstr ""
#. TRANS: Client error message
-#: lib/adminpanelaction.php:265
+#: lib/adminpanelaction.php:283
msgid "Unable to delete design setting."
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:330
+#: lib/adminpanelaction.php:348
#, fuzzy
msgid "Basic site configuration"
msgstr "確認信箱"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:332
+#: lib/adminpanelaction.php:350
#, fuzzy
msgctxt "MENU"
msgid "Site"
msgstr "新訊息"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:338
+#: lib/adminpanelaction.php:356
#, fuzzy
msgid "Design configuration"
msgstr "確認信箱"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:340
+#: lib/adminpanelaction.php:358
#, fuzzy
msgctxt "MENU"
msgid "Design"
msgstr "地點"
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:346
+#: lib/adminpanelaction.php:364
#, fuzzy
msgid "User configuration"
msgstr "確認信箱"
#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:348
-msgctxt "MENU"
+#: lib/adminpanelaction.php:366 lib/personalgroupnav.php:115
msgid "User"
msgstr ""
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:354
+#: lib/adminpanelaction.php:372
#, fuzzy
msgid "Access configuration"
msgstr "確認信箱"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:356
-#, fuzzy
-msgctxt "MENU"
-msgid "Access"
-msgstr "接受"
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:362
+#: lib/adminpanelaction.php:380
#, fuzzy
msgid "Paths configuration"
msgstr "確認信箱"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:364
-msgctxt "MENU"
-msgid "Paths"
-msgstr ""
-
#. TRANS: Menu item title/tooltip
-#: lib/adminpanelaction.php:370
+#: lib/adminpanelaction.php:388
#, fuzzy
msgid "Sessions configuration"
msgstr "確認信箱"
-#. TRANS: Menu item for site administration
-#: lib/adminpanelaction.php:372
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:396
#, fuzzy
-msgctxt "MENU"
-msgid "Sessions"
-msgstr "地點"
+msgid "Edit site notice"
+msgstr "新訊息"
+
+#. TRANS: Menu item title/tooltip
+#: lib/adminpanelaction.php:404
+#, fuzzy
+msgid "Snapshots configuration"
+msgstr "確認信箱"
#: lib/apiauth.php:94
msgid "API resource requires read-write access, but you only have read access."
@@ -5056,12 +5125,12 @@ msgstr "%1$s的狀態是%2$s"
msgid "Fullname: %s"
msgstr "全名"
-#: lib/command.php:312 lib/mail.php:254
+#: lib/command.php:312 lib/mail.php:258
#, php-format
msgid "Location: %s"
msgstr ""
-#: lib/command.php:315 lib/mail.php:256
+#: lib/command.php:315 lib/mail.php:260
#, php-format
msgid "Homepage: %s"
msgstr ""
@@ -5361,6 +5430,11 @@ msgstr ""
msgid "Go"
msgstr ""
+#: lib/grantroleform.php:91
+#, php-format
+msgid "Grant this user the \"%s\" role"
+msgstr ""
+
#: lib/groupeditform.php:163
msgid "URL of the homepage or blog of the group or topic"
msgstr ""
@@ -5503,11 +5577,11 @@ msgstr "使用者名稱或密碼無效"
msgid "Sign up for a new account"
msgstr "新增帳號"
-#: lib/mail.php:172
+#: lib/mail.php:173
msgid "Email address confirmation"
msgstr "確認信箱"
-#: lib/mail.php:174
+#: lib/mail.php:175
#, php-format
msgid ""
"Hey, %s.\n"
@@ -5524,12 +5598,12 @@ msgid ""
"%s\n"
msgstr ""
-#: lib/mail.php:236
+#: lib/mail.php:240
#, php-format
msgid "%1$s is now listening to your notices on %2$s."
msgstr "現在%1$s在%2$s成為你的粉絲囉"
-#: lib/mail.php:241
+#: lib/mail.php:245
#, fuzzy, php-format
msgid ""
"%1$s is now listening to your notices on %2$s.\n"
@@ -5551,17 +5625,17 @@ msgstr ""
"%4$s.\n"
"敬上。\n"
-#: lib/mail.php:258
+#: lib/mail.php:262
#, fuzzy, php-format
msgid "Bio: %s"
msgstr "自我介紹"
-#: lib/mail.php:286
+#: lib/mail.php:290
#, php-format
msgid "New email address for posting to %s"
msgstr ""
-#: lib/mail.php:289
+#: lib/mail.php:293
#, php-format
msgid ""
"You have a new posting address on %1$s.\n"
@@ -5574,21 +5648,21 @@ msgid ""
"%4$s"
msgstr ""
-#: lib/mail.php:413
+#: lib/mail.php:417
#, php-format
msgid "%s status"
msgstr ""
-#: lib/mail.php:439
+#: lib/mail.php:443
msgid "SMS confirmation"
msgstr ""
-#: lib/mail.php:463
+#: lib/mail.php:467
#, php-format
msgid "You've been nudged by %s"
msgstr ""
-#: lib/mail.php:467
+#: lib/mail.php:471
#, php-format
msgid ""
"%1$s (%2$s) is wondering what you are up to these days and is inviting you "
@@ -5604,12 +5678,12 @@ msgid ""
"%4$s\n"
msgstr ""
-#: lib/mail.php:510
+#: lib/mail.php:517
#, php-format
msgid "New private message from %s"
msgstr ""
-#: lib/mail.php:514
+#: lib/mail.php:521
#, php-format
msgid ""
"%1$s (%2$s) sent you a private message:\n"
@@ -5628,12 +5702,12 @@ msgid ""
"%5$s\n"
msgstr ""
-#: lib/mail.php:559
+#: lib/mail.php:568
#, fuzzy, php-format
msgid "%s (@%s) added your notice as a favorite"
msgstr "現在%1$s在%2$s成為你的粉絲囉"
-#: lib/mail.php:561
+#: lib/mail.php:570
#, php-format
msgid ""
"%1$s (@%7$s) just added your notice from %2$s as one of their favorites.\n"
@@ -5654,12 +5728,12 @@ msgid ""
"%6$s\n"
msgstr ""
-#: lib/mail.php:624
+#: lib/mail.php:635
#, php-format
msgid "%s (@%s) sent a notice to your attention"
msgstr ""
-#: lib/mail.php:626
+#: lib/mail.php:637
#, php-format
msgid ""
"%1$s (@%9$s) just sent a notice to your attention (an '@-reply') on %2$s.\n"
@@ -5907,10 +5981,6 @@ msgstr ""
msgid "Favorites"
msgstr ""
-#: lib/personalgroupnav.php:115
-msgid "User"
-msgstr ""
-
#: lib/personalgroupnav.php:125
msgid "Inbox"
msgstr ""
@@ -5936,7 +6006,7 @@ msgstr ""
msgid "Unknown"
msgstr ""
-#: lib/profileaction.php:109 lib/profileaction.php:192 lib/subgroupnav.php:82
+#: lib/profileaction.php:109 lib/profileaction.php:194 lib/subgroupnav.php:82
msgid "Subscriptions"
msgstr ""
@@ -5944,24 +6014,24 @@ msgstr ""
msgid "All subscriptions"
msgstr "所有訂閱"
-#: lib/profileaction.php:140 lib/profileaction.php:201 lib/subgroupnav.php:90
+#: lib/profileaction.php:142 lib/profileaction.php:203 lib/subgroupnav.php:90
msgid "Subscribers"
msgstr ""
-#: lib/profileaction.php:157
+#: lib/profileaction.php:159
#, fuzzy
msgid "All subscribers"
msgstr "所有訂閱"
-#: lib/profileaction.php:178
+#: lib/profileaction.php:180
msgid "User ID"
msgstr ""
-#: lib/profileaction.php:183
+#: lib/profileaction.php:185
msgid "Member since"
msgstr "何時加入會員的呢?"
-#: lib/profileaction.php:245
+#: lib/profileaction.php:247
msgid "All groups"
msgstr ""
@@ -6004,7 +6074,12 @@ msgstr "無此通知"
msgid "Repeat this notice"
msgstr "無此通知"
-#: lib/router.php:668
+#: lib/revokeroleform.php:91
+#, fuzzy, php-format
+msgid "Revoke the \"%s\" role from this user"
+msgstr "無此使用者"
+
+#: lib/router.php:671
msgid "No single user defined for single-user mode."
msgstr ""
@@ -6165,47 +6240,62 @@ msgstr ""
msgid "Moderate"
msgstr ""
-#: lib/util.php:1013
-msgid "a few seconds ago"
+#: lib/userprofile.php:352
+#, fuzzy
+msgid "User role"
+msgstr "無此通知"
+
+#: lib/userprofile.php:354
+msgctxt "role"
+msgid "Administrator"
+msgstr ""
+
+#: lib/userprofile.php:355
+msgctxt "role"
+msgid "Moderator"
msgstr ""
#: lib/util.php:1015
-msgid "about a minute ago"
+msgid "a few seconds ago"
msgstr ""
#: lib/util.php:1017
+msgid "about a minute ago"
+msgstr ""
+
+#: lib/util.php:1019
#, php-format
msgid "about %d minutes ago"
msgstr ""
-#: lib/util.php:1019
+#: lib/util.php:1021
msgid "about an hour ago"
msgstr ""
-#: lib/util.php:1021
+#: lib/util.php:1023
#, php-format
msgid "about %d hours ago"
msgstr ""
-#: lib/util.php:1023
+#: lib/util.php:1025
msgid "about a day ago"
msgstr ""
-#: lib/util.php:1025
+#: lib/util.php:1027
#, php-format
msgid "about %d days ago"
msgstr ""
-#: lib/util.php:1027
+#: lib/util.php:1029
msgid "about a month ago"
msgstr ""
-#: lib/util.php:1029
+#: lib/util.php:1031
#, php-format
msgid "about %d months ago"
msgstr ""
-#: lib/util.php:1031
+#: lib/util.php:1033
msgid "about a year ago"
msgstr ""
diff --git a/plugins/Autocomplete/jquery-autocomplete/indicator.gif b/plugins/Autocomplete/jquery-autocomplete/indicator.gif
new file mode 100644
index 000000000..d0bce1542
--- /dev/null
+++ b/plugins/Autocomplete/jquery-autocomplete/indicator.gif
Binary files differ
diff --git a/plugins/CasAuthentication/CasAuthenticationPlugin.php b/plugins/CasAuthentication/CasAuthenticationPlugin.php
index 483b060ab..203e5fe42 100644
--- a/plugins/CasAuthentication/CasAuthenticationPlugin.php
+++ b/plugins/CasAuthentication/CasAuthenticationPlugin.php
@@ -137,6 +137,7 @@ class CasAuthenticationPlugin extends AuthenticationPlugin
$casSettings['server']=$this->server;
$casSettings['port']=$this->port;
$casSettings['path']=$this->path;
+ $casSettings['takeOverLogin']=$this->takeOverLogin;
}
function onPluginVersion(&$versions)
diff --git a/plugins/CasAuthentication/caslogin.php b/plugins/CasAuthentication/caslogin.php
index 390a75d8b..a66774dc1 100644
--- a/plugins/CasAuthentication/caslogin.php
+++ b/plugins/CasAuthentication/caslogin.php
@@ -54,9 +54,18 @@ class CasloginAction extends Action
// We don't have to return to it again
common_set_returnto(null);
} else {
- $url = common_local_url('all',
- array('nickname' =>
- $user->nickname));
+ if(common_config('site', 'private') && $casSettings['takeOverLogin']) {
+ //SSO users expect to just go to the URL they entered
+ //if we don't have a returnto set, the user entered the
+ //main StatusNet url, so send them there.
+ $url = common_local_url('public');
+ } else {
+ //With normal logins (regular form-based username/password),
+ //the user would expect to go to their home after logging in.
+ $url = common_local_url('public',
+ array('nickname' =>
+ $user->nickname));
+ }
}
common_redirect($url, 303);
diff --git a/plugins/CasAuthentication/extlib/CAS.php b/plugins/CasAuthentication/extlib/CAS.php
index f5ea0b12a..e75437419 100644
--- a/plugins/CasAuthentication/extlib/CAS.php
+++ b/plugins/CasAuthentication/extlib/CAS.php
@@ -1,1471 +1,1615 @@
-<?php
-
-// commented in 0.4.22-RC2 for Sylvain Derosiaux
-// error_reporting(E_ALL ^ E_NOTICE);
-
-//
-// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
-//
-if (!$_SERVER['REQUEST_URI']) {
- $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
-}
-
-//
-// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
-//
-if (version_compare(PHP_VERSION,'5','>=')) {
- require_once(dirname(__FILE__).'/CAS/domxml-php4-php5.php');
-}
-
-/**
- * @file CAS/CAS.php
- * Interface class of the phpCAS library
- *
- * @ingroup public
- */
-
-// ########################################################################
-// CONSTANTS
-// ########################################################################
-
-// ------------------------------------------------------------------------
-// CAS VERSIONS
-// ------------------------------------------------------------------------
-
-/**
- * phpCAS version. accessible for the user by phpCAS::getVersion().
- */
-define('PHPCAS_VERSION','1.0.1');
-
-// ------------------------------------------------------------------------
-// CAS VERSIONS
-// ------------------------------------------------------------------------
- /**
- * @addtogroup public
- * @{
- */
-
-/**
- * CAS version 1.0
- */
-define("CAS_VERSION_1_0",'1.0');
-/*!
- * CAS version 2.0
- */
-define("CAS_VERSION_2_0",'2.0');
-
-/** @} */
- /**
- * @addtogroup publicPGTStorage
- * @{
- */
-// ------------------------------------------------------------------------
-// FILE PGT STORAGE
-// ------------------------------------------------------------------------
- /**
- * Default path used when storing PGT's to file
- */
-define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
-/**
- * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files
- */
-define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
-/**
- * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files
- */
-define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
-/**
- * Default format used when storing PGT's to file
- */
-define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
-// ------------------------------------------------------------------------
-// DATABASE PGT STORAGE
-// ------------------------------------------------------------------------
- /**
- * default database type when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
-/**
- * default host when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
-/**
- * default port when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
-/**
- * default database when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
-/**
- * default table when storing PGT's to database
- */
-define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
-
-/** @} */
-// ------------------------------------------------------------------------
-// SERVICE ACCESS ERRORS
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicServices
- * @{
- */
-
-/**
- * phpCAS::service() error code on success
- */
-define("PHPCAS_SERVICE_OK",0);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not respond.
- */
-define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the response of the CAS server was ill-formed.
- */
-define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
-/**
- * phpCAS::service() error code when the PT could not retrieve because
- * the CAS server did not want to.
- */
-define("PHPCAS_SERVICE_PT_FAILURE",3);
-/**
- * phpCAS::service() error code when the service was not available.
- */
-define("PHPCAS_SERVICE_NOT AVAILABLE",4);
-
-/** @} */
-// ------------------------------------------------------------------------
-// LANGUAGES
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicLang
- * @{
- */
-
-define("PHPCAS_LANG_ENGLISH", 'english');
-define("PHPCAS_LANG_FRENCH", 'french');
-define("PHPCAS_LANG_GREEK", 'greek');
-define("PHPCAS_LANG_GERMAN", 'german');
-define("PHPCAS_LANG_JAPANESE", 'japanese');
-define("PHPCAS_LANG_SPANISH", 'spanish');
-define("PHPCAS_LANG_CATALAN", 'catalan');
-
-/** @} */
-
-/**
- * @addtogroup internalLang
- * @{
- */
-
-/**
- * phpCAS default language (when phpCAS::setLang() is not used)
- */
-define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
-
-/** @} */
-// ------------------------------------------------------------------------
-// DEBUG
-// ------------------------------------------------------------------------
- /**
- * @addtogroup publicDebug
- * @{
- */
-
-/**
- * The default directory for the debug file under Unix.
- */
-define('DEFAULT_DEBUG_DIR','/tmp/');
-
-/** @} */
-// ------------------------------------------------------------------------
-// MISC
-// ------------------------------------------------------------------------
- /**
- * @addtogroup internalMisc
- * @{
- */
-
-/**
- * This global variable is used by the interface class phpCAS.
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_CLIENT'] = null;
-
-/**
- * This global variable is used to store where the initializer is called from
- * (to print a comprehensive error in case of multiple calls).
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_INIT_CALL'] = array('done' => FALSE,
- 'file' => '?',
- 'line' => -1,
- 'method' => '?');
-
-/**
- * This global variable is used to store where the method checking
- * the authentication is called from (to print comprehensive errors)
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_AUTH_CHECK_CALL'] = array('done' => FALSE,
- 'file' => '?',
- 'line' => -1,
- 'method' => '?',
- 'result' => FALSE);
-
-/**
- * This global variable is used to store phpCAS debug mode.
- *
- * @hideinitializer
- */
-$GLOBALS['PHPCAS_DEBUG'] = array('filename' => FALSE,
- 'indent' => 0,
- 'unique_id' => '');
-
-/** @} */
-
-// ########################################################################
-// CLIENT CLASS
-// ########################################################################
-
-// include client class
-include_once(dirname(__FILE__).'/CAS/client.php');
-
-// ########################################################################
-// INTERFACE CLASS
-// ########################################################################
-
-/**
- * @class phpCAS
- * The phpCAS class is a simple container for the phpCAS library. It provides CAS
- * authentication for web applications written in PHP.
- *
- * @ingroup public
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * \internal All its methods access the same object ($PHPCAS_CLIENT, declared
- * at the end of CAS/client.php).
- */
-
-
-
-class phpCAS
-{
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * @addtogroup publicInit
- * @{
- */
-
- /**
- * phpCAS client initializer.
- * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
- * called, only once, and before all other methods (except phpCAS::getVersion()
- * and phpCAS::setDebug()).
- *
- * @param $server_version the version of the CAS server
- * @param $server_hostname the hostname of the CAS server
- * @param $server_port the port the CAS server is running on
- * @param $server_uri the URI the CAS server is responding on
- * @param $start_session Have phpCAS start PHP sessions (default true)
- *
- * @return a newly created CASClient object
- */
- function client($server_version,
- $server_hostname,
- $server_port,
- $server_uri,
- $start_session = true)
- {
- global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
-
- phpCAS::traceBegin();
- if ( is_object($PHPCAS_CLIENT) ) {
- phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
- }
- if ( gettype($server_version) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
- }
- if ( gettype($server_hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
- }
- if ( gettype($server_port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
- }
- if ( gettype($server_uri) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
- }
-
- // store where the initialzer is called from
- $dbg = phpCAS::backtrace();
- $PHPCAS_INIT_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__);
-
- // initialize the global object $PHPCAS_CLIENT
- $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
- phpCAS::traceEnd();
- }
-
- /**
- * phpCAS proxy initializer.
- * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
- * called, only once, and before all other methods (except phpCAS::getVersion()
- * and phpCAS::setDebug()).
- *
- * @param $server_version the version of the CAS server
- * @param $server_hostname the hostname of the CAS server
- * @param $server_port the port the CAS server is running on
- * @param $server_uri the URI the CAS server is responding on
- * @param $start_session Have phpCAS start PHP sessions (default true)
- *
- * @return a newly created CASClient object
- */
- function proxy($server_version,
- $server_hostname,
- $server_port,
- $server_uri,
- $start_session = true)
- {
- global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
-
- phpCAS::traceBegin();
- if ( is_object($PHPCAS_CLIENT) ) {
- phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
- }
- if ( gettype($server_version) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
- }
- if ( gettype($server_hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
- }
- if ( gettype($server_port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
- }
- if ( gettype($server_uri) != 'string' ) {
- phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
- }
-
- // store where the initialzer is called from
- $dbg = phpCAS::backtrace();
- $PHPCAS_INIT_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__);
-
- // initialize the global object $PHPCAS_CLIENT
- $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
- phpCAS::traceEnd();
- }
-
- /** @} */
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * @addtogroup publicDebug
- * @{
- */
-
- /**
- * Set/unset debug mode
- *
- * @param $filename the name of the file used for logging, or FALSE to stop debugging.
- */
- function setDebug($filename='')
- {
- global $PHPCAS_DEBUG;
-
- if ( $filename != FALSE && gettype($filename) != 'string' ) {
- phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
- }
-
- if ( empty($filename) ) {
- if ( preg_match('/^Win.*/',getenv('OS')) ) {
- if ( isset($_ENV['TMP']) ) {
- $debugDir = $_ENV['TMP'].'/';
- } else if ( isset($_ENV['TEMP']) ) {
- $debugDir = $_ENV['TEMP'].'/';
- } else {
- $debugDir = '';
- }
- } else {
- $debugDir = DEFAULT_DEBUG_DIR;
- }
- $filename = $debugDir . 'phpCAS.log';
- }
-
- if ( empty($PHPCAS_DEBUG['unique_id']) ) {
- $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4);
- }
-
- $PHPCAS_DEBUG['filename'] = $filename;
-
- phpCAS::trace('START ******************');
- }
-
- /** @} */
- /**
- * @addtogroup internalDebug
- * @{
- */
-
- /**
- * This method is a wrapper for debug_backtrace() that is not available
- * in all PHP versions (>= 4.3.0 only)
- */
- function backtrace()
- {
- if ( function_exists('debug_backtrace') ) {
- return debug_backtrace();
- } else {
- // poor man's hack ... but it does work ...
- return array();
- }
- }
-
- /**
- * Logs a string in debug mode.
- *
- * @param $str the string to write
- *
- * @private
- */
- function log($str)
- {
- $indent_str = ".";
- global $PHPCAS_DEBUG;
-
- if ( $PHPCAS_DEBUG['filename'] ) {
- for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
- $indent_str .= '| ';
- }
- error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
- }
-
- }
-
- /**
- * This method is used by interface methods to print an error and where the function
- * was originally called from.
- *
- * @param $msg the message to print
- *
- * @private
- */
- function error($msg)
- {
- $dbg = phpCAS::backtrace();
- $function = '?';
- $file = '?';
- $line = '?';
- if ( is_array($dbg) ) {
- for ( $i=1; $i<sizeof($dbg); $i++) {
- if ( is_array($dbg[$i]) ) {
- if ( $dbg[$i]['class'] == __CLASS__ ) {
- $function = $dbg[$i]['function'];
- $file = $dbg[$i]['file'];
- $line = $dbg[$i]['line'];
- }
- }
- }
- }
- echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>".__CLASS__."::".$function.'(): '.htmlentities($msg)."</b></font> in <b>".$file."</b> on line <b>".$line."</b><br />\n";
- phpCAS::trace($msg);
- phpCAS::traceExit();
- exit();
- }
-
- /**
- * This method is used to log something in debug mode.
- */
- function trace($str)
- {
- $dbg = phpCAS::backtrace();
- phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
- }
-
- /**
- * This method is used to indicate the start of the execution of a function in debug mode.
- */
- function traceBegin()
- {
- global $PHPCAS_DEBUG;
-
- $dbg = phpCAS::backtrace();
- $str = '=> ';
- if ( !empty($dbg[2]['class']) ) {
- $str .= $dbg[2]['class'].'::';
- }
- $str .= $dbg[2]['function'].'(';
- if ( is_array($dbg[2]['args']) ) {
- foreach ($dbg[2]['args'] as $index => $arg) {
- if ( $index != 0 ) {
- $str .= ', ';
- }
- $str .= str_replace("\n","",var_export($arg,TRUE));
- }
- }
- $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
- phpCAS::log($str);
- $PHPCAS_DEBUG['indent'] ++;
- }
-
- /**
- * This method is used to indicate the end of the execution of a function in debug mode.
- *
- * @param $res the result of the function
- */
- function traceEnd($res='')
- {
- global $PHPCAS_DEBUG;
-
- $PHPCAS_DEBUG['indent'] --;
- $dbg = phpCAS::backtrace();
- $str = '';
- $str .= '<= '.str_replace("\n","",var_export($res,TRUE));
- phpCAS::log($str);
- }
-
- /**
- * This method is used to indicate the end of the execution of the program
- */
- function traceExit()
- {
- global $PHPCAS_DEBUG;
-
- phpCAS::log('exit()');
- while ( $PHPCAS_DEBUG['indent'] > 0 ) {
- phpCAS::log('-');
- $PHPCAS_DEBUG['indent'] --;
- }
- }
-
- /** @} */
- // ########################################################################
- // INTERNATIONALIZATION
- // ########################################################################
- /**
- * @addtogroup publicLang
- * @{
- */
-
- /**
- * This method is used to set the language used by phpCAS.
- * @note Can be called only once.
- *
- * @param $lang a string representing the language.
- *
- * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
- */
- function setLang($lang)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($lang) != 'string' ) {
- phpCAS::error('type mismatched for parameter $lang (should be `string\')');
- }
- $PHPCAS_CLIENT->setLang($lang);
- }
-
- /** @} */
- // ########################################################################
- // VERSION
- // ########################################################################
- /**
- * @addtogroup public
- * @{
- */
-
- /**
- * This method returns the phpCAS version.
- *
- * @return the phpCAS version.
- */
- function getVersion()
- {
- return PHPCAS_VERSION;
- }
-
- /** @} */
- // ########################################################################
- // HTML OUTPUT
- // ########################################################################
- /**
- * @addtogroup publicOutput
- * @{
- */
-
- /**
- * This method sets the HTML header used for all outputs.
- *
- * @param $header the HTML header.
- */
- function setHTMLHeader($header)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($header) != 'string' ) {
- phpCAS::error('type mismatched for parameter $header (should be `string\')');
- }
- $PHPCAS_CLIENT->setHTMLHeader($header);
- }
-
- /**
- * This method sets the HTML footer used for all outputs.
- *
- * @param $footer the HTML footer.
- */
- function setHTMLFooter($footer)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($footer) != 'string' ) {
- phpCAS::error('type mismatched for parameter $footer (should be `string\')');
- }
- $PHPCAS_CLIENT->setHTMLFooter($footer);
- }
-
- /** @} */
- // ########################################################################
- // PGT STORAGE
- // ########################################################################
- /**
- * @addtogroup publicPGTStorage
- * @{
- */
-
- /**
- * This method is used to tell phpCAS to store the response of the
- * CAS server to PGT requests onto the filesystem.
- *
- * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
- * @param $path the path where the PGT's should be stored
- */
- function setPGTStorageFile($format='',
- $path='')
- {
- global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
- }
- if ( gettype($format) != 'string' ) {
- phpCAS::error('type mismatched for parameter $format (should be `string\')');
- }
- if ( gettype($path) != 'string' ) {
- phpCAS::error('type mismatched for parameter $format (should be `string\')');
- }
- $PHPCAS_CLIENT->setPGTStorageFile($format,$path);
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to tell phpCAS to store the response of the
- * CAS server to PGT requests into a database.
- * @note The connection to the database is done only when needed.
- * As a consequence, bad parameters are detected only when
- * initializing PGT storage, except in debug mode.
- *
- * @param $user the user to access the data with
- * @param $password the user's password
- * @param $database_type the type of the database hosting the data
- * @param $hostname the server hosting the database
- * @param $port the port the server is listening on
- * @param $database the name of the database
- * @param $table the name of the table storing the data
- */
- function setPGTStorageDB($user,
- $password,
- $database_type='',
- $hostname='',
- $port=0,
- $database='',
- $table='')
- {
- global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
- }
- if ( gettype($user) != 'string' ) {
- phpCAS::error('type mismatched for parameter $user (should be `string\')');
- }
- if ( gettype($password) != 'string' ) {
- phpCAS::error('type mismatched for parameter $password (should be `string\')');
- }
- if ( gettype($database_type) != 'string' ) {
- phpCAS::error('type mismatched for parameter $database_type (should be `string\')');
- }
- if ( gettype($hostname) != 'string' ) {
- phpCAS::error('type mismatched for parameter $hostname (should be `string\')');
- }
- if ( gettype($port) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $port (should be `integer\')');
- }
- if ( gettype($database) != 'string' ) {
- phpCAS::error('type mismatched for parameter $database (should be `string\')');
- }
- if ( gettype($table) != 'string' ) {
- phpCAS::error('type mismatched for parameter $table (should be `string\')');
- }
- $PHPCAS_CLIENT->setPGTStorageDB($this,$user,$password,$hostname,$port,$database,$table);
- phpCAS::traceEnd();
- }
-
- /** @} */
- // ########################################################################
- // ACCESS TO EXTERNAL SERVICES
- // ########################################################################
- /**
- * @addtogroup publicServices
- * @{
- */
-
- /**
- * This method is used to access an HTTP[S] service.
- *
- * @param $url the service to access.
- * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
- * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
- * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
- * @param $output the output of the service (also used to give an error
- * message on failure).
- *
- * @return TRUE on success, FALSE otherwise (in this later case, $err_code
- * gives the reason why it failed and $output contains an error message).
- */
- function serviceWeb($url,&$err_code,&$output)
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
-
- $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
-
- phpCAS::traceEnd($res);
- return $res;
- }
-
- /**
- * This method is used to access an IMAP/POP3/NNTP service.
- *
- * @param $url a string giving the URL of the service, including the mailing box
- * for IMAP URLs, as accepted by imap_open().
- * @param $flags options given to imap_open().
- * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
- * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
- * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
- * @param $err_msg an error message on failure
- * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
- * on success, FALSE on error).
- *
- * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
- * gives the reason why it failed and $err_msg contains an error message).
- */
- function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
-
- if ( gettype($flags) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $flags (should be `integer\')');
- }
-
- $res = $PHPCAS_CLIENT->serviceMail($url,$flags,$err_code,$err_msg,$pt);
-
- phpCAS::traceEnd($res);
- return $res;
- }
-
- /** @} */
- // ########################################################################
- // AUTHENTICATION
- // ########################################################################
- /**
- * @addtogroup publicAuth
- * @{
- */
-
- /**
- * Set the times authentication will be cached before really accessing the CAS server in gateway mode:
- * - -1: check only once, and then never again (until you pree login)
- * - 0: always check
- * - n: check every "n" time
- *
- * @param $n an integer.
- */
- function setCacheTimesForAuthRecheck($n)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( gettype($n) != 'integer' ) {
- phpCAS::error('type mismatched for parameter $header (should be `string\')');
- }
- $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
- }
-
- /**
- * This method is called to check if the user is authenticated (use the gateway feature).
- * @return TRUE when the user is authenticated; otherwise FALSE.
- */
- function checkAuthentication()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- $auth = $PHPCAS_CLIENT->checkAuthentication();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
- phpCAS::traceEnd($auth);
- return $auth;
- }
-
- /**
- * This method is called to force authentication if the user was not already
- * authenticated. If the user is not authenticated, halt by redirecting to
- * the CAS server.
- */
- function forceAuthentication()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- $auth = $PHPCAS_CLIENT->forceAuthentication();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
-
- if ( !$auth ) {
- phpCAS::trace('user is not authenticated, redirecting to the CAS server');
- $PHPCAS_CLIENT->forceAuthentication();
- } else {
- phpCAS::trace('no need to authenticate (user `'.phpCAS::getUser().'\' is already authenticated)');
- }
-
- phpCAS::traceEnd();
- return $auth;
- }
-
- /**
- * This method is called to renew the authentication.
- **/
- function renewAuthentication() {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before'.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__, 'result' => $auth );
-
- $PHPCAS_CLIENT->renewAuthentication();
- phpCAS::traceEnd();
- }
-
- /**
- * This method has been left from version 0.4.1 for compatibility reasons.
- */
- function authenticate()
- {
- phpCAS::error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
- }
-
- /**
- * This method is called to check if the user is authenticated (previously or by
- * tickets given in the URL).
- *
- * @return TRUE when the user is authenticated.
- */
- function isAuthenticated()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
-
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
-
- // call the isAuthenticated method of the global $PHPCAS_CLIENT object
- $auth = $PHPCAS_CLIENT->isAuthenticated();
-
- // store where the authentication has been checked and the result
- $dbg = phpCAS::backtrace();
- $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
- 'file' => $dbg[0]['file'],
- 'line' => $dbg[0]['line'],
- 'method' => __CLASS__.'::'.__FUNCTION__,
- 'result' => $auth );
- phpCAS::traceEnd($auth);
- return $auth;
- }
-
- /**
- * Checks whether authenticated based on $_SESSION. Useful to avoid
- * server calls.
- * @return true if authenticated, false otherwise.
- * @since 0.4.22 by Brendan Arnold
- */
- function isSessionAuthenticated ()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->isSessionAuthenticated());
- }
-
- /**
- * This method returns the CAS user's login name.
- * @warning should not be called only after phpCAS::forceAuthentication()
- * or phpCAS::checkAuthentication().
- *
- * @return the login name of the authenticated user
- */
- function getUser()
- {
- global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
- }
- if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
- phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
- }
- return $PHPCAS_CLIENT->getUser();
- }
-
- /**
- * Handle logout requests.
- */
- function handleLogoutRequests($check_client=true, $allowed_clients=false)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
- }
-
- /**
- * This method returns the URL to be used to login.
- * or phpCAS::isAuthenticated().
- *
- * @return the login name of the authenticated user
- */
- function getServerLoginURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return $PHPCAS_CLIENT->getServerLoginURL();
- }
-
- /**
- * Set the login URL of the CAS server.
- * @param $url the login URL
- * @since 0.4.21 by Wyman Chan
- */
- function setServerLoginURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after
- '.__CLASS__.'::client()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be
- `string\')');
- }
- $PHPCAS_CLIENT->setServerLoginURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * This method returns the URL to be used to login.
- * or phpCAS::isAuthenticated().
- *
- * @return the login name of the authenticated user
- */
- function getServerLogoutURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
- }
- return $PHPCAS_CLIENT->getServerLogoutURL();
- }
-
- /**
- * Set the logout URL of the CAS server.
- * @param $url the logout URL
- * @since 0.4.21 by Wyman Chan
- */
- function setServerLogoutURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after
- '.__CLASS__.'::client()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be
- `string\')');
- }
- $PHPCAS_CLIENT->setServerLogoutURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS.
- * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
- * @public
- */
- function logout($params = "") {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if (!is_object($PHPCAS_CLIENT)) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $parsedParams = array();
- if ($params != "") {
- if (is_string($params)) {
- phpCAS::error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
- }
- if (!is_array($params)) {
- phpCAS::error('type mismatched for parameter $params (should be `array\')');
- }
- foreach ($params as $key => $value) {
- if ($key != "service" && $key != "url") {
- phpCAS::error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
- }
- $parsedParams[$key] = $value;
- }
- }
- $PHPCAS_CLIENT->logout($parsedParams);
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $service a URL that will be transmitted to the CAS server
- */
- function logoutWithRedirectService($service) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($service)) {
- phpCAS::error('type mismatched for parameter $service (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("service" => $service));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $url a URL that will be transmitted to the CAS server
- */
- function logoutWithUrl($url) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($url)) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("url" => $url));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * This method is used to logout from CAS. Halts by redirecting to the CAS server.
- * @param $service a URL that will be transmitted to the CAS server
- * @param $url a URL that will be transmitted to the CAS server
- */
- function logoutWithRedirectServiceAndUrl($service, $url) {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if (!is_string($service)) {
- phpCAS::error('type mismatched for parameter $service (should be `string\')');
- }
- if (!is_string($url)) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->logout(array("service" => $service, "url" => $url));
- // never reached
- phpCAS::traceEnd();
- }
-
- /**
- * Set the fixed URL that will be used by the CAS server to transmit the PGT.
- * When this method is not called, a phpCAS script uses its own URL for the callback.
- *
- * @param $url the URL
- */
- function setFixedCallbackURL($url='')
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( !$PHPCAS_CLIENT->isProxy() ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->setCallbackURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * Set the fixed URL that will be set as the CAS service parameter. When this
- * method is not called, a phpCAS script uses its own URL.
- *
- * @param $url the URL
- */
- function setFixedServiceURL($url)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($url) != 'string' ) {
- phpCAS::error('type mismatched for parameter $url (should be `string\')');
- }
- $PHPCAS_CLIENT->setURL($url);
- phpCAS::traceEnd();
- }
-
- /**
- * Get the URL that is set as the CAS service parameter.
- */
- function getServiceURL()
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- return($PHPCAS_CLIENT->getURL());
- }
-
- /**
- * Retrieve a Proxy Ticket from the CAS server.
- */
- function retrievePT($target_service,&$err_code,&$err_msg)
- {
- global $PHPCAS_CLIENT;
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
- }
- if ( gettype($target_service) != 'string' ) {
- phpCAS::error('type mismatched for parameter $target_service(should be `string\')');
- }
- return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
- }
-
- /**
- * Set the certificate of the CAS server.
- *
- * @param $cert the PEM certificate
- */
- function setCasServerCert($cert)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if ( gettype($cert) != 'string' ) {
- phpCAS::error('type mismatched for parameter $cert (should be `string\')');
- }
- $PHPCAS_CLIENT->setCasServerCert($cert);
- phpCAS::traceEnd();
- }
-
- /**
- * Set the certificate of the CAS server CA.
- *
- * @param $cert the CA certificate
- */
- function setCasServerCACert($cert)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- if ( gettype($cert) != 'string' ) {
- phpCAS::error('type mismatched for parameter $cert (should be `string\')');
- }
- $PHPCAS_CLIENT->setCasServerCACert($cert);
- phpCAS::traceEnd();
- }
-
- /**
- * Set no SSL validation for the CAS server.
- */
- function setNoCasServerValidation()
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $PHPCAS_CLIENT->setNoCasServerValidation();
- phpCAS::traceEnd();
- }
-
- /** @} */
-
- /**
- * Change CURL options.
- * CURL is used to connect through HTTPS to CAS server
- * @param $key the option key
- * @param $value the value to set
- */
- function setExtraCurlOption($key, $value)
- {
- global $PHPCAS_CLIENT;
- phpCAS::traceBegin();
- if ( !is_object($PHPCAS_CLIENT) ) {
- phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
- }
- $PHPCAS_CLIENT->setExtraCurlOption($key, $value);
- phpCAS::traceEnd();
- }
-
-}
-
-// ########################################################################
-// DOCUMENTATION
-// ########################################################################
-
-// ########################################################################
-// MAIN PAGE
-
-/**
- * @mainpage
- *
- * The following pages only show the source documentation.
- *
- */
-
-// ########################################################################
-// MODULES DEFINITION
-
-/** @defgroup public User interface */
-
-/** @defgroup publicInit Initialization
- * @ingroup public */
-
-/** @defgroup publicAuth Authentication
- * @ingroup public */
-
-/** @defgroup publicServices Access to external services
- * @ingroup public */
-
-/** @defgroup publicConfig Configuration
- * @ingroup public */
-
-/** @defgroup publicLang Internationalization
- * @ingroup publicConfig */
-
-/** @defgroup publicOutput HTML output
- * @ingroup publicConfig */
-
-/** @defgroup publicPGTStorage PGT storage
- * @ingroup publicConfig */
-
-/** @defgroup publicDebug Debugging
- * @ingroup public */
-
-
-/** @defgroup internal Implementation */
-
-/** @defgroup internalAuthentication Authentication
- * @ingroup internal */
-
-/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
- * @ingroup internal */
-
-/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
- * @ingroup internal */
-
-/** @defgroup internalPGTStorage PGT storage
- * @ingroup internalProxy */
-
-/** @defgroup internalPGTStorageDB PGT storage in a database
- * @ingroup internalPGTStorage */
-
-/** @defgroup internalPGTStorageFile PGT storage on the filesystem
- * @ingroup internalPGTStorage */
-
-/** @defgroup internalCallback Callback from the CAS server
- * @ingroup internalProxy */
-
-/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
- * @ingroup internal */
-
-/** @defgroup internalConfig Configuration
- * @ingroup internal */
-
-/** @defgroup internalOutput HTML output
- * @ingroup internalConfig */
-
-/** @defgroup internalLang Internationalization
- * @ingroup internalConfig
- *
- * To add a new language:
- * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
- * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
- * - 3. Make the translations
- */
-
-/** @defgroup internalDebug Debugging
- * @ingroup internal */
-
-/** @defgroup internalMisc Miscellaneous
- * @ingroup internal */
-
-// ########################################################################
-// EXAMPLES
-
-/**
- * @example example_simple.php
- */
- /**
- * @example example_proxy.php
- */
- /**
- * @example example_proxy2.php
- */
- /**
- * @example example_lang.php
- */
- /**
- * @example example_html.php
- */
- /**
- * @example example_file.php
- */
- /**
- * @example example_db.php
- */
- /**
- * @example example_service.php
- */
- /**
- * @example example_session_proxy.php
- */
- /**
- * @example example_session_service.php
- */
- /**
- * @example example_gateway.php
- */
-
-
-
-?>
+<?php
+
+// commented in 0.4.22-RC2 for Sylvain Derosiaux
+// error_reporting(E_ALL ^ E_NOTICE);
+
+//
+// hack by Vangelis Haniotakis to handle the absence of $_SERVER['REQUEST_URI'] in IIS
+//
+if (!$_SERVER['REQUEST_URI']) {
+ $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME'].'?'.$_SERVER['QUERY_STRING'];
+}
+
+//
+// another one by Vangelis Haniotakis also to make phpCAS work with PHP5
+//
+if (version_compare(PHP_VERSION,'5','>=')) {
+ require_once(dirname(__FILE__).'/CAS/domxml-php4-to-php5.php');
+}
+
+/**
+ * @file CAS/CAS.php
+ * Interface class of the phpCAS library
+ *
+ * @ingroup public
+ */
+
+// ########################################################################
+// CONSTANTS
+// ########################################################################
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+
+/**
+ * phpCAS version. accessible for the user by phpCAS::getVersion().
+ */
+define('PHPCAS_VERSION','1.1.0RC6');
+
+// ------------------------------------------------------------------------
+// CAS VERSIONS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+/**
+ * CAS version 1.0
+ */
+define("CAS_VERSION_1_0",'1.0');
+/*!
+ * CAS version 2.0
+ */
+define("CAS_VERSION_2_0",'2.0');
+
+// ------------------------------------------------------------------------
+// SAML defines
+// ------------------------------------------------------------------------
+
+/**
+ * SAML protocol
+ */
+define("SAML_VERSION_1_1", 'S1');
+
+/**
+ * XML header for SAML POST
+ */
+define("SAML_XML_HEADER", '<?xml version="1.0" encoding="UTF-8"?>');
+
+/**
+ * SOAP envelope for SAML POST
+ */
+define ("SAML_SOAP_ENV", '<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/>');
+
+/**
+ * SOAP body for SAML POST
+ */
+define ("SAML_SOAP_BODY", '<SOAP-ENV:Body>');
+
+/**
+ * SAMLP request
+ */
+define ("SAMLP_REQUEST", '<samlp:Request xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" MajorVersion="1" MinorVersion="1" RequestID="_192.168.16.51.1024506224022" IssueInstant="2002-06-19T17:03:44.022Z">');
+define ("SAMLP_REQUEST_CLOSE", '</samlp:Request>');
+
+/**
+ * SAMLP artifact tag (for the ticket)
+ */
+define ("SAML_ASSERTION_ARTIFACT", '<samlp:AssertionArtifact>');
+
+/**
+ * SAMLP close
+ */
+define ("SAML_ASSERTION_ARTIFACT_CLOSE", '</samlp:AssertionArtifact>');
+
+/**
+ * SOAP body close
+ */
+define ("SAML_SOAP_BODY_CLOSE", '</SOAP-ENV:Body>');
+
+/**
+ * SOAP envelope close
+ */
+define ("SAML_SOAP_ENV_CLOSE", '</SOAP-ENV:Envelope>');
+
+/**
+ * SAML Attributes
+ */
+define("SAML_ATTRIBUTES", 'SAMLATTRIBS');
+
+
+
+/** @} */
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+// ------------------------------------------------------------------------
+// FILE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * Default path used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_PATH",'/tmp');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write plain text files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_PLAIN",'plain');
+/**
+ * phpCAS::setPGTStorageFile()'s 2nd parameter to write xml files
+ */
+define("CAS_PGT_STORAGE_FILE_FORMAT_XML",'xml');
+/**
+ * Default format used when storing PGT's to file
+ */
+define("CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT",CAS_PGT_STORAGE_FILE_FORMAT_PLAIN);
+// ------------------------------------------------------------------------
+// DATABASE PGT STORAGE
+// ------------------------------------------------------------------------
+ /**
+ * default database type when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE",'mysql');
+/**
+ * default host when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME",'localhost');
+/**
+ * default port when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_PORT",'');
+/**
+ * default database when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_DATABASE",'phpCAS');
+/**
+ * default table when storing PGT's to database
+ */
+define("CAS_PGT_STORAGE_DB_DEFAULT_TABLE",'pgt');
+
+/** @} */
+// ------------------------------------------------------------------------
+// SERVICE ACCESS ERRORS
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+/**
+ * phpCAS::service() error code on success
+ */
+define("PHPCAS_SERVICE_OK",0);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not respond.
+ */
+define("PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE",1);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the response of the CAS server was ill-formed.
+ */
+define("PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE",2);
+/**
+ * phpCAS::service() error code when the PT could not retrieve because
+ * the CAS server did not want to.
+ */
+define("PHPCAS_SERVICE_PT_FAILURE",3);
+/**
+ * phpCAS::service() error code when the service was not available.
+ */
+define("PHPCAS_SERVICE_NOT AVAILABLE",4);
+
+/** @} */
+// ------------------------------------------------------------------------
+// LANGUAGES
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+define("PHPCAS_LANG_ENGLISH", 'english');
+define("PHPCAS_LANG_FRENCH", 'french');
+define("PHPCAS_LANG_GREEK", 'greek');
+define("PHPCAS_LANG_GERMAN", 'german');
+define("PHPCAS_LANG_JAPANESE", 'japanese');
+define("PHPCAS_LANG_SPANISH", 'spanish');
+define("PHPCAS_LANG_CATALAN", 'catalan');
+
+/** @} */
+
+/**
+ * @addtogroup internalLang
+ * @{
+ */
+
+/**
+ * phpCAS default language (when phpCAS::setLang() is not used)
+ */
+define("PHPCAS_LANG_DEFAULT", PHPCAS_LANG_ENGLISH);
+
+/** @} */
+// ------------------------------------------------------------------------
+// DEBUG
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+/**
+ * The default directory for the debug file under Unix.
+ */
+define('DEFAULT_DEBUG_DIR','/tmp/');
+
+/** @} */
+// ------------------------------------------------------------------------
+// MISC
+// ------------------------------------------------------------------------
+ /**
+ * @addtogroup internalMisc
+ * @{
+ */
+
+/**
+ * This global variable is used by the interface class phpCAS.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_CLIENT'] = null;
+
+/**
+ * This global variable is used to store where the initializer is called from
+ * (to print a comprehensive error in case of multiple calls).
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_INIT_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?');
+
+/**
+ * This global variable is used to store where the method checking
+ * the authentication is called from (to print comprehensive errors)
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_AUTH_CHECK_CALL'] = array('done' => FALSE,
+ 'file' => '?',
+ 'line' => -1,
+ 'method' => '?',
+ 'result' => FALSE);
+
+/**
+ * This global variable is used to store phpCAS debug mode.
+ *
+ * @hideinitializer
+ */
+$GLOBALS['PHPCAS_DEBUG'] = array('filename' => FALSE,
+ 'indent' => 0,
+ 'unique_id' => '');
+
+/** @} */
+
+// ########################################################################
+// CLIENT CLASS
+// ########################################################################
+
+// include client class
+include_once(dirname(__FILE__).'/CAS/client.php');
+
+// ########################################################################
+// INTERFACE CLASS
+// ########################################################################
+
+/**
+ * @class phpCAS
+ * The phpCAS class is a simple container for the phpCAS library. It provides CAS
+ * authentication for web applications written in PHP.
+ *
+ * @ingroup public
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * \internal All its methods access the same object ($PHPCAS_CLIENT, declared
+ * at the end of CAS/client.php).
+ */
+
+
+
+class phpCAS
+{
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * @addtogroup publicInit
+ * @{
+ */
+
+ /**
+ * phpCAS client initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function client($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initializer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,FALSE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * phpCAS proxy initializer.
+ * @note Only one of the phpCAS::client() and phpCAS::proxy functions should be
+ * called, only once, and before all other methods (except phpCAS::getVersion()
+ * and phpCAS::setDebug()).
+ *
+ * @param $server_version the version of the CAS server
+ * @param $server_hostname the hostname of the CAS server
+ * @param $server_port the port the CAS server is running on
+ * @param $server_uri the URI the CAS server is responding on
+ * @param $start_session Have phpCAS start PHP sessions (default true)
+ *
+ * @return a newly created CASClient object
+ */
+ function proxy($server_version,
+ $server_hostname,
+ $server_port,
+ $server_uri,
+ $start_session = true)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_INIT_CALL;
+
+ phpCAS::traceBegin();
+ if ( is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error($PHPCAS_INIT_CALL['method'].'() has already been called (at '.$PHPCAS_INIT_CALL['file'].':'.$PHPCAS_INIT_CALL['line'].')');
+ }
+ if ( gettype($server_version) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_version (should be `string\')');
+ }
+ if ( gettype($server_hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_hostname (should be `string\')');
+ }
+ if ( gettype($server_port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $server_port (should be `integer\')');
+ }
+ if ( gettype($server_uri) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $server_uri (should be `string\')');
+ }
+
+ // store where the initialzer is called from
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_INIT_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__);
+
+ // initialize the global object $PHPCAS_CLIENT
+ $PHPCAS_CLIENT = new CASClient($server_version,TRUE/*proxy*/,$server_hostname,$server_port,$server_uri,$start_session);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * @addtogroup publicDebug
+ * @{
+ */
+
+ /**
+ * Set/unset debug mode
+ *
+ * @param $filename the name of the file used for logging, or FALSE to stop debugging.
+ */
+ function setDebug($filename='')
+ {
+ global $PHPCAS_DEBUG;
+
+ if ( $filename != FALSE && gettype($filename) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $dbg (should be FALSE or the name of the log file)');
+ }
+
+ if ( empty($filename) ) {
+ if ( preg_match('/^Win.*/',getenv('OS')) ) {
+ if ( isset($_ENV['TMP']) ) {
+ $debugDir = $_ENV['TMP'].'/';
+ } else if ( isset($_ENV['TEMP']) ) {
+ $debugDir = $_ENV['TEMP'].'/';
+ } else {
+ $debugDir = '';
+ }
+ } else {
+ $debugDir = DEFAULT_DEBUG_DIR;
+ }
+ $filename = $debugDir . 'phpCAS.log';
+ }
+
+ if ( empty($PHPCAS_DEBUG['unique_id']) ) {
+ $PHPCAS_DEBUG['unique_id'] = substr(strtoupper(md5(uniqid(''))),0,4);
+ }
+
+ $PHPCAS_DEBUG['filename'] = $filename;
+
+ phpCAS::trace('START ******************');
+ }
+
+ /** @} */
+ /**
+ * @addtogroup internalDebug
+ * @{
+ */
+
+ /**
+ * This method is a wrapper for debug_backtrace() that is not available
+ * in all PHP versions (>= 4.3.0 only)
+ */
+ function backtrace()
+ {
+ if ( function_exists('debug_backtrace') ) {
+ return debug_backtrace();
+ } else {
+ // poor man's hack ... but it does work ...
+ return array();
+ }
+ }
+
+ /**
+ * Logs a string in debug mode.
+ *
+ * @param $str the string to write
+ *
+ * @private
+ */
+ function log($str)
+ {
+ $indent_str = ".";
+ global $PHPCAS_DEBUG;
+
+ if ( $PHPCAS_DEBUG['filename'] ) {
+ for ($i=0;$i<$PHPCAS_DEBUG['indent'];$i++) {
+ $indent_str .= '| ';
+ }
+ error_log($PHPCAS_DEBUG['unique_id'].' '.$indent_str.$str."\n",3,$PHPCAS_DEBUG['filename']);
+ }
+
+ }
+
+ /**
+ * This method is used by interface methods to print an error and where the function
+ * was originally called from.
+ *
+ * @param $msg the message to print
+ *
+ * @private
+ */
+ function error($msg)
+ {
+ $dbg = phpCAS::backtrace();
+ $function = '?';
+ $file = '?';
+ $line = '?';
+ if ( is_array($dbg) ) {
+ for ( $i=1; $i<sizeof($dbg); $i++) {
+ if ( is_array($dbg[$i]) ) {
+ if ( $dbg[$i]['class'] == __CLASS__ ) {
+ $function = $dbg[$i]['function'];
+ $file = $dbg[$i]['file'];
+ $line = $dbg[$i]['line'];
+ }
+ }
+ }
+ }
+ echo "<br />\n<b>phpCAS error</b>: <font color=\"FF0000\"><b>".__CLASS__."::".$function.'(): '.htmlentities($msg)."</b></font> in <b>".$file."</b> on line <b>".$line."</b><br />\n";
+ phpCAS::trace($msg);
+ phpCAS::traceExit();
+ exit();
+ }
+
+ /**
+ * This method is used to log something in debug mode.
+ */
+ function trace($str)
+ {
+ $dbg = phpCAS::backtrace();
+ phpCAS::log($str.' ['.basename($dbg[1]['file']).':'.$dbg[1]['line'].']');
+ }
+
+ /**
+ * This method is used to indicate the start of the execution of a function in debug mode.
+ */
+ function traceBegin()
+ {
+ global $PHPCAS_DEBUG;
+
+ $dbg = phpCAS::backtrace();
+ $str = '=> ';
+ if ( !empty($dbg[2]['class']) ) {
+ $str .= $dbg[2]['class'].'::';
+ }
+ $str .= $dbg[2]['function'].'(';
+ if ( is_array($dbg[2]['args']) ) {
+ foreach ($dbg[2]['args'] as $index => $arg) {
+ if ( $index != 0 ) {
+ $str .= ', ';
+ }
+ $str .= str_replace("\n","",var_export($arg,TRUE));
+ }
+ }
+ $str .= ') ['.basename($dbg[2]['file']).':'.$dbg[2]['line'].']';
+ phpCAS::log($str);
+ $PHPCAS_DEBUG['indent'] ++;
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of a function in debug mode.
+ *
+ * @param $res the result of the function
+ */
+ function traceEnd($res='')
+ {
+ global $PHPCAS_DEBUG;
+
+ $PHPCAS_DEBUG['indent'] --;
+ $dbg = phpCAS::backtrace();
+ $str = '';
+ $str .= '<= '.str_replace("\n","",var_export($res,TRUE));
+ phpCAS::log($str);
+ }
+
+ /**
+ * This method is used to indicate the end of the execution of the program
+ */
+ function traceExit()
+ {
+ global $PHPCAS_DEBUG;
+
+ phpCAS::log('exit()');
+ while ( $PHPCAS_DEBUG['indent'] > 0 ) {
+ phpCAS::log('-');
+ $PHPCAS_DEBUG['indent'] --;
+ }
+ }
+
+ /** @} */
+ // ########################################################################
+ // INTERNATIONALIZATION
+ // ########################################################################
+ /**
+ * @addtogroup publicLang
+ * @{
+ */
+
+ /**
+ * This method is used to set the language used by phpCAS.
+ * @note Can be called only once.
+ *
+ * @param $lang a string representing the language.
+ *
+ * @sa PHPCAS_LANG_FRENCH, PHPCAS_LANG_ENGLISH
+ */
+ function setLang($lang)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($lang) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $lang (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setLang($lang);
+ }
+
+ /** @} */
+ // ########################################################################
+ // VERSION
+ // ########################################################################
+ /**
+ * @addtogroup public
+ * @{
+ */
+
+ /**
+ * This method returns the phpCAS version.
+ *
+ * @return the phpCAS version.
+ */
+ function getVersion()
+ {
+ return PHPCAS_VERSION;
+ }
+
+ /** @} */
+ // ########################################################################
+ // HTML OUTPUT
+ // ########################################################################
+ /**
+ * @addtogroup publicOutput
+ * @{
+ */
+
+ /**
+ * This method sets the HTML header used for all outputs.
+ *
+ * @param $header the HTML header.
+ */
+ function setHTMLHeader($header)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($header) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLHeader($header);
+ }
+
+ /**
+ * This method sets the HTML footer used for all outputs.
+ *
+ * @param $footer the HTML footer.
+ */
+ function setHTMLFooter($footer)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($footer) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $footer (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setHTMLFooter($footer);
+ }
+
+ /** @} */
+ // ########################################################################
+ // PGT STORAGE
+ // ########################################################################
+ /**
+ * @addtogroup publicPGTStorage
+ * @{
+ */
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests onto the filesystem.
+ *
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed)
+ * @param $path the path where the PGT's should be stored
+ */
+ function setPGTStorageFile($format='',
+ $path='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($format) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ if ( gettype($path) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $format (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageFile($format,$path);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to tell phpCAS to store the response of the
+ * CAS server to PGT requests into a database.
+ * @note The connection to the database is done only when needed.
+ * As a consequence, bad parameters are detected only when
+ * initializing PGT storage, except in debug mode.
+ *
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ */
+ function setPGTStorageDB($user,
+ $password,
+ $database_type='',
+ $hostname='',
+ $port=0,
+ $database='',
+ $table='')
+ {
+ global $PHPCAS_CLIENT,$PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( $PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called before '.$PHPCAS_AUTH_CHECK_CALL['method'].'() (called at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].')');
+ }
+ if ( gettype($user) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $user (should be `string\')');
+ }
+ if ( gettype($password) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $password (should be `string\')');
+ }
+ if ( gettype($database_type) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database_type (should be `string\')');
+ }
+ if ( gettype($hostname) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $hostname (should be `string\')');
+ }
+ if ( gettype($port) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $port (should be `integer\')');
+ }
+ if ( gettype($database) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $database (should be `string\')');
+ }
+ if ( gettype($table) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $table (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setPGTStorageDB($user,$password,$database_type,$hostname,$port,$database,$table);
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+ // ########################################################################
+ // ACCESS TO EXTERNAL SERVICES
+ // ########################################################################
+ /**
+ * @addtogroup publicServices
+ * @{
+ */
+
+ /**
+ * This method is used to access an HTTP[S] service.
+ *
+ * @param $url the service to access.
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $output the output of the service (also used to give an error
+ * message on failure).
+ *
+ * @return TRUE on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $output contains an error message).
+ */
+ function serviceWeb($url,&$err_code,&$output)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceWeb($url,$err_code,$output);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /**
+ * This method is used to access an IMAP/POP3/NNTP service.
+ *
+ * @param $url a string giving the URL of the service, including the mailing box
+ * for IMAP URLs, as accepted by imap_open().
+ * @param $service a string giving for CAS retrieve Proxy ticket
+ * @param $flags options given to imap_open().
+ * @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
+ * success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
+ * PHPCAS_SERVICE_PT_FAILURE, PHPCAS_SERVICE_NOT AVAILABLE.
+ * @param $err_msg an error message on failure
+ * @param $pt the Proxy Ticket (PT) retrieved from the CAS server to access the URL
+ * on success, FALSE on error).
+ *
+ * @return an IMAP stream on success, FALSE otherwise (in this later case, $err_code
+ * gives the reason why it failed and $err_msg contains an error message).
+ */
+ function serviceMail($url,$service,$flags,&$err_code,&$err_msg,&$pt)
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after the programmer is sure the user has been authenticated (by calling '.__CLASS__.'::checkAuthentication() or '.__CLASS__.'::forceAuthentication()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+
+ if ( gettype($flags) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $flags (should be `integer\')');
+ }
+
+ $res = $PHPCAS_CLIENT->serviceMail($url,$service,$flags,$err_code,$err_msg,$pt);
+
+ phpCAS::traceEnd($res);
+ return $res;
+ }
+
+ /** @} */
+ // ########################################################################
+ // AUTHENTICATION
+ // ########################################################################
+ /**
+ * @addtogroup publicAuth
+ * @{
+ */
+
+ /**
+ * Set the times authentication will be cached before really accessing the CAS server in gateway mode:
+ * - -1: check only once, and then never again (until you pree login)
+ * - 0: always check
+ * - n: check every "n" time
+ *
+ * @param $n an integer.
+ */
+ function setCacheTimesForAuthRecheck($n)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($n) != 'integer' ) {
+ phpCAS::error('type mismatched for parameter $header (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCacheTimesForAuthRecheck($n);
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (use the gateway feature).
+ * @return TRUE when the user is authenticated; otherwise FALSE.
+ */
+ function checkAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->checkAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * This method is called to force authentication if the user was not already
+ * authenticated. If the user is not authenticated, halt by redirecting to
+ * the CAS server.
+ */
+ function forceAuthentication()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ $auth = $PHPCAS_CLIENT->forceAuthentication();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+
+ if ( !$auth ) {
+ phpCAS::trace('user is not authenticated, redirecting to the CAS server');
+ $PHPCAS_CLIENT->forceAuthentication();
+ } else {
+ phpCAS::trace('no need to authenticate (user `'.phpCAS::getUser().'\' is already authenticated)');
+ }
+
+ phpCAS::traceEnd();
+ return $auth;
+ }
+
+ /**
+ * This method is called to renew the authentication.
+ **/
+ function renewAuthentication() {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before'.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE, 'file' => $dbg[0]['file'], 'line' => $dbg[0]['line'], 'method' => __CLASS__.'::'.__FUNCTION__, 'result' => $auth );
+
+ $PHPCAS_CLIENT->renewAuthentication();
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method has been left from version 0.4.1 for compatibility reasons.
+ */
+ function authenticate()
+ {
+ phpCAS::error('this method is deprecated. You should use '.__CLASS__.'::forceAuthentication() instead');
+ }
+
+ /**
+ * This method is called to check if the user is authenticated (previously or by
+ * tickets given in the URL).
+ *
+ * @return TRUE when the user is authenticated.
+ */
+ function isAuthenticated()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+
+ // call the isAuthenticated method of the global $PHPCAS_CLIENT object
+ $auth = $PHPCAS_CLIENT->isAuthenticated();
+
+ // store where the authentication has been checked and the result
+ $dbg = phpCAS::backtrace();
+ $PHPCAS_AUTH_CHECK_CALL = array('done' => TRUE,
+ 'file' => $dbg[0]['file'],
+ 'line' => $dbg[0]['line'],
+ 'method' => __CLASS__.'::'.__FUNCTION__,
+ 'result' => $auth );
+ phpCAS::traceEnd($auth);
+ return $auth;
+ }
+
+ /**
+ * Checks whether authenticated based on $_SESSION. Useful to avoid
+ * server calls.
+ * @return true if authenticated, false otherwise.
+ * @since 0.4.22 by Brendan Arnold
+ */
+ function isSessionAuthenticated ()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->isSessionAuthenticated());
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should not be called only after phpCAS::forceAuthentication()
+ * or phpCAS::checkAuthentication().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getUser()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ return $PHPCAS_CLIENT->getUser();
+ }
+
+ /**
+ * This method returns the CAS user's login name.
+ * @warning should not be called only after phpCAS::forceAuthentication()
+ * or phpCAS::checkAuthentication().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getAttributes()
+ {
+ global $PHPCAS_CLIENT, $PHPCAS_AUTH_CHECK_CALL;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['done'] ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ if ( !$PHPCAS_AUTH_CHECK_CALL['result'] ) {
+ phpCAS::error('authentication was checked (by '.$PHPCAS_AUTH_CHECK_CALL['method'].'() at '.$PHPCAS_AUTH_CHECK_CALL['file'].':'.$PHPCAS_AUTH_CHECK_CALL['line'].') but the method returned FALSE');
+ }
+ return $PHPCAS_CLIENT->getAttributes();
+ }
+ /**
+ * Handle logout requests.
+ */
+ function handleLogoutRequests($check_client=true, $allowed_clients=false)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->handleLogoutRequests($check_client, $allowed_clients));
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLoginURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLoginURL();
+ }
+
+ /**
+ * Set the login URL of the CAS server.
+ * @param $url the login URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLoginURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLoginURL($url);
+ phpCAS::traceEnd();
+ }
+
+
+ /**
+ * Set the serviceValidate URL of the CAS server.
+ * @param $url the serviceValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerServiceValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerServiceValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+
+ /**
+ * Set the proxyValidate URL of the CAS server.
+ * @param $url the proxyValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerProxyValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerProxyValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the samlValidate URL of the CAS server.
+ * @param $url the samlValidate URL
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerSamlValidateURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerSamlValidateURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method returns the URL to be used to login.
+ * or phpCAS::isAuthenticated().
+ *
+ * @return the login name of the authenticated user
+ */
+ function getServerLogoutURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should not be called before '.__CLASS__.'::client() or '.__CLASS__.'::proxy()');
+ }
+ return $PHPCAS_CLIENT->getServerLogoutURL();
+ }
+
+ /**
+ * Set the logout URL of the CAS server.
+ * @param $url the logout URL
+ * @since 0.4.21 by Wyman Chan
+ */
+ function setServerLogoutURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after
+ '.__CLASS__.'::client()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be
+ `string\')');
+ }
+ $PHPCAS_CLIENT->setServerLogoutURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS.
+ * @params $params an array that contains the optional url and service parameters that will be passed to the CAS server
+ * @public
+ */
+ function logout($params = "") {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if (!is_object($PHPCAS_CLIENT)) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $parsedParams = array();
+ if ($params != "") {
+ if (is_string($params)) {
+ phpCAS::error('method `phpCAS::logout($url)\' is now deprecated, use `phpCAS::logoutWithUrl($url)\' instead');
+ }
+ if (!is_array($params)) {
+ phpCAS::error('type mismatched for parameter $params (should be `array\')');
+ }
+ foreach ($params as $key => $value) {
+ if ($key != "service" && $key != "url") {
+ phpCAS::error('only `url\' and `service\' parameters are allowed for method `phpCAS::logout($params)\'');
+ }
+ $parsedParams[$key] = $value;
+ }
+ }
+ $PHPCAS_CLIENT->logout($parsedParams);
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectService($service) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithUrl($url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method is used to logout from CAS. Halts by redirecting to the CAS server.
+ * @param $service a URL that will be transmitted to the CAS server
+ * @param $url a URL that will be transmitted to the CAS server
+ */
+ function logoutWithRedirectServiceAndUrl($service, $url) {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if (!is_string($service)) {
+ phpCAS::error('type mismatched for parameter $service (should be `string\')');
+ }
+ if (!is_string($url)) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->logout(array("service" => $service, "url" => $url));
+ // never reached
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be used by the CAS server to transmit the PGT.
+ * When this method is not called, a phpCAS script uses its own URL for the callback.
+ *
+ * @param $url the URL
+ */
+ function setFixedCallbackURL($url='')
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( !$PHPCAS_CLIENT->isProxy() ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCallbackURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the fixed URL that will be set as the CAS service parameter. When this
+ * method is not called, a phpCAS script uses its own URL.
+ *
+ * @param $url the URL
+ */
+ function setFixedServiceURL($url)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($url) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $url (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setURL($url);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Get the URL that is set as the CAS service parameter.
+ */
+ function getServiceURL()
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ return($PHPCAS_CLIENT->getURL());
+ }
+
+ /**
+ * Retrieve a Proxy Ticket from the CAS server.
+ */
+ function retrievePT($target_service,&$err_code,&$err_msg)
+ {
+ global $PHPCAS_CLIENT;
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::proxy()');
+ }
+ if ( gettype($target_service) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $target_service(should be `string\')');
+ }
+ return($PHPCAS_CLIENT->retrievePT($target_service,$err_code,$err_msg));
+ }
+
+ /**
+ * Set the certificate of the CAS server.
+ *
+ * @param $cert the PEM certificate
+ */
+ function setCasServerCert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set the certificate of the CAS server CA.
+ *
+ * @param $cert the CA certificate
+ */
+ function setCasServerCACert($cert)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ if ( gettype($cert) != 'string' ) {
+ phpCAS::error('type mismatched for parameter $cert (should be `string\')');
+ }
+ $PHPCAS_CLIENT->setCasServerCACert($cert);
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * Set no SSL validation for the CAS server.
+ */
+ function setNoCasServerValidation()
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setNoCasServerValidation();
+ phpCAS::traceEnd();
+ }
+
+ /** @} */
+
+ /**
+ * Change CURL options.
+ * CURL is used to connect through HTTPS to CAS server
+ * @param $key the option key
+ * @param $value the value to set
+ */
+ function setExtraCurlOption($key, $value)
+ {
+ global $PHPCAS_CLIENT;
+ phpCAS::traceBegin();
+ if ( !is_object($PHPCAS_CLIENT) ) {
+ phpCAS::error('this method should only be called after '.__CLASS__.'::client() or'.__CLASS__.'::proxy()');
+ }
+ $PHPCAS_CLIENT->setExtraCurlOption($key, $value);
+ phpCAS::traceEnd();
+ }
+
+}
+
+// ########################################################################
+// DOCUMENTATION
+// ########################################################################
+
+// ########################################################################
+// MAIN PAGE
+
+/**
+ * @mainpage
+ *
+ * The following pages only show the source documentation.
+ *
+ */
+
+// ########################################################################
+// MODULES DEFINITION
+
+/** @defgroup public User interface */
+
+/** @defgroup publicInit Initialization
+ * @ingroup public */
+
+/** @defgroup publicAuth Authentication
+ * @ingroup public */
+
+/** @defgroup publicServices Access to external services
+ * @ingroup public */
+
+/** @defgroup publicConfig Configuration
+ * @ingroup public */
+
+/** @defgroup publicLang Internationalization
+ * @ingroup publicConfig */
+
+/** @defgroup publicOutput HTML output
+ * @ingroup publicConfig */
+
+/** @defgroup publicPGTStorage PGT storage
+ * @ingroup publicConfig */
+
+/** @defgroup publicDebug Debugging
+ * @ingroup public */
+
+
+/** @defgroup internal Implementation */
+
+/** @defgroup internalAuthentication Authentication
+ * @ingroup internal */
+
+/** @defgroup internalBasic CAS Basic client features (CAS 1.0, Service Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalProxy CAS Proxy features (CAS 2.0, Proxy Granting Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalPGTStorage PGT storage
+ * @ingroup internalProxy */
+
+/** @defgroup internalPGTStorageDB PGT storage in a database
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalPGTStorageFile PGT storage on the filesystem
+ * @ingroup internalPGTStorage */
+
+/** @defgroup internalCallback Callback from the CAS server
+ * @ingroup internalProxy */
+
+/** @defgroup internalProxied CAS proxied client features (CAS 2.0, Proxy Tickets)
+ * @ingroup internal */
+
+/** @defgroup internalConfig Configuration
+ * @ingroup internal */
+
+/** @defgroup internalOutput HTML output
+ * @ingroup internalConfig */
+
+/** @defgroup internalLang Internationalization
+ * @ingroup internalConfig
+ *
+ * To add a new language:
+ * - 1. define a new constant PHPCAS_LANG_XXXXXX in CAS/CAS.php
+ * - 2. copy any file from CAS/languages to CAS/languages/XXXXXX.php
+ * - 3. Make the translations
+ */
+
+/** @defgroup internalDebug Debugging
+ * @ingroup internal */
+
+/** @defgroup internalMisc Miscellaneous
+ * @ingroup internal */
+
+// ########################################################################
+// EXAMPLES
+
+/**
+ * @example example_simple.php
+ */
+ /**
+ * @example example_proxy.php
+ */
+ /**
+ * @example example_proxy2.php
+ */
+ /**
+ * @example example_lang.php
+ */
+ /**
+ * @example example_html.php
+ */
+ /**
+ * @example example_file.php
+ */
+ /**
+ * @example example_db.php
+ */
+ /**
+ * @example example_service.php
+ */
+ /**
+ * @example example_session_proxy.php
+ */
+ /**
+ * @example example_session_service.php
+ */
+ /**
+ * @example example_gateway.php
+ */
+
+
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
index 00797b9c5..5a589e4b2 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-db.php
@@ -1,190 +1,190 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-db.php
- * Basic class for PGT database storage
- */
-
-/**
- * @class PGTStorageDB
- * The PGTStorageDB class is a class for PGT database storage. An instance of
- * this class is returned by CASClient::SetPGTStorageDB().
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorageDB
- */
-
-class PGTStorageDB extends PGTStorage
-{
- /**
- * @addtogroup internalPGTStorageDB
- * @{
- */
-
- /**
- * a string representing a PEAR DB URL to connect to the database. Written by
- * PGTStorageDB::PGTStorageDB(), read by getURL().
- *
- * @hideinitializer
- * @private
- */
- var $_url='';
-
- /**
- * This method returns the PEAR DB URL to use to connect to the database.
- *
- * @return a PEAR DB URL
- *
- * @private
- */
- function getURL()
- {
- return $this->_url;
- }
-
- /**
- * The handle of the connection to the database where PGT's are stored. Written by
- * PGTStorageDB::init(), read by getLink().
- *
- * @hideinitializer
- * @private
- */
- var $_link = null;
-
- /**
- * This method returns the handle of the connection to the database where PGT's are
- * stored.
- *
- * @return a handle of connection.
- *
- * @private
- */
- function getLink()
- {
- return $this->_link;
- }
-
- /**
- * The name of the table where PGT's are stored. Written by
- * PGTStorageDB::PGTStorageDB(), read by getTable().
- *
- * @hideinitializer
- * @private
- */
- var $_table = '';
-
- /**
- * This method returns the name of the table where PGT's are stored.
- *
- * @return the name of a table.
- *
- * @private
- */
- function getTable()
- {
- return $this->_table;
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageType()
- {
- return "database";
- }
-
- /**
- * This method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @public
- */
- function getStorageInfo()
- {
- return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
- }
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The class constructor, called by CASClient::SetPGTStorageDB().
- *
- * @param $cas_parent the CASClient instance that creates the object.
- * @param $user the user to access the data with
- * @param $password the user's password
- * @param $database_type the type of the database hosting the data
- * @param $hostname the server hosting the database
- * @param $port the port the server is listening on
- * @param $database the name of the database
- * @param $table the name of the table storing the data
- *
- * @public
- */
- function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
- {
- phpCAS::traceBegin();
-
- // call the ancestor's constructor
- $this->PGTStorage($cas_parent);
-
- if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
- if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
- if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
- if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
- if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
-
- // build and store the PEAR DB URL
- $this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
-
- // XXX should use setURL and setTable
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * This method is used to initialize the storage. Halts on error.
- *
- * @public
- */
- function init()
- {
- phpCAS::traceBegin();
- // if the storage has already been initialized, return immediatly
- if ( $this->isInitialized() )
- return;
- // call the ancestor's method (mark as initialized)
- parent::init();
-
- //include phpDB library (the test was introduced in release 0.4.8 for
- //the integration into Tikiwiki).
- if (!class_exists('DB')) {
- include_once('DB.php');
- }
-
- // try to connect to the database
- $this->_link = DB::connect($this->getURL());
- if ( DB::isError($this->_link) ) {
- phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
- }
- var_dump($this->_link);
- phpCAS::traceBEnd();
- }
-
- /** @} */
-}
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-db.php
+ * Basic class for PGT database storage
+ */
+
+/**
+ * @class PGTStorageDB
+ * The PGTStorageDB class is a class for PGT database storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageDB().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageDB
+ */
+
+class PGTStorageDB extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageDB
+ * @{
+ */
+
+ /**
+ * a string representing a PEAR DB URL to connect to the database. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getURL().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_url='';
+
+ /**
+ * This method returns the PEAR DB URL to use to connect to the database.
+ *
+ * @return a PEAR DB URL
+ *
+ * @private
+ */
+ function getURL()
+ {
+ return $this->_url;
+ }
+
+ /**
+ * The handle of the connection to the database where PGT's are stored. Written by
+ * PGTStorageDB::init(), read by getLink().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_link = null;
+
+ /**
+ * This method returns the handle of the connection to the database where PGT's are
+ * stored.
+ *
+ * @return a handle of connection.
+ *
+ * @private
+ */
+ function getLink()
+ {
+ return $this->_link;
+ }
+
+ /**
+ * The name of the table where PGT's are stored. Written by
+ * PGTStorageDB::PGTStorageDB(), read by getTable().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_table = '';
+
+ /**
+ * This method returns the name of the table where PGT's are stored.
+ *
+ * @return the name of a table.
+ *
+ * @private
+ */
+ function getTable()
+ {
+ return $this->_table;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "database";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'url=`'.$this->getURL().'\', table=`'.$this->getTable().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageDB().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $user the user to access the data with
+ * @param $password the user's password
+ * @param $database_type the type of the database hosting the data
+ * @param $hostname the server hosting the database
+ * @param $port the port the server is listening on
+ * @param $database the name of the database
+ * @param $table the name of the table storing the data
+ *
+ * @public
+ */
+ function PGTStorageDB($cas_parent,$user,$password,$database_type,$hostname,$port,$database,$table)
+ {
+ phpCAS::traceBegin();
+
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if ( empty($database_type) ) $database_type = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE_TYPE;
+ if ( empty($hostname) ) $hostname = CAS_PGT_STORAGE_DB_DEFAULT_HOSTNAME;
+ if ( $port==0 ) $port = CAS_PGT_STORAGE_DB_DEFAULT_PORT;
+ if ( empty($database) ) $database = CAS_PGT_STORAGE_DB_DEFAULT_DATABASE;
+ if ( empty($table) ) $table = CAS_PGT_STORAGE_DB_DEFAULT_TABLE;
+
+ // build and store the PEAR DB URL
+ $this->_url = $database_type.':'.'//'.$user.':'.$password.'@'.$hostname.':'.$port.'/'.$database;
+
+ // XXX should use setURL and setTable
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+
+ //include phpDB library (the test was introduced in release 0.4.8 for
+ //the integration into Tikiwiki).
+ if (!class_exists('DB')) {
+ include_once('DB.php');
+ }
+
+ // try to connect to the database
+ $this->_link = DB::connect($this->getURL());
+ if ( DB::isError($this->_link) ) {
+ phpCAS::error('could not connect to database ('.DB::errorMessage($this->_link).')');
+ }
+ var_dump($this->_link);
+ phpCAS::traceBEnd();
+ }
+
+ /** @} */
+}
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
index d48a60d67..bc07485b8 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-file.php
@@ -1,249 +1,249 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-file.php
- * Basic class for PGT file storage
- */
-
-/**
- * @class PGTStorageFile
- * The PGTStorageFile class is a class for PGT file storage. An instance of
- * this class is returned by CASClient::SetPGTStorageFile().
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorageFile
- */
-
-class PGTStorageFile extends PGTStorage
-{
- /**
- * @addtogroup internalPGTStorageFile
- * @{
- */
-
- /**
- * a string telling where PGT's should be stored on the filesystem. Written by
- * PGTStorageFile::PGTStorageFile(), read by getPath().
- *
- * @private
- */
- var $_path;
-
- /**
- * This method returns the name of the directory where PGT's should be stored
- * on the filesystem.
- *
- * @return the name of a directory (with leading and trailing '/')
- *
- * @private
- */
- function getPath()
- {
- return $this->_path;
- }
-
- /**
- * a string telling the format to use to store PGT's (plain or xml). Written by
- * PGTStorageFile::PGTStorageFile(), read by getFormat().
- *
- * @private
- */
- var $_format;
-
- /**
- * This method returns the format to use when storing PGT's on the filesystem.
- *
- * @return a string corresponding to the format used (plain or xml).
- *
- * @private
- */
- function getFormat()
- {
- return $this->_format;
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageType()
- {
- return "file";
- }
-
- /**
- * This method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @return an informational string.
- * @public
- */
- function getStorageInfo()
- {
- return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
- }
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The class constructor, called by CASClient::SetPGTStorageFile().
- *
- * @param $cas_parent the CASClient instance that creates the object.
- * @param $format the format used to store the PGT's (`plain' and `xml' allowed).
- * @param $path the path where the PGT's should be stored
- *
- * @public
- */
- function PGTStorageFile($cas_parent,$format,$path)
- {
- phpCAS::traceBegin();
- // call the ancestor's constructor
- $this->PGTStorage($cas_parent);
-
- if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
- if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
-
- // check that the path is an absolute path
- if (getenv("OS")=="Windows_NT"){
-
- if (!preg_match('`^[a-zA-Z]:`', $path)) {
- phpCAS::error('an absolute path is needed for PGT storage to file');
- }
-
- }
- else
- {
-
- if ( $path[0] != '/' ) {
- phpCAS::error('an absolute path is needed for PGT storage to file');
- }
-
- // store the path (with a leading and trailing '/')
- $path = preg_replace('|[/]*$|','/',$path);
- $path = preg_replace('|^[/]*|','/',$path);
- }
-
- $this->_path = $path;
- // check the format and store it
- switch ($format) {
- case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
- case CAS_PGT_STORAGE_FILE_FORMAT_XML:
- $this->_format = $format;
- break;
- default:
- phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
- }
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * This method is used to initialize the storage. Halts on error.
- *
- * @public
- */
- function init()
- {
- phpCAS::traceBegin();
- // if the storage has already been initialized, return immediatly
- if ( $this->isInitialized() )
- return;
- // call the ancestor's method (mark as initialized)
- parent::init();
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // PGT I/O
- // ########################################################################
-
- /**
- * This method returns the filename corresponding to a PGT Iou.
- *
- * @param $pgt_iou the PGT iou.
- *
- * @return a filename
- * @private
- */
- function getPGTIouFilename($pgt_iou)
- {
- phpCAS::traceBegin();
- $filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
- phpCAS::traceEnd($filename);
- return $filename;
- }
-
- /**
- * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
- * warning on error.
- *
- * @param $pgt the PGT
- * @param $pgt_iou the PGT iou
- *
- * @public
- */
- function write($pgt,$pgt_iou)
- {
- phpCAS::traceBegin();
- $fname = $this->getPGTIouFilename($pgt_iou);
- if ( $f=fopen($fname,"w") ) {
- if ( fputs($f,$pgt) === FALSE ) {
- phpCAS::error('could not write PGT to `'.$fname.'\'');
- }
- fclose($f);
- } else {
- phpCAS::error('could not open `'.$fname.'\'');
- }
- phpCAS::traceEnd();
- }
-
- /**
- * This method reads a PGT corresponding to a PGT Iou and deletes the
- * corresponding file.
- *
- * @param $pgt_iou the PGT iou
- *
- * @return the corresponding PGT, or FALSE on error
- *
- * @public
- */
- function read($pgt_iou)
- {
- phpCAS::traceBegin();
- $pgt = FALSE;
- $fname = $this->getPGTIouFilename($pgt_iou);
- if ( !($f=fopen($fname,"r")) ) {
- phpCAS::trace('could not open `'.$fname.'\'');
- } else {
- if ( ($pgt=fgets($f)) === FALSE ) {
- phpCAS::trace('could not read PGT from `'.$fname.'\'');
- }
- fclose($f);
- }
-
- // delete the PGT file
- @unlink($fname);
-
- phpCAS::traceEnd($pgt);
- return $pgt;
- }
-
- /** @} */
-
-}
-
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-file.php
+ * Basic class for PGT file storage
+ */
+
+/**
+ * @class PGTStorageFile
+ * The PGTStorageFile class is a class for PGT file storage. An instance of
+ * this class is returned by CASClient::SetPGTStorageFile().
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorageFile
+ */
+
+class PGTStorageFile extends PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorageFile
+ * @{
+ */
+
+ /**
+ * a string telling where PGT's should be stored on the filesystem. Written by
+ * PGTStorageFile::PGTStorageFile(), read by getPath().
+ *
+ * @private
+ */
+ var $_path;
+
+ /**
+ * This method returns the name of the directory where PGT's should be stored
+ * on the filesystem.
+ *
+ * @return the name of a directory (with leading and trailing '/')
+ *
+ * @private
+ */
+ function getPath()
+ {
+ return $this->_path;
+ }
+
+ /**
+ * a string telling the format to use to store PGT's (plain or xml). Written by
+ * PGTStorageFile::PGTStorageFile(), read by getFormat().
+ *
+ * @private
+ */
+ var $_format;
+
+ /**
+ * This method returns the format to use when storing PGT's on the filesystem.
+ *
+ * @return a string corresponding to the format used (plain or xml).
+ *
+ * @private
+ */
+ function getFormat()
+ {
+ return $this->_format;
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageType()
+ {
+ return "file";
+ }
+
+ /**
+ * This method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @return an informational string.
+ * @public
+ */
+ function getStorageInfo()
+ {
+ return 'path=`'.$this->getPath().'\', format=`'.$this->getFormat().'\'';
+ }
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The class constructor, called by CASClient::SetPGTStorageFile().
+ *
+ * @param $cas_parent the CASClient instance that creates the object.
+ * @param $format the format used to store the PGT's (`plain' and `xml' allowed).
+ * @param $path the path where the PGT's should be stored
+ *
+ * @public
+ */
+ function PGTStorageFile($cas_parent,$format,$path)
+ {
+ phpCAS::traceBegin();
+ // call the ancestor's constructor
+ $this->PGTStorage($cas_parent);
+
+ if (empty($format) ) $format = CAS_PGT_STORAGE_FILE_DEFAULT_FORMAT;
+ if (empty($path) ) $path = CAS_PGT_STORAGE_FILE_DEFAULT_PATH;
+
+ // check that the path is an absolute path
+ if (getenv("OS")=="Windows_NT"){
+
+ if (!preg_match('`^[a-zA-Z]:`', $path)) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ }
+ else
+ {
+
+ if ( $path[0] != '/' ) {
+ phpCAS::error('an absolute path is needed for PGT storage to file');
+ }
+
+ // store the path (with a leading and trailing '/')
+ $path = preg_replace('|[/]*$|','/',$path);
+ $path = preg_replace('|^[/]*|','/',$path);
+ }
+
+ $this->_path = $path;
+ // check the format and store it
+ switch ($format) {
+ case CAS_PGT_STORAGE_FILE_FORMAT_PLAIN:
+ case CAS_PGT_STORAGE_FILE_FORMAT_XML:
+ $this->_format = $format;
+ break;
+ default:
+ phpCAS::error('unknown PGT file storage format (`'.CAS_PGT_STORAGE_FILE_FORMAT_PLAIN.'\' and `'.CAS_PGT_STORAGE_FILE_FORMAT_XML.'\' allowed)');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * This method is used to initialize the storage. Halts on error.
+ *
+ * @public
+ */
+ function init()
+ {
+ phpCAS::traceBegin();
+ // if the storage has already been initialized, return immediatly
+ if ( $this->isInitialized() )
+ return;
+ // call the ancestor's method (mark as initialized)
+ parent::init();
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This method returns the filename corresponding to a PGT Iou.
+ *
+ * @param $pgt_iou the PGT iou.
+ *
+ * @return a filename
+ * @private
+ */
+ function getPGTIouFilename($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $filename = $this->getPath().$pgt_iou.'.'.$this->getFormat();
+ phpCAS::traceEnd($filename);
+ return $filename;
+ }
+
+ /**
+ * This method stores a PGT and its corresponding PGT Iou into a file. Echoes a
+ * warning on error.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @public
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( $f=fopen($fname,"w") ) {
+ if ( fputs($f,$pgt) === FALSE ) {
+ phpCAS::error('could not write PGT to `'.$fname.'\'');
+ }
+ fclose($f);
+ } else {
+ phpCAS::error('could not open `'.$fname.'\'');
+ }
+ phpCAS::traceEnd();
+ }
+
+ /**
+ * This method reads a PGT corresponding to a PGT Iou and deletes the
+ * corresponding file.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @return the corresponding PGT, or FALSE on error
+ *
+ * @public
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::traceBegin();
+ $pgt = FALSE;
+ $fname = $this->getPGTIouFilename($pgt_iou);
+ if ( !($f=fopen($fname,"r")) ) {
+ phpCAS::trace('could not open `'.$fname.'\'');
+ } else {
+ if ( ($pgt=fgets($f)) === FALSE ) {
+ phpCAS::trace('could not read PGT from `'.$fname.'\'');
+ }
+ fclose($f);
+ }
+
+ // delete the PGT file
+ @unlink($fname);
+
+ phpCAS::traceEnd($pgt);
+ return $pgt;
+ }
+
+ /** @} */
+
+}
+
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
index 8fd3c9e12..cd9b49967 100644
--- a/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
+++ b/plugins/CasAuthentication/extlib/CAS/PGTStorage/pgt-main.php
@@ -1,188 +1,188 @@
-<?php
-
-/**
- * @file CAS/PGTStorage/pgt-main.php
- * Basic class for PGT storage
- */
-
-/**
- * @class PGTStorage
- * The PGTStorage class is a generic class for PGT storage. This class should
- * not be instanciated itself but inherited by specific PGT storage classes.
- *
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- *
- * @ingroup internalPGTStorage
- */
-
-class PGTStorage
-{
- /**
- * @addtogroup internalPGTStorage
- * @{
- */
-
- // ########################################################################
- // CONSTRUCTOR
- // ########################################################################
-
- /**
- * The constructor of the class, should be called only by inherited classes.
- *
- * @param $cas_parent the CASclient instance that creates the current object.
- *
- * @protected
- */
- function PGTStorage($cas_parent)
- {
- phpCAS::traceBegin();
- if ( !$cas_parent->isProxy() ) {
- phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
- }
- phpCAS::traceEnd();
- }
-
- // ########################################################################
- // DEBUGGING
- // ########################################################################
-
- /**
- * This virtual method returns an informational string giving the type of storage
- * used by the object (used for debugging purposes).
- *
- * @public
- */
- function getStorageType()
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /**
- * This virtual method returns an informational string giving informations on the
- * parameters of the storage.(used for debugging purposes).
- *
- * @public
- */
- function getStorageInfo()
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- // ########################################################################
- // ERROR HANDLING
- // ########################################################################
-
- /**
- * string used to store an error message. Written by PGTStorage::setErrorMessage(),
- * read by PGTStorage::getErrorMessage().
- *
- * @hideinitializer
- * @private
- * @deprecated not used.
- */
- var $_error_message=FALSE;
-
- /**
- * This method sets en error message, which can be read later by
- * PGTStorage::getErrorMessage().
- *
- * @param $error_message an error message
- *
- * @protected
- * @deprecated not used.
- */
- function setErrorMessage($error_message)
- {
- $this->_error_message = $error_message;
- }
-
- /**
- * This method returns an error message set by PGTStorage::setErrorMessage().
- *
- * @return an error message when set by PGTStorage::setErrorMessage(), FALSE
- * otherwise.
- *
- * @public
- * @deprecated not used.
- */
- function getErrorMessage()
- {
- return $this->_error_message;
- }
-
- // ########################################################################
- // INITIALIZATION
- // ########################################################################
-
- /**
- * a boolean telling if the storage has already been initialized. Written by
- * PGTStorage::init(), read by PGTStorage::isInitialized().
- *
- * @hideinitializer
- * @private
- */
- var $_initialized = FALSE;
-
- /**
- * This method tells if the storage has already been intialized.
- *
- * @return a boolean
- *
- * @protected
- */
- function isInitialized()
- {
- return $this->_initialized;
- }
-
- /**
- * This virtual method initializes the object.
- *
- * @protected
- */
- function init()
- {
- $this->_initialized = TRUE;
- }
-
- // ########################################################################
- // PGT I/O
- // ########################################################################
-
- /**
- * This virtual method stores a PGT and its corresponding PGT Iuo.
- * @note Should never be called.
- *
- * @param $pgt the PGT
- * @param $pgt_iou the PGT iou
- *
- * @protected
- */
- function write($pgt,$pgt_iou)
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /**
- * This virtual method reads a PGT corresponding to a PGT Iou and deletes
- * the corresponding storage entry.
- * @note Should never be called.
- *
- * @param $pgt_iou the PGT iou
- *
- * @protected
- */
- function read($pgt_iou)
- {
- phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
- }
-
- /** @} */
-
-}
-
-// include specific PGT storage classes
-include_once(dirname(__FILE__).'/pgt-file.php');
-include_once(dirname(__FILE__).'/pgt-db.php');
-
+<?php
+
+/**
+ * @file CAS/PGTStorage/pgt-main.php
+ * Basic class for PGT storage
+ */
+
+/**
+ * @class PGTStorage
+ * The PGTStorage class is a generic class for PGT storage. This class should
+ * not be instanciated itself but inherited by specific PGT storage classes.
+ *
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ *
+ * @ingroup internalPGTStorage
+ */
+
+class PGTStorage
+{
+ /**
+ * @addtogroup internalPGTStorage
+ * @{
+ */
+
+ // ########################################################################
+ // CONSTRUCTOR
+ // ########################################################################
+
+ /**
+ * The constructor of the class, should be called only by inherited classes.
+ *
+ * @param $cas_parent the CASclient instance that creates the current object.
+ *
+ * @protected
+ */
+ function PGTStorage($cas_parent)
+ {
+ phpCAS::traceBegin();
+ if ( !$cas_parent->isProxy() ) {
+ phpCAS::error('defining PGT storage makes no sense when not using a CAS proxy');
+ }
+ phpCAS::traceEnd();
+ }
+
+ // ########################################################################
+ // DEBUGGING
+ // ########################################################################
+
+ /**
+ * This virtual method returns an informational string giving the type of storage
+ * used by the object (used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageType()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method returns an informational string giving informations on the
+ * parameters of the storage.(used for debugging purposes).
+ *
+ * @public
+ */
+ function getStorageInfo()
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ // ########################################################################
+ // ERROR HANDLING
+ // ########################################################################
+
+ /**
+ * string used to store an error message. Written by PGTStorage::setErrorMessage(),
+ * read by PGTStorage::getErrorMessage().
+ *
+ * @hideinitializer
+ * @private
+ * @deprecated not used.
+ */
+ var $_error_message=FALSE;
+
+ /**
+ * This method sets en error message, which can be read later by
+ * PGTStorage::getErrorMessage().
+ *
+ * @param $error_message an error message
+ *
+ * @protected
+ * @deprecated not used.
+ */
+ function setErrorMessage($error_message)
+ {
+ $this->_error_message = $error_message;
+ }
+
+ /**
+ * This method returns an error message set by PGTStorage::setErrorMessage().
+ *
+ * @return an error message when set by PGTStorage::setErrorMessage(), FALSE
+ * otherwise.
+ *
+ * @public
+ * @deprecated not used.
+ */
+ function getErrorMessage()
+ {
+ return $this->_error_message;
+ }
+
+ // ########################################################################
+ // INITIALIZATION
+ // ########################################################################
+
+ /**
+ * a boolean telling if the storage has already been initialized. Written by
+ * PGTStorage::init(), read by PGTStorage::isInitialized().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_initialized = FALSE;
+
+ /**
+ * This method tells if the storage has already been intialized.
+ *
+ * @return a boolean
+ *
+ * @protected
+ */
+ function isInitialized()
+ {
+ return $this->_initialized;
+ }
+
+ /**
+ * This virtual method initializes the object.
+ *
+ * @protected
+ */
+ function init()
+ {
+ $this->_initialized = TRUE;
+ }
+
+ // ########################################################################
+ // PGT I/O
+ // ########################################################################
+
+ /**
+ * This virtual method stores a PGT and its corresponding PGT Iuo.
+ * @note Should never be called.
+ *
+ * @param $pgt the PGT
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function write($pgt,$pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /**
+ * This virtual method reads a PGT corresponding to a PGT Iou and deletes
+ * the corresponding storage entry.
+ * @note Should never be called.
+ *
+ * @param $pgt_iou the PGT iou
+ *
+ * @protected
+ */
+ function read($pgt_iou)
+ {
+ phpCAS::error(__CLASS__.'::'.__FUNCTION__.'() should never be called');
+ }
+
+ /** @} */
+
+}
+
+// include specific PGT storage classes
+include_once(dirname(__FILE__).'/pgt-file.php');
+include_once(dirname(__FILE__).'/pgt-db.php');
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/client.php b/plugins/CasAuthentication/extlib/CAS/client.php
index bbde55a28..ad5a23f83 100644
--- a/plugins/CasAuthentication/extlib/CAS/client.php
+++ b/plugins/CasAuthentication/extlib/CAS/client.php
@@ -351,6 +351,43 @@ class CASClient
{
return $this->_server['login_url'] = $url;
}
+
+
+ /**
+ * This method sets the serviceValidate URL of the CAS server.
+ * @param $url the serviceValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerServiceValidateURL($url)
+ {
+ return $this->_server['service_validate_url'] = $url;
+ }
+
+
+ /**
+ * This method sets the proxyValidate URL of the CAS server.
+ * @param $url the proxyValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerProxyValidateURL($url)
+ {
+ return $this->_server['proxy_validate_url'] = $url;
+ }
+
+
+ /**
+ * This method sets the samlValidate URL of the CAS server.
+ * @param $url the samlValidate URL
+ * @private
+ * @since 1.1.0 by Joachim Fritschi
+ */
+ function setServerSamlValidateURL($url)
+ {
+ return $this->_server['saml_validate_url'] = $url;
+ }
+
/**
* This method is used to retrieve the service validating URL of the CAS server.
@@ -373,7 +410,25 @@ class CASClient
// return $this->_server['service_validate_url'].'?service='.preg_replace('/&/','%26',$this->getURL());
return $this->_server['service_validate_url'].'?service='.urlencode($this->getURL());
}
-
+ /**
+ * This method is used to retrieve the SAML validating URL of the CAS server.
+ * @return a URL.
+ * @private
+ */
+ function getServerSamlValidateURL()
+ {
+ phpCAS::traceBegin();
+ // the URL is build only when needed
+ if ( empty($this->_server['saml_validate_url']) ) {
+ switch ($this->getServerVersion()) {
+ case SAML_VERSION_1_1:
+ $this->_server['saml_validate_url'] = $this->getServerBaseURL().'samlValidate';
+ break;
+ }
+ }
+ phpCAS::traceEnd($this->_server['saml_validate_url'].'?TARGET='.urlencode($this->getURL()));
+ return $this->_server['saml_validate_url'].'?TARGET='.urlencode($this->getURL());
+ }
/**
* This method is used to retrieve the proxy validating URL of the CAS server.
* @return a URL.
@@ -497,31 +552,51 @@ class CASClient
phpCAS::traceBegin();
- if (!$this->isLogoutRequest() && !empty($_GET['ticket']) && $start_session) {
- // copy old session vars and destroy the current session
- if (!isset($_SESSION)) {
- session_start();
- }
- $old_session = $_SESSION;
- session_destroy();
- // set up a new session, of name based on the ticket
- $session_id = preg_replace('/[^\w]/','',$_GET['ticket']);
- phpCAS::LOG("Session ID: " . $session_id);
- session_id($session_id);
- if (!isset($_SESSION)) {
- session_start();
- }
- // restore old session vars
- $_SESSION = $old_session;
- // Redirect to location without ticket.
- header('Location: '.$this->getURL());
- }
-
- //activate session mechanism if desired
- if (!$this->isLogoutRequest() && $start_session) {
- session_start();
+ // the redirect header() call and DOM parsing code from domxml-php4-php5.php won't work in PHP4 compatibility mode
+ if (version_compare(PHP_VERSION,'5','>=') && ini_get('zend.ze1_compatibility_mode')) {
+ phpCAS::error('phpCAS cannot support zend.ze1_compatibility_mode. Sorry.');
+ }
+ // skip Session Handling for logout requests and if don't want it'
+ if ($start_session && !$this->isLogoutRequest()) {
+ phpCAS::trace("Starting session handling");
+ // Check for Tickets from the CAS server
+ if (empty($_GET['ticket'])){
+ phpCAS::trace("No ticket found");
+ // only create a session if necessary
+ if (!isset($_SESSION)) {
+ phpCAS::trace("No session found, creating new session");
+ session_start();
+ }
+ }else{
+ phpCAS::trace("Ticket found");
+ // We have to copy any old data before renaming the session
+ if (isset($_SESSION)) {
+ phpCAS::trace("Old active session found, saving old data and destroying session");
+ $old_session = $_SESSION;
+ session_destroy();
+ }else{
+ session_start();
+ phpCAS::trace("Starting possible old session to copy variables");
+ $old_session = $_SESSION;
+ session_destroy();
+ }
+ // set up a new session, of name based on the ticket
+ $session_id = preg_replace('/[^\w]/','',$_GET['ticket']);
+ phpCAS::LOG("Session ID: " . $session_id);
+ session_id($session_id);
+ session_start();
+ // restore old session vars
+ if(isset($old_session)){
+ phpCAS::trace("Restoring old session vars");
+ $_SESSION = $old_session;
+ }
+ }
+ }else{
+ phpCAS::trace("Skipping session creation");
}
+
+ // are we in proxy mode ?
$this->_proxy = $proxy;
//check version
@@ -533,6 +608,8 @@ class CASClient
break;
case CAS_VERSION_2_0:
break;
+ case SAML_VERSION_1_1:
+ break;
default:
phpCAS::error('this version of CAS (`'
.$server_version
@@ -541,29 +618,29 @@ class CASClient
}
$this->_server['version'] = $server_version;
- //check hostname
+ // check hostname
if ( empty($server_hostname)
|| !preg_match('/[\.\d\-abcdefghijklmnopqrstuvwxyz]*/',$server_hostname) ) {
phpCAS::error('bad CAS server hostname (`'.$server_hostname.'\')');
}
$this->_server['hostname'] = $server_hostname;
- //check port
+ // check port
if ( $server_port == 0
|| !is_int($server_port) ) {
phpCAS::error('bad CAS server port (`'.$server_hostname.'\')');
}
$this->_server['port'] = $server_port;
- //check URI
+ // check URI
if ( !preg_match('/[\.\d\-_abcdefghijklmnopqrstuvwxyz\/]*/',$server_uri) ) {
phpCAS::error('bad CAS server URI (`'.$server_uri.'\')');
}
- //add leading and trailing `/' and remove doubles
+ // add leading and trailing `/' and remove doubles
$server_uri = preg_replace('/\/\//','/','/'.$server_uri.'/');
$this->_server['uri'] = $server_uri;
- //set to callback mode if PgtIou and PgtId CGI GET parameters are provided
+ // set to callback mode if PgtIou and PgtId CGI GET parameters are provided
if ( $this->isProxy() ) {
$this->setCallbackMode(!empty($_GET['pgtIou'])&&!empty($_GET['pgtId']));
}
@@ -590,8 +667,12 @@ class CASClient
}
break;
case CAS_VERSION_2_0: // check for a Service or Proxy Ticket
- if( preg_match('/^[SP]T-/',$ticket) ) {
- phpCAS::trace('ST or PT \''.$ticket.'\' found');
+ if (preg_match('/^ST-/', $ticket)) {
+ phpCAS::trace('ST \'' . $ticket . '\' found');
+ $this->setST($ticket);
+ unset ($_GET['ticket']);
+ } else if (preg_match('/^PT-/', $ticket)) {
+ phpCAS::trace('PT \'' . $ticket . '\' found');
$this->setPT($ticket);
unset($_GET['ticket']);
} else if ( !empty($ticket) ) {
@@ -599,6 +680,16 @@ class CASClient
phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
}
break;
+ case SAML_VERSION_1_1: // SAML just does Service Tickets
+ if( preg_match('/^[SP]T-/',$ticket) ) {
+ phpCAS::trace('SA \''.$ticket.'\' found');
+ $this->setSA($ticket);
+ unset($_GET['ticket']);
+ } else if ( !empty($ticket) ) {
+ //ill-formed ticket, halt
+ phpCAS::error('ill-formed ticket found in the URL (ticket=`'.htmlentities($ticket).'\')');
+ }
+ break;
}
}
phpCAS::traceEnd();
@@ -652,6 +743,45 @@ class CASClient
}
return $this->_user;
}
+
+
+
+ /***********************************************************************************************************************
+ * Atrributes section
+ *
+ * @author Matthias Crauwels <matthias.crauwels@ugent.be>, Ghent University, Belgium
+ *
+ ***********************************************************************************************************************/
+ /**
+ * The Authenticated users attributes. Written by CASClient::setAttributes(), read by CASClient::getAttributes().
+ * @attention client applications should use phpCAS::getAttributes().
+ *
+ * @hideinitializer
+ * @private
+ */
+ var $_attributes = array();
+
+ function setAttributes($attributes)
+ { $this->_attributes = $attributes; }
+
+ function getAttributes() {
+ if ( empty($this->_user) ) { // if no user is set, there shouldn't be any attributes also...
+ phpCAS::error('this method should be used only after '.__CLASS__.'::forceAuthentication() or '.__CLASS__.'::isAuthenticated()');
+ }
+ return $this->_attributes;
+ }
+
+ function hasAttributes()
+ { return !empty($this->_attributes); }
+
+ function hasAttribute($key)
+ { return (is_array($this->_attributes) && array_key_exists($key, $this->_attributes)); }
+
+ function getAttribute($key) {
+ if($this->hasAttribute($key)) {
+ return $this->_attributes[$key];
+ }
+ }
/**
* This method is called to renew the authentication of the user
@@ -778,55 +908,72 @@ class CASClient
* This method is called to check if the user is authenticated (previously or by
* tickets given in the URL).
*
- * @return TRUE when the user is authenticated.
+ * @return TRUE when the user is authenticated. Also may redirect to the same URL without the ticket.
*
* @public
*/
function isAuthenticated()
{
- phpCAS::traceBegin();
- $res = FALSE;
- $validate_url = '';
-
- if ( $this->wasPreviouslyAuthenticated() ) {
- // the user has already (previously during the session) been
- // authenticated, nothing to be done.
- phpCAS::trace('user was already authenticated, no need to look for tickets');
- $res = TRUE;
- }
- elseif ( $this->hasST() ) {
- // if a Service Ticket was given, validate it
- phpCAS::trace('ST `'.$this->getST().'\' is present');
- $this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
- phpCAS::trace('ST `'.$this->getST().'\' was validated');
- if ( $this->isProxy() ) {
- $this->validatePGT($validate_url,$text_response,$tree_response); // idem
- phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
- $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ phpCAS::traceBegin();
+ $res = FALSE;
+ $validate_url = '';
+
+ if ( $this->wasPreviouslyAuthenticated() ) {
+ // the user has already (previously during the session) been
+ // authenticated, nothing to be done.
+ phpCAS::trace('user was already authenticated, no need to look for tickets');
+ $res = TRUE;
}
- $_SESSION['phpCAS']['user'] = $this->getUser();
- $res = TRUE;
- }
- elseif ( $this->hasPT() ) {
- // if a Proxy Ticket was given, validate it
- phpCAS::trace('PT `'.$this->getPT().'\' is present');
- $this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
- phpCAS::trace('PT `'.$this->getPT().'\' was validated');
- if ( $this->isProxy() ) {
- $this->validatePGT($validate_url,$text_response,$tree_response); // idem
- phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
- $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ else {
+ if ( $this->hasST() ) {
+ // if a Service Ticket was given, validate it
+ phpCAS::trace('ST `'.$this->getST().'\' is present');
+ $this->validateST($validate_url,$text_response,$tree_response); // if it fails, it halts
+ phpCAS::trace('ST `'.$this->getST().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ elseif ( $this->hasPT() ) {
+ // if a Proxy Ticket was given, validate it
+ phpCAS::trace('PT `'.$this->getPT().'\' is present');
+ $this->validatePT($validate_url,$text_response,$tree_response); // note: if it fails, it halts
+ phpCAS::trace('PT `'.$this->getPT().'\' was validated');
+ if ( $this->isProxy() ) {
+ $this->validatePGT($validate_url,$text_response,$tree_response); // idem
+ phpCAS::trace('PGT `'.$this->getPGT().'\' was validated');
+ $_SESSION['phpCAS']['pgt'] = $this->getPGT();
+ }
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $res = TRUE;
+ }
+ elseif ( $this->hasSA() ) {
+ // if we have a SAML ticket, validate it.
+ phpCAS::trace('SA `'.$this->getSA().'\' is present');
+ $this->validateSA($validate_url,$text_response,$tree_response); // if it fails, it halts
+ phpCAS::trace('SA `'.$this->getSA().'\' was validated');
+ $_SESSION['phpCAS']['user'] = $this->getUser();
+ $_SESSION['phpCAS']['attributes'] = $this->getAttributes();
+ $res = TRUE;
+ }
+ else {
+ // no ticket given, not authenticated
+ phpCAS::trace('no ticket found');
+ }
+ if ($res) {
+ // if called with a ticket parameter, we need to redirect to the app without the ticket so that CAS-ification is transparent to the browser (for later POSTS)
+ // most of the checks and errors should have been made now, so we're safe for redirect without masking error messages.
+ header('Location: '.$this->getURL());
+ phpCAS::log( "Prepare redirect to : ".$this->getURL() );
+ }
}
- $_SESSION['phpCAS']['user'] = $this->getUser();
- $res = TRUE;
- }
- else {
- // no ticket given, not authenticated
- phpCAS::trace('no ticket found');
- }
-
- phpCAS::traceEnd($res);
- return $res;
+
+ phpCAS::traceEnd($res);
+ return $res;
}
/**
@@ -889,6 +1036,9 @@ class CASClient
if ( $this->isSessionAuthenticated() ) {
// authentication already done
$this->setUser($_SESSION['phpCAS']['user']);
+ if(isset($_SESSION['phpCAS']['attributes'])){
+ $this->setAttributes($_SESSION['phpCAS']['attributes']);
+ }
phpCAS::trace('user = `'.$_SESSION['phpCAS']['user'].'\'');
$auth = TRUE;
} else {
@@ -917,6 +1067,7 @@ class CASClient
printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
$this->printHTMLFooter();
+
phpCAS::traceExit();
exit();
}
@@ -962,11 +1113,15 @@ class CASClient
$cas_url = $cas_url . $paramSeparator . "service=" . urlencode($params['service']);
}
header('Location: '.$cas_url);
+ phpCAS::log( "Prepare redirect to : ".$cas_url );
+
session_unset();
session_destroy();
+
$this->printHTMLHeader($this->getString(CAS_STR_LOGOUT));
printf('<p>'.$this->getString(CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED).'</p>',$cas_url);
$this->printHTMLFooter();
+
phpCAS::traceExit();
exit();
}
@@ -1009,10 +1164,10 @@ class CASClient
}
$client_ip = $_SERVER['REMOTE_ADDR'];
$client = gethostbyaddr($client_ip);
- phpCAS::log("Client: ".$client);
+ phpCAS::log("Client: ".$client."/".$client_ip);
$allowed = false;
foreach ($allowed_clients as $allowed_client) {
- if ($client == $allowed_client) {
+ if (($client == $allowed_client) or ($client_ip == $allowed_client)) {
phpCAS::log("Allowed client '".$allowed_client."' matches, logout request is allowed");
$allowed = true;
break;
@@ -1284,6 +1439,151 @@ class CASClient
phpCAS::traceEnd(TRUE);
return TRUE;
}
+
+ // ########################################################################
+ // SAML VALIDATION
+ // ########################################################################
+ /**
+ * @addtogroup internalBasic
+ * @{
+ */
+
+ /**
+ * This method is used to validate a SAML TICKET; halt on failure, and sets $validate_url,
+ * $text_reponse and $tree_response on success. These parameters are used later
+ * by CASClient::validatePGT() for CAS proxies.
+ *
+ * @param $validate_url the URL of the request to the CAS server.
+ * @param $text_response the response of the CAS server, as is (XML text).
+ * @param $tree_response the response of the CAS server, as a DOM XML tree.
+ *
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function validateSA($validate_url,&$text_response,&$tree_response)
+ {
+ phpCAS::traceBegin();
+
+ // build the URL to validate the ticket
+ $validate_url = $this->getServerSamlValidateURL();
+
+ // open and read the URL
+ if ( !$this->readURL($validate_url,''/*cookies*/,$headers,$text_response,$err_msg) ) {
+ phpCAS::trace('could not open URL \''.$validate_url.'\' to validate ('.$err_msg.')');
+ $this->authError('SA not validated', $validate_url, TRUE/*$no_response*/);
+ }
+
+ phpCAS::trace('server version: '.$this->getServerVersion());
+
+ // analyze the result depending on the version
+ switch ($this->getServerVersion()) {
+ case SAML_VERSION_1_1:
+
+ // read the response of the CAS server into a DOM object
+ if ( !($dom = domxml_open_mem($text_response))) {
+ phpCAS::trace('domxml_open_mem() failed');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // read the root node of the XML tree
+ if ( !($tree_response = $dom->document_element()) ) {
+ phpCAS::trace('document_element() failed');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // insure that tag name is 'Envelope'
+ if ( $tree_response->node_name() != 'Envelope' ) {
+ phpCAS::trace('bad XML root node (should be `Envelope\' instead of `'.$tree_response->node_name().'\'');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ // check for the NameIdentifier tag in the SAML response
+ if ( sizeof($success_elements = $tree_response->get_elements_by_tagname("NameIdentifier")) != 0) {
+ phpCAS::trace('NameIdentifier found');
+ $user = trim($success_elements[0]->get_content());
+ phpCAS::trace('user = `'.$user.'`');
+ $this->setUser($user);
+ $this->setSessionAttributes($text_response);
+ } else {
+ phpCAS::trace('no <NameIdentifier> tag found in SAML payload');
+ $this->authError('SA not validated',
+ $validate_url,
+ FALSE/*$no_response*/,
+ TRUE/*$bad_response*/,
+ $text_response);
+ }
+ break;
+ }
+
+ // at this step, ST has been validated and $this->_user has been set,
+ phpCAS::traceEnd(TRUE);
+ return TRUE;
+ }
+
+ /**
+ * This method will parse the DOM and pull out the attributes from the SAML
+ * payload and put them into an array, then put the array into the session.
+ *
+ * @param $text_response the SAML payload.
+ * @return bool TRUE when successfull, halt otherwise by calling CASClient::authError().
+ *
+ * @private
+ */
+ function setSessionAttributes($text_response)
+ {
+ phpCAS::traceBegin();
+
+ $result = FALSE;
+
+ if (isset($_SESSION[SAML_ATTRIBUTES])) {
+ phpCAS::trace("session attrs already set."); //testbml - do we care?
+ }
+
+ $attr_array = array();
+
+ if (($dom = domxml_open_mem($text_response))) {
+ $xPath = $dom->xpath_new_context();
+ $xPath->xpath_register_ns('samlp', 'urn:oasis:names:tc:SAML:1.0:protocol');
+ $xPath->xpath_register_ns('saml', 'urn:oasis:names:tc:SAML:1.0:assertion');
+ $nodelist = $xPath->xpath_eval("//saml:Attribute");
+ $attrs = $nodelist->nodeset;
+ phpCAS::trace($text_response);
+ foreach($attrs as $attr){
+ $xres = $xPath->xpath_eval("saml:AttributeValue", $attr);
+ $name = $attr->get_attribute("AttributeName");
+ $value_array = array();
+ foreach($xres->nodeset as $node){
+ $value_array[] = $node->get_content();
+
+ }
+ phpCAS::trace("* " . $name . "=" . $value_array);
+ $attr_array[$name] = $value_array;
+ }
+ $_SESSION[SAML_ATTRIBUTES] = $attr_array;
+ // UGent addition...
+ foreach($attr_array as $attr_key => $attr_value) {
+ if(count($attr_value) > 1) {
+ $this->_attributes[$attr_key] = $attr_value;
+ }
+ else {
+ $this->_attributes[$attr_key] = $attr_value[0];
+ }
+ }
+ $result = TRUE;
+ }
+ phpCAS::traceEnd($result);
+ return $result;
+ }
/** @} */
@@ -1495,6 +1795,7 @@ class CASClient
$this->storePGT($pgt,$pgt_iou);
$this->printHTMLFooter();
phpCAS::traceExit();
+ exit();
}
/** @} */
@@ -1585,7 +1886,7 @@ class CASClient
}
// create the storage object
- $this->_pgt_storage = &new PGTStorageFile($this,$format,$path);
+ $this->_pgt_storage = new PGTStorageFile($this,$format,$path);
}
/**
@@ -1622,7 +1923,7 @@ class CASClient
trigger_error('PGT storage into database is an experimental feature, use at your own risk',E_USER_WARNING);
// create the storage object
- $this->_pgt_storage = & new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
+ $this->_pgt_storage = new PGTStorageDB($this,$user,$password,$database_type,$hostname,$port,$database,$table);
}
// ########################################################################
@@ -1643,7 +1944,8 @@ class CASClient
*/
function validatePGT(&$validate_url,$text_response,$tree_response)
{
- phpCAS::traceBegin();
+ // here cannot use phpCAS::traceBegin(); alongside domxml-php4-to-php5.php
+ phpCAS::log('start validatePGT()');
if ( sizeof($arr = $tree_response->get_elements_by_tagname("proxyGrantingTicket")) == 0) {
phpCAS::trace('<proxyGrantingTicket> not found');
// authentication succeded, but no PGT Iou was transmitted
@@ -1666,7 +1968,8 @@ class CASClient
}
$this->setPGT($pgt);
}
- phpCAS::traceEnd(TRUE);
+ // here, cannot use phpCAS::traceEnd(TRUE); alongside domxml-php4-to-php5.php
+ phpCAS::log('end validatePGT()');
return TRUE;
}
@@ -1819,7 +2122,15 @@ class CASClient
if ($this->_cas_server_cert == '' && $this->_cas_server_ca_cert == '' && !$this->_no_cas_server_validation) {
phpCAS::error('one of the methods phpCAS::setCasServerCert(), phpCAS::setCasServerCACert() or phpCAS::setNoCasServerValidation() must be called.');
}
- if ($this->_cas_server_cert != '' ) {
+ if ($this->_cas_server_cert != '' && $this->_cas_server_ca_cert != '') {
+ // This branch added by IDMS. Seems phpCAS implementor got a bit confused about the curl options CURLOPT_SSLCERT and CURLOPT_CAINFO
+ curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
+ curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
+ curl_setopt($ch, CURLOPT_SSLCERT, $this->_cas_server_cert);
+ curl_setopt($ch, CURLOPT_CAINFO, $this->_cas_server_ca_cert);
+ curl_setopt($ch, CURLOPT_VERBOSE, '1');
+ phpCAS::trace('CURL: Set all required opts for mutual authentication ------');
+ } else if ($this->_cas_server_cert != '' ) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_SSLCERT, $this->_cas_server_cert);
} else if ($this->_cas_server_ca_cert != '') {
@@ -1839,11 +2150,28 @@ class CASClient
if ( is_array($cookies) ) {
curl_setopt($ch,CURLOPT_COOKIE,implode(';',$cookies));
}
+ // add extra stuff if SAML
+ if ($this->hasSA()) {
+ $more_headers = array ("soapaction: http://www.oasis-open.org/committees/security",
+ "cache-control: no-cache",
+ "pragma: no-cache",
+ "accept: text/xml",
+ "connection: keep-alive",
+ "content-type: text/xml");
+
+ curl_setopt($ch, CURLOPT_HTTPHEADER, $more_headers);
+ curl_setopt($ch, CURLOPT_POST, 1);
+ $data = $this->buildSAMLPayload();
+ //phpCAS::trace('SAML Payload: '.print_r($data, TRUE));
+ curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+ }
// perform the query
$buf = curl_exec ($ch);
+ //phpCAS::trace('CURL: Call completed. Response body is: \''.$buf.'\'');
if ( $buf === FALSE ) {
phpCAS::trace('curl_exec() failed');
$err_msg = 'CURL error #'.curl_errno($ch).': '.curl_error($ch);
+ //phpCAS::trace('curl error: '.$err_msg);
// close the CURL session
curl_close ($ch);
$res = FALSE;
@@ -1858,7 +2186,28 @@ class CASClient
phpCAS::traceEnd($res);
return $res;
}
-
+
+ /**
+ * This method is used to build the SAML POST body sent to /samlValidate URL.
+ *
+ * @return the SOAP-encased SAMLP artifact (the ticket).
+ *
+ * @private
+ */
+ function buildSAMLPayload()
+ {
+ phpCAS::traceBegin();
+
+ //get the ticket
+ $sa = $this->getSA();
+ //phpCAS::trace("SA: ".$sa);
+
+ $body=SAML_SOAP_ENV.SAML_SOAP_BODY.SAMLP_REQUEST.SAML_ASSERTION_ARTIFACT.$sa.SAML_ASSERTION_ARTIFACT_CLOSE.SAMLP_REQUEST_CLOSE.SAML_SOAP_BODY_CLOSE.SAML_SOAP_ENV_CLOSE;
+
+ phpCAS::traceEnd($body);
+ return ($body);
+ }
+
/**
* This method is the callback used by readURL method to request HTTP headers.
*/
@@ -1951,6 +2300,7 @@ class CASClient
*
* @param $url a string giving the URL of the service, including the mailing box
* for IMAP URLs, as accepted by imap_open().
+ * @param $service a string giving for CAS retrieve Proxy ticket
* @param $flags options given to imap_open().
* @param $err_code an error code Possible values are PHPCAS_SERVICE_OK (on
* success), PHPCAS_SERVICE_PT_NO_SERVER_RESPONSE, PHPCAS_SERVICE_PT_BAD_SERVER_RESPONSE,
@@ -1964,11 +2314,11 @@ class CASClient
*
* @public
*/
- function serviceMail($url,$flags,&$err_code,&$err_msg,&$pt)
+ function serviceMail($url,$service,$flags,&$err_code,&$err_msg,&$pt)
{
phpCAS::traceBegin();
// at first retrieve a PT
- $pt = $this->retrievePT($target_service,$err_code,$output);
+ $pt = $this->retrievePT($service,$err_code,$output);
$stream = FALSE;
@@ -2049,7 +2399,30 @@ class CASClient
*/
function hasPT()
{ return !empty($this->_pt); }
-
+ /**
+ * This method returns the SAML Ticket provided in the URL of the request.
+ * @return The SAML ticket.
+ * @private
+ */
+ function getSA()
+ { return 'ST'.substr($this->_sa, 2); }
+
+ /**
+ * This method stores the SAML Ticket.
+ * @param $sa The SAML Ticket.
+ * @private
+ */
+ function setSA($sa)
+ { $this->_sa = $sa; }
+
+ /**
+ * This method tells if a SAML Ticket was stored.
+ * @return TRUE if a SAML Ticket has been stored.
+ * @private
+ */
+ function hasSA()
+ { return !empty($this->_sa); }
+
/** @} */
// ########################################################################
// PT VALIDATION
@@ -2213,8 +2586,13 @@ class CASClient
}
}
- $final_uri .= strtok($_SERVER['REQUEST_URI'],"?");
- $cgi_params = '?'.strtok("?");
+ $php_is_for_sissies = split("\?", $_SERVER['REQUEST_URI'], 2);
+ $final_uri .= $php_is_for_sissies[0];
+ if(sizeof($php_is_for_sissies) > 1){
+ $cgi_params = '?' . $php_is_for_sissies[1];
+ } else {
+ $cgi_params = '?';
+ }
// remove the ticket if present in the CGI parameters
$cgi_params = preg_replace('/&ticket=[^&]*/','',$cgi_params);
$cgi_params = preg_replace('/\?ticket=[^&;]*/','?',$cgi_params);
@@ -2294,4 +2672,4 @@ class CASClient
/** @} */
}
-?> \ No newline at end of file
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php b/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
deleted file mode 100644
index a0dfb99c7..000000000
--- a/plugins/CasAuthentication/extlib/CAS/domxml-php4-php5.php
+++ /dev/null
@@ -1,277 +0,0 @@
-<?php
-/**
- * @file domxml-php4-php5.php
- * Require PHP5, uses built-in DOM extension.
- * To be used in PHP4 scripts using DOMXML extension.
- * Allows PHP4/DOMXML scripts to run on PHP5/DOM.
- * (Requires PHP5/XSL extension for domxml_xslt functions)
- *
- * Typical use:
- * <pre>
- * {
- * if (version_compare(PHP_VERSION,'5','>='))
- * require_once('domxml-php4-to-php5.php');
- * }
- * </pre>
- *
- * Version 1.5.5, 2005-01-18, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
- *
- * ------------------------------------------------------------------<br>
- * Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
- *
- * Copyright 2004, Licence: Creative Commons "Attribution-ShareAlike 2.0 France" BY-SA (FR),
- * http://creativecommons.org/licenses/by-sa/2.0/fr/
- * http://alexandre.alapetite.net/divers/apropos/#by-sa
- * - Attribution. You must give the original author credit
- * - Share Alike. If you alter, transform, or build upon this work,
- * you may distribute the resulting work only under a license identical to this one
- * - The French law is authoritative
- * - Any of these conditions can be waived if you get permission from Alexandre Alapetite
- * - Please send to Alexandre Alapetite the modifications you make,
- * in order to improve this file for the benefit of everybody
- *
- * If you want to distribute this code, please do it as a link to:
- * http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
- */
-
-function domxml_new_doc($version) {return new php4DOMDocument('');}
-function domxml_open_file($filename) {return new php4DOMDocument($filename);}
-function domxml_open_mem($str)
-{
- $dom=new php4DOMDocument('');
- $dom->myDOMNode->loadXML($str);
- return $dom;
-}
-function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->query($eval_str,$contextnode);}
-function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
-
-class php4DOMAttr extends php4DOMNode
-{
- function php4DOMAttr($aDOMAttr) {$this->myDOMNode=$aDOMAttr;}
- function Name() {return $this->myDOMNode->name;}
- function Specified() {return $this->myDOMNode->specified;}
- function Value() {return $this->myDOMNode->value;}
-}
-
-class php4DOMDocument extends php4DOMNode
-{
- function php4DOMDocument($filename='')
- {
- $this->myDOMNode=new DOMDocument();
- if ($filename!='') $this->myDOMNode->load($filename);
- }
- function create_attribute($name,$value)
- {
- $myAttr=$this->myDOMNode->createAttribute($name);
- $myAttr->value=$value;
- return new php4DOMAttr($myAttr,$this);
- }
- function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
- function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
- function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
- function create_text_node($content) {return new php4DOMNode($this->myDOMNode->createTextNode($content),$this);}
- function document_element() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
- function dump_file($filename,$compressionmode=false,$format=false) {return $this->myDOMNode->save($filename);}
- function dump_mem($format=false,$encoding=false) {return $this->myDOMNode->saveXML();}
- function get_element_by_id($id) {return new php4DOMElement($this->myDOMNode->getElementById($id),$this);}
- function get_elements_by_tagname($name)
- {
- $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this);
- $i++;
- }
- return $nodeSet;
- }
- function html_dump_mem() {return $this->myDOMNode->saveHTML();}
- function root() {return new php4DOMElement($this->myDOMNode->documentElement,$this);}
-}
-
-class php4DOMElement extends php4DOMNode
-{
- function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
- function get_elements_by_tagname($name)
- {
- $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
- function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
- function set_attribute($name,$value) {return $this->myDOMNode->setAttribute($name,$value);}
- function tagname() {return $this->myDOMNode->tagName;}
-}
-
-class php4DOMNode
-{
- var $myDOMNode;
- var $myOwnerDocument;
- function php4DOMNode($aDomNode,$aOwnerDocument)
- {
- $this->myDOMNode=$aDomNode;
- $this->myOwnerDocument=$aOwnerDocument;
- }
- function __get($name)
- {
- if ($name=='type') return $this->myDOMNode->nodeType;
- elseif ($name=='tagname') return $this->myDOMNode->tagName;
- elseif ($name=='content') return $this->myDOMNode->textContent;
- else
- {
- $myErrors=debug_backtrace();
- trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
- return false;
- }
- }
- function append_child($newnode) {return new php4DOMElement($this->myDOMNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
- function append_sibling($newnode) {return new php4DOMElement($this->myDOMNode->parentNode->appendChild($newnode->myDOMNode),$this->myOwnerDocument);}
- function attributes()
- {
- $myDOMNodeList=$this->myDOMNode->attributes;
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function child_nodes()
- {
- $myDOMNodeList=$this->myDOMNode->childNodes;
- $nodeSet=array();
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
- $i++;
- }
- return $nodeSet;
- }
- function children() {return $this->child_nodes();}
- function clone_node($deep=false) {return new php4DOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
- function first_child() {return new php4DOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
- function get_content() {return $this->myDOMNode->textContent;}
- function has_attributes() {return $this->myDOMNode->hasAttributes();}
- function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
- function insert_before($newnode,$refnode) {return new php4DOMElement($this->myDOMNode->insertBefore($newnode->myDOMNode,$refnode->myDOMNode),$this->myOwnerDocument);}
- function is_blank_node()
- {
- $myDOMNodeList=$this->myDOMNode->childNodes;
- $i=0;
- if (isset($myDOMNodeList))
- while ($node=$myDOMNodeList->item($i))
- {
- if (($node->nodeType==XML_ELEMENT_NODE)||
- (($node->nodeType==XML_TEXT_NODE)&&!ereg('^([[:cntrl:]]|[[:space:]])*$',$node->nodeValue)))
- return false;
- $i++;
- }
- return true;
- }
- function last_child() {return new php4DOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
- function new_child($name,$content)
- {
- $mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
- $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($content));
- $this->myDOMNode->appendChild($mySubNode);
- return new php4DOMElement($mySubNode,$this->myOwnerDocument);
- }
- function next_sibling() {return new php4DOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
- function node_name() {return $this->myDOMNode->localName;}
- function node_type() {return $this->myDOMNode->nodeType;}
- function node_value() {return $this->myDOMNode->nodeValue;}
- function owner_document() {return $this->myOwnerDocument;}
- function parent_node() {return new php4DOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
- function prefix() {return $this->myDOMNode->prefix;}
- function previous_sibling() {return new php4DOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
- function remove_child($oldchild) {return new php4DOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
- function replace_child($oldnode,$newnode) {return new php4DOMElement($this->myDOMNode->replaceChild($oldnode->myDOMNode,$newnode->myDOMNode),$this->myOwnerDocument);}
- function set_content($text)
- {
- if (($this->myDOMNode->hasChildNodes())&&($this->myDOMNode->firstChild->nodeType==XML_TEXT_NODE))
- $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
- return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode($text));
- }
-}
-
-class php4DOMNodelist
-{
- var $myDOMNodelist;
- var $nodeset;
- function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
- {
- $this->myDOMNodelist=$aDOMNodelist;
- $this->nodeset=array();
- $i=0;
- if (isset($this->myDOMNodelist))
- while ($node=$this->myDOMNodelist->item($i))
- {
- $this->nodeset[]=new php4DOMElement($node,$aOwnerDocument);
- $i++;
- }
- }
-}
-
-class php4DOMXPath
-{
- var $myDOMXPath;
- var $myOwnerDocument;
- function php4DOMXPath($dom_document)
- {
- $this->myOwnerDocument=$dom_document;
- $this->myDOMXPath=new DOMXPath($dom_document->myDOMNode);
- }
- function query($eval_str,$contextnode)
- {
- if (isset($contextnode)) return new php4DOMNodelist($this->myDOMXPath->query($eval_str,$contextnode->myDOMNode),$this->myOwnerDocument);
- else return new php4DOMNodelist($this->myDOMXPath->query($eval_str),$this->myOwnerDocument);
- }
- function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
-}
-
-if (extension_loaded('xsl'))
-{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
- function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
- function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
- function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
- class php4DomXsltStylesheet
- {
- var $myxsltProcessor;
- function php4DomXsltStylesheet($dom_document)
- {
- $this->myxsltProcessor=new xsltProcessor();
- $this->myxsltProcessor->importStyleSheet($dom_document);
- }
- function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
- {
- foreach ($xslt_parameters as $param=>$value)
- $this->myxsltProcessor->setParameter('',$param,$value);
- $myphp4DOMDocument=new php4DOMDocument();
- $myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
- return $myphp4DOMDocument;
- }
- function result_dump_file($dom_document,$filename)
- {
- $html=$dom_document->myDOMNode->saveHTML();
- file_put_contents($filename,$html);
- return $html;
- }
- function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
- }
-}
-?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php b/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php
new file mode 100644
index 000000000..1dc4e4b97
--- /dev/null
+++ b/plugins/CasAuthentication/extlib/CAS/domxml-php4-to-php5.php
@@ -0,0 +1,499 @@
+<?php
+/*
+ Requires PHP5, uses built-in DOM extension.
+ To be used in PHP4 scripts using DOMXML extension: allows PHP4/DOMXML scripts to run on PHP5/DOM.
+ (Optional: requires PHP5/XSL extension for domxml_xslt functions, PHP>=5.1 for XPath evaluation functions, and PHP>=5.1/libxml for DOMXML error reports)
+
+ Typical use:
+ {
+ if (PHP_VERSION>='5')
+ require_once('domxml-php4-to-php5.php');
+ }
+
+ Version 1.21, 2008-12-05, http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+
+ ------------------------------------------------------------------
+ Written by Alexandre Alapetite, http://alexandre.alapetite.net/cv/
+
+ Copyright 2004-2008, GNU Lesser General Public License,
+ http://www.gnu.org/licenses/lgpl.html
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Lesser General Public License for more details.
+ You should have received a copy of the GNU Lesser General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/lgpl.html>
+
+ == Rights and obligations ==
+ - Attribution: You must give the original author credit.
+ - Share Alike: If you alter or transform this library,
+ you may distribute the resulting library only under the same license GNU/LGPL.
+ - In case of jurisdiction dispute, the French law is authoritative.
+ - Any of these conditions can be waived if you get permission from Alexandre Alapetite.
+ - Not required, but please send to Alexandre Alapetite the modifications you make,
+ in order to improve this file for the benefit of everybody.
+
+ If you want to distribute this code, please do it as a link to:
+ http://alexandre.alapetite.net/doc-alex/domxml-php4-php5/
+*/
+
+define('DOMXML_LOAD_PARSING',0);
+define('DOMXML_LOAD_VALIDATING',1);
+define('DOMXML_LOAD_RECOVERING',2);
+define('DOMXML_LOAD_SUBSTITUTE_ENTITIES',4);
+//define('DOMXML_LOAD_COMPLETE_ATTRS',8);
+define('DOMXML_LOAD_DONT_KEEP_BLANKS',16);
+
+function domxml_new_doc($version) {return new php4DOMDocument();}
+function domxml_new_xmldoc($version) {return new php4DOMDocument();}
+function domxml_open_file($filename,$mode=DOMXML_LOAD_PARSING,&$error=null)
+{
+ $dom=new php4DOMDocument($mode);
+ $errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
+ if ($errorMode) libxml_use_internal_errors(true);
+ if (!$dom->myDOMNode->load($filename)) $dom=null;
+ if ($errorMode)
+ {
+ $error=array_map('_error_report',libxml_get_errors());
+ libxml_clear_errors();
+ }
+ return $dom;
+}
+function domxml_open_mem($str,$mode=DOMXML_LOAD_PARSING,&$error=null)
+{
+ $dom=new php4DOMDocument($mode);
+ $errorMode=(func_num_args()>2)&&defined('LIBXML_VERSION');
+ if ($errorMode) libxml_use_internal_errors(true);
+ if (!$dom->myDOMNode->loadXML($str)) $dom=null;
+ if ($errorMode)
+ {
+ $error=array_map('_error_report',libxml_get_errors());
+ libxml_clear_errors();
+ }
+ return $dom;
+}
+function html_doc($html_doc,$from_file=false)
+{
+ $dom=new php4DOMDocument();
+ if ($from_file) $result=$dom->myDOMNode->loadHTMLFile($html_doc);
+ else $result=$dom->myDOMNode->loadHTML($html_doc);
+ return $result ? $dom : null;
+}
+function html_doc_file($filename) {return html_doc($filename,true);}
+function xmldoc($str) {return domxml_open_mem($str);}
+function xmldocfile($filename) {return domxml_open_file($filename);}
+function xpath_eval($xpath_context,$eval_str,$contextnode=null) {return $xpath_context->xpath_eval($eval_str,$contextnode);}
+function xpath_new_context($dom_document) {return new php4DOMXPath($dom_document);}
+function xpath_register_ns($xpath_context,$prefix,$namespaceURI) {return $xpath_context->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
+function _entityDecode($text) {return html_entity_decode(strtr($text,array('&apos;'=>'\'')),ENT_QUOTES,'UTF-8');}
+function _error_report($error) {return array('errormessage'=>$error->message,'nodename'=>'','line'=>$error->line,'col'=>$error->column)+($error->file==''?array():array('directory'=>dirname($error->file),'file'=>basename($error->file)));}
+
+class php4DOMAttr extends php4DOMNode
+{
+ function __get($name)
+ {
+ if ($name==='name') return $this->myDOMNode->name;
+ else return parent::__get($name);
+ }
+ function name() {return $this->myDOMNode->name;}
+ function set_content($text) {}
+ //function set_value($content) {return $this->myDOMNode->value=htmlspecialchars($content,ENT_QUOTES);}
+ function specified() {return $this->myDOMNode->specified;}
+ function value() {return $this->myDOMNode->value;}
+}
+
+class php4DOMDocument extends php4DOMNode
+{
+ function php4DOMDocument($mode=DOMXML_LOAD_PARSING)
+ {
+ $this->myDOMNode=new DOMDocument();
+ $this->myOwnerDocument=$this;
+ if ($mode & DOMXML_LOAD_VALIDATING) $this->myDOMNode->validateOnParse=true;
+ if ($mode & DOMXML_LOAD_RECOVERING) $this->myDOMNode->recover=true;
+ if ($mode & DOMXML_LOAD_SUBSTITUTE_ENTITIES) $this->myDOMNode->substituteEntities=true;
+ if ($mode & DOMXML_LOAD_DONT_KEEP_BLANKS) $this->myDOMNode->preserveWhiteSpace=false;
+ }
+ function add_root($name)
+ {
+ if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
+ return new php4DOMElement($this->myDOMNode->appendChild($this->myDOMNode->createElement($name)),$this->myOwnerDocument);
+ }
+ function create_attribute($name,$value)
+ {
+ $myAttr=$this->myDOMNode->createAttribute($name);
+ $myAttr->value=htmlspecialchars($value,ENT_QUOTES);
+ return new php4DOMAttr($myAttr,$this);
+ }
+ function create_cdata_section($content) {return new php4DOMNode($this->myDOMNode->createCDATASection($content),$this);}
+ function create_comment($data) {return new php4DOMNode($this->myDOMNode->createComment($data),$this);}
+ function create_element($name) {return new php4DOMElement($this->myDOMNode->createElement($name),$this);}
+ function create_element_ns($uri,$name,$prefix=null)
+ {
+ if ($prefix==null) $prefix=$this->myDOMNode->lookupPrefix($uri);
+ if (($prefix==null)&&(($this->myDOMNode->documentElement==null)||(!$this->myDOMNode->documentElement->isDefaultNamespace($uri)))) $prefix='a'.sprintf('%u',crc32($uri));
+ return new php4DOMElement($this->myDOMNode->createElementNS($uri,$prefix==null ? $name : $prefix.':'.$name),$this);
+ }
+ function create_entity_reference($content) {return new php4DOMNode($this->myDOMNode->createEntityReference($content),$this);} //By Walter Ebert 2007-01-22
+ function create_processing_instruction($target,$data=''){return new php4DomProcessingInstruction($this->myDOMNode->createProcessingInstruction($target,$data),$this);}
+ function create_text_node($content) {return new php4DOMText($this->myDOMNode->createTextNode($content),$this);}
+ function document_element() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
+ function dump_file($filename,$compressionmode=false,$format=false)
+ {
+ $format0=$this->myDOMNode->formatOutput;
+ $this->myDOMNode->formatOutput=$format;
+ $res=$this->myDOMNode->save($filename);
+ $this->myDOMNode->formatOutput=$format0;
+ return $res;
+ }
+ function dump_mem($format=false,$encoding=false)
+ {
+ $format0=$this->myDOMNode->formatOutput;
+ $this->myDOMNode->formatOutput=$format;
+ $encoding0=$this->myDOMNode->encoding;
+ if ($encoding) $this->myDOMNode->encoding=$encoding;
+ $dump=$this->myDOMNode->saveXML();
+ $this->myDOMNode->formatOutput=$format0;
+ if ($encoding) $this->myDOMNode->encoding= $encoding0=='' ? 'UTF-8' : $encoding0; //UTF-8 is XML default encoding
+ return $dump;
+ }
+ function free()
+ {
+ if ($this->myDOMNode->hasChildNodes()) $this->myDOMNode->removeChild($this->myDOMNode->firstChild);
+ $this->myDOMNode=null;
+ $this->myOwnerDocument=null;
+ }
+ function get_element_by_id($id) {return parent::_newDOMElement($this->myDOMNode->getElementById($id),$this);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this);
+ return $nodeSet;
+ }
+ function html_dump_mem() {return $this->myDOMNode->saveHTML();}
+ function root() {return parent::_newDOMElement($this->myDOMNode->documentElement,$this);}
+ function xinclude() {return $this->myDOMNode->xinclude();}
+ function xpath_new_context() {return new php4DOMXPath($this);}
+}
+
+class php4DOMElement extends php4DOMNode
+{
+ function add_namespace($uri,$prefix)
+ {
+ if ($this->myDOMNode->hasAttributeNS('http://www.w3.org/2000/xmlns/',$prefix)) return false;
+ else
+ {
+ $this->myDOMNode->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$prefix,$uri); //By Daniel Walker 2006-09-08
+ return true;
+ }
+ }
+ function get_attribute($name) {return $this->myDOMNode->getAttribute($name);}
+ function get_attribute_node($name) {return parent::_newDOMElement($this->myDOMNode->getAttributeNode($name),$this->myOwnerDocument);}
+ function get_elements_by_tagname($name)
+ {
+ $myDOMNodeList=$this->myDOMNode->getElementsByTagName($name);
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMElement($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function has_attribute($name) {return $this->myDOMNode->hasAttribute($name);}
+ function remove_attribute($name) {return $this->myDOMNode->removeAttribute($name);}
+ function set_attribute($name,$value)
+ {
+ //return $this->myDOMNode->setAttribute($name,$value); //Does not return a DomAttr
+ $myAttr=$this->myDOMNode->ownerDocument->createAttribute($name);
+ $myAttr->value=htmlspecialchars($value,ENT_QUOTES); //Entity problem reported by AL-DesignWorks 2007-09-07
+ $this->myDOMNode->setAttributeNode($myAttr);
+ return new php4DOMAttr($myAttr,$this->myOwnerDocument);
+ }
+ /*function set_attribute_node($attr)
+ {
+ $this->myDOMNode->setAttributeNode($this->_importNode($attr));
+ return $attr;
+ }*/
+ function set_name($name)
+ {
+ if ($this->myDOMNode->prefix=='') $newNode=$this->myDOMNode->ownerDocument->createElement($name);
+ else $newNode=$this->myDOMNode->ownerDocument->createElementNS($this->myDOMNode->namespaceURI,$this->myDOMNode->prefix.':'.$name);
+ $myDOMNodeList=$this->myDOMNode->attributes;
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++))
+ if ($node->namespaceURI=='') $newNode->setAttribute($node->name,$node->value);
+ else $newNode->setAttributeNS($node->namespaceURI,$node->nodeName,$node->value);
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item(0)) $newNode->appendChild($node);
+ $this->myDOMNode->parentNode->replaceChild($newNode,$this->myDOMNode);
+ $this->myDOMNode=$newNode;
+ return true;
+ }
+ function tagname() {return $this->tagname;}
+}
+
+class php4DOMNode
+{
+ public $myDOMNode;
+ public $myOwnerDocument;
+ function php4DOMNode($aDomNode,$aOwnerDocument)
+ {
+ $this->myDOMNode=$aDomNode;
+ $this->myOwnerDocument=$aOwnerDocument;
+ }
+ function __get($name)
+ {
+ switch ($name)
+ {
+ case 'type': return $this->myDOMNode->nodeType;
+ case 'tagname': return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->tagName; //Avoid namespace prefix for DOMElement
+ case 'content': return $this->myDOMNode->textContent;
+ case 'value': return $this->myDOMNode->value;
+ default:
+ $myErrors=debug_backtrace();
+ trigger_error('Undefined property: '.get_class($this).'::$'.$name.' ['.$myErrors[0]['file'].':'.$myErrors[0]['line'].']',E_USER_NOTICE);
+ return false;
+ }
+ }
+ function add_child($newnode) {return append_child($newnode);}
+ function add_namespace($uri,$prefix) {return false;}
+ function append_child($newnode) {return self::_newDOMElement($this->myDOMNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
+ function append_sibling($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->appendChild($this->_importNode($newnode)),$this->myOwnerDocument);}
+ function attributes()
+ {
+ $myDOMNodeList=$this->myDOMNode->attributes;
+ if (!(isset($myDOMNodeList)&&$this->myDOMNode->hasAttributes())) return null;
+ $nodeSet=array();
+ $i=0;
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=new php4DOMAttr($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function child_nodes()
+ {
+ $myDOMNodeList=$this->myDOMNode->childNodes;
+ $nodeSet=array();
+ $i=0;
+ if (isset($myDOMNodeList))
+ while ($node=$myDOMNodeList->item($i++)) $nodeSet[]=self::_newDOMElement($node,$this->myOwnerDocument);
+ return $nodeSet;
+ }
+ function children() {return $this->child_nodes();}
+ function clone_node($deep=false) {return self::_newDOMElement($this->myDOMNode->cloneNode($deep),$this->myOwnerDocument);}
+ //dump_node($node) should only be called on php4DOMDocument
+ function dump_node($node=null) {return $node==null ? $this->myOwnerDocument->myDOMNode->saveXML($this->myDOMNode) : $this->myOwnerDocument->myDOMNode->saveXML($node->myDOMNode);}
+ function first_child() {return self::_newDOMElement($this->myDOMNode->firstChild,$this->myOwnerDocument);}
+ function get_content() {return $this->myDOMNode->textContent;}
+ function has_attributes() {return $this->myDOMNode->hasAttributes();}
+ function has_child_nodes() {return $this->myDOMNode->hasChildNodes();}
+ function insert_before($newnode,$refnode) {return self::_newDOMElement($this->myDOMNode->insertBefore($this->_importNode($newnode),$refnode==null?null:$refnode->myDOMNode),$this->myOwnerDocument);}
+ function is_blank_node() {return ($this->myDOMNode->nodeType===XML_TEXT_NODE)&&preg_match('%^\s*$%',$this->myDOMNode->nodeValue);}
+ function last_child() {return self::_newDOMElement($this->myDOMNode->lastChild,$this->myOwnerDocument);}
+ function new_child($name,$content)
+ {
+ $mySubNode=$this->myDOMNode->ownerDocument->createElement($name);
+ $mySubNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($content)));
+ $this->myDOMNode->appendChild($mySubNode);
+ return new php4DOMElement($mySubNode,$this->myOwnerDocument);
+ }
+ function next_sibling() {return self::_newDOMElement($this->myDOMNode->nextSibling,$this->myOwnerDocument);}
+ function node_name() {return ($this->myDOMNode->nodeType===XML_ELEMENT_NODE) ? $this->myDOMNode->localName : $this->myDOMNode->nodeName;} //Avoid namespace prefix for DOMElement
+ function node_type() {return $this->myDOMNode->nodeType;}
+ function node_value() {return $this->myDOMNode->nodeValue;}
+ function owner_document() {return $this->myOwnerDocument;}
+ function parent_node() {return self::_newDOMElement($this->myDOMNode->parentNode,$this->myOwnerDocument);}
+ function prefix() {return $this->myDOMNode->prefix;}
+ function previous_sibling() {return self::_newDOMElement($this->myDOMNode->previousSibling,$this->myOwnerDocument);}
+ function remove_child($oldchild) {return self::_newDOMElement($this->myDOMNode->removeChild($oldchild->myDOMNode),$this->myOwnerDocument);}
+ function replace_child($newnode,$oldnode) {return self::_newDOMElement($this->myDOMNode->replaceChild($this->_importNode($newnode),$oldnode->myDOMNode),$this->myOwnerDocument);}
+ function replace_node($newnode) {return self::_newDOMElement($this->myDOMNode->parentNode->replaceChild($this->_importNode($newnode),$this->myDOMNode),$this->myOwnerDocument);}
+ function set_content($text) {return $this->myDOMNode->appendChild($this->myDOMNode->ownerDocument->createTextNode(_entityDecode($text)));} //Entity problem reported by AL-DesignWorks 2007-09-07
+ //function set_name($name) {return $this->myOwnerDocument->renameNode($this->myDOMNode,$this->myDOMNode->namespaceURI,$name);}
+ function set_namespace($uri,$prefix=null)
+ {//Contributions by Daniel Walker 2006-09-08
+ $nsprefix=$this->myDOMNode->lookupPrefix($uri);
+ if ($nsprefix==null)
+ {
+ $nsprefix= $prefix==null ? $nsprefix='a'.sprintf('%u',crc32($uri)) : $prefix;
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
+ {
+ if (($prefix!=null)&&$this->myDOMNode->ownerElement->hasAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)&&
+ ($this->myDOMNode->ownerElement->getAttributeNS('http://www.w3.org/2000/xmlns/',$nsprefix)!=$uri))
+ {//Remove namespace
+ $parent=$this->myDOMNode->ownerElement;
+ $parent->removeAttributeNode($this->myDOMNode);
+ $parent->setAttribute($this->myDOMNode->localName,$this->myDOMNode->nodeValue);
+ $this->myDOMNode=$parent->getAttributeNode($this->myDOMNode->localName);
+ return;
+ }
+ $this->myDOMNode->ownerElement->setAttributeNS('http://www.w3.org/2000/xmlns/','xmlns:'.$nsprefix,$uri);
+ }
+ }
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE)
+ {
+ $parent=$this->myDOMNode->ownerElement;
+ $parent->removeAttributeNode($this->myDOMNode);
+ $parent->setAttributeNS($uri,$nsprefix.':'.$this->myDOMNode->localName,$this->myDOMNode->nodeValue);
+ $this->myDOMNode=$parent->getAttributeNodeNS($uri,$this->myDOMNode->localName);
+ }
+ elseif ($this->myDOMNode->nodeType===XML_ELEMENT_NODE)
+ {
+ $NewNode=$this->myDOMNode->ownerDocument->createElementNS($uri,$nsprefix.':'.$this->myDOMNode->localName);
+ foreach ($this->myDOMNode->attributes as $n) $NewNode->appendChild($n->cloneNode(true));
+ foreach ($this->myDOMNode->childNodes as $n) $NewNode->appendChild($n->cloneNode(true));
+ $xpath=new DOMXPath($this->myDOMNode->ownerDocument);
+ $myDOMNodeList=$xpath->query('namespace::*[name()!="xml"]',$this->myDOMNode); //Add old namespaces
+ foreach ($myDOMNodeList as $n) $NewNode->setAttributeNS('http://www.w3.org/2000/xmlns/',$n->nodeName,$n->nodeValue);
+ $this->myDOMNode->parentNode->replaceChild($NewNode,$this->myDOMNode);
+ $this->myDOMNode=$NewNode;
+ }
+ }
+ function unlink_node()
+ {
+ if ($this->myDOMNode->parentNode!=null)
+ {
+ if ($this->myDOMNode->nodeType===XML_ATTRIBUTE_NODE) $this->myDOMNode->parentNode->removeAttributeNode($this->myDOMNode);
+ else $this->myDOMNode->parentNode->removeChild($this->myDOMNode);
+ }
+ }
+ protected function _importNode($newnode) {return $this->myOwnerDocument===$newnode->myOwnerDocument ? $newnode->myDOMNode : $this->myOwnerDocument->myDOMNode->importNode($newnode->myDOMNode,true);} //To import DOMNode from another DOMDocument
+ static function _newDOMElement($aDOMNode,$aOwnerDocument)
+ {//Check the PHP5 DOMNode before creating a new associated PHP4 DOMNode wrapper
+ if ($aDOMNode==null) return null;
+ switch ($aDOMNode->nodeType)
+ {
+ case XML_ELEMENT_NODE: return new php4DOMElement($aDOMNode,$aOwnerDocument);
+ case XML_TEXT_NODE: return new php4DOMText($aDOMNode,$aOwnerDocument);
+ case XML_ATTRIBUTE_NODE: return new php4DOMAttr($aDOMNode,$aOwnerDocument);
+ case XML_PI_NODE: return new php4DomProcessingInstruction($aDOMNode,$aOwnerDocument);
+ default: return new php4DOMNode($aDOMNode,$aOwnerDocument);
+ }
+ }
+}
+
+class php4DomProcessingInstruction extends php4DOMNode
+{
+ function data() {return $this->myDOMNode->data;}
+ function target() {return $this->myDOMNode->target;}
+}
+
+class php4DOMText extends php4DOMNode
+{
+ function __get($name)
+ {
+ if ($name==='tagname') return '#text';
+ else return parent::__get($name);
+ }
+ function tagname() {return '#text';}
+ function set_content($text) {$this->myDOMNode->nodeValue=$text; return true;}
+}
+
+if (!defined('XPATH_NODESET'))
+{
+ define('XPATH_UNDEFINED',0);
+ define('XPATH_NODESET',1);
+ define('XPATH_BOOLEAN',2);
+ define('XPATH_NUMBER',3);
+ define('XPATH_STRING',4);
+ /*define('XPATH_POINT',5);
+ define('XPATH_RANGE',6);
+ define('XPATH_LOCATIONSET',7);
+ define('XPATH_USERS',8);
+ define('XPATH_XSLT_TREE',9);*/
+}
+
+class php4DOMNodelist
+{
+ private $myDOMNodelist;
+ public $nodeset;
+ public $type=XPATH_UNDEFINED;
+ public $value;
+ function php4DOMNodelist($aDOMNodelist,$aOwnerDocument)
+ {
+ if (!isset($aDOMNodelist)) return;
+ elseif (is_object($aDOMNodelist)||is_array($aDOMNodelist))
+ {
+ if ($aDOMNodelist->length>0)
+ {
+ $this->myDOMNodelist=$aDOMNodelist;
+ $this->nodeset=array();
+ $this->type=XPATH_NODESET;
+ $i=0;
+ while ($node=$this->myDOMNodelist->item($i++)) $this->nodeset[]=php4DOMNode::_newDOMElement($node,$aOwnerDocument);
+ }
+ }
+ elseif (is_int($aDOMNodelist)||is_float($aDOMNodelist))
+ {
+ $this->type=XPATH_NUMBER;
+ $this->value=$aDOMNodelist;
+ }
+ elseif (is_bool($aDOMNodelist))
+ {
+ $this->type=XPATH_BOOLEAN;
+ $this->value=$aDOMNodelist;
+ }
+ elseif (is_string($aDOMNodelist))
+ {
+ $this->type=XPATH_STRING;
+ $this->value=$aDOMNodelist;
+ }
+ }
+}
+
+class php4DOMXPath
+{
+ public $myDOMXPath;
+ private $myOwnerDocument;
+ function php4DOMXPath($dom_document)
+ {
+ //TODO: If $dom_document is a DomElement, make that default $contextnode and modify XPath. Ex: '/test'
+ $this->myOwnerDocument=$dom_document->myOwnerDocument;
+ $this->myDOMXPath=new DOMXPath($this->myOwnerDocument->myDOMNode);
+ }
+ function xpath_eval($eval_str,$contextnode=null)
+ {
+ if (method_exists($this->myDOMXPath,'evaluate')) $xp=isset($contextnode) ? $this->myDOMXPath->evaluate($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->evaluate($eval_str);
+ else $xp=isset($contextnode) ? $this->myDOMXPath->query($eval_str,$contextnode->myDOMNode) : $this->myDOMXPath->query($eval_str);
+ $xp=new php4DOMNodelist($xp,$this->myOwnerDocument);
+ return ($xp->type===XPATH_UNDEFINED) ? false : $xp;
+ }
+ function xpath_register_ns($prefix,$namespaceURI) {return $this->myDOMXPath->registerNamespace($prefix,$namespaceURI);}
+}
+
+if (extension_loaded('xsl'))
+{//See also: http://alexandre.alapetite.net/doc-alex/xslt-php4-php5/
+ function domxml_xslt_stylesheet($xslstring) {return new php4DomXsltStylesheet(DOMDocument::loadXML($xslstring));}
+ function domxml_xslt_stylesheet_doc($dom_document) {return new php4DomXsltStylesheet($dom_document);}
+ function domxml_xslt_stylesheet_file($xslfile) {return new php4DomXsltStylesheet(DOMDocument::load($xslfile));}
+ class php4DomXsltStylesheet
+ {
+ private $myxsltProcessor;
+ function php4DomXsltStylesheet($dom_document)
+ {
+ $this->myxsltProcessor=new xsltProcessor();
+ $this->myxsltProcessor->importStyleSheet($dom_document);
+ }
+ function process($dom_document,$xslt_parameters=array(),$param_is_xpath=false)
+ {
+ foreach ($xslt_parameters as $param=>$value) $this->myxsltProcessor->setParameter('',$param,$value);
+ $myphp4DOMDocument=new php4DOMDocument();
+ $myphp4DOMDocument->myDOMNode=$this->myxsltProcessor->transformToDoc($dom_document->myDOMNode);
+ return $myphp4DOMDocument;
+ }
+ function result_dump_file($dom_document,$filename)
+ {
+ $html=$dom_document->myDOMNode->saveHTML();
+ file_put_contents($filename,$html);
+ return $html;
+ }
+ function result_dump_mem($dom_document) {return $dom_document->myDOMNode->saveHTML();}
+ }
+}
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/catalan.php b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
index 0b139c7ca..3d67473d9 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/catalan.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/spanish.php
- * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'usant servidor',
- CAS_STR_AUTHENTICATION_WANTED
- => 'Autentificació CAS necessària!',
- CAS_STR_LOGOUT
- => 'Sortida de CAS necessària!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'Autentificació CAS fallida!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
-);
-
-?>
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usant servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Autentificació CAS necessària!',
+ CAS_STR_LOGOUT
+ => 'Sortida de CAS necessària!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ja hauria d\ haver estat redireccionat al servidor CAS. Feu click <a href="%s">aquí</a> per a continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Autentificació CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estàs autentificat.</p><p>Pots tornar a intentar-ho fent click <a href="%s">aquí</a>.</p><p>Si el problema persisteix hauría de contactar amb l\'<a href="mailto:%s">administrador d\'aquest llocc</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servei `<b>%s</b>\' no està disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/english.php b/plugins/CasAuthentication/extlib/CAS/languages/english.php
index d38d42c1f..c14345031 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/english.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/english.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/english.php
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'using server',
- CAS_STR_AUTHENTICATION_WANTED
- => 'CAS Authentication wanted!',
- CAS_STR_LOGOUT
- => 'CAS logout wanted!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'CAS Authentication failed!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'using server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentication wanted!',
+ CAS_STR_LOGOUT
+ => 'CAS logout wanted!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'You should already have been redirected to the CAS server. Click <a href="%s">here</a> to continue.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Authentication failed!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>You were not authenticated.</p><p>You may submit your request again by clicking <a href="%s">here</a>.</p><p>If the problem persists, you may contact <a href="mailto:%s">the administrator of this site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'The service `<b>%s</b>\' is not available (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/french.php b/plugins/CasAuthentication/extlib/CAS/languages/french.php
index 32d141685..b077ec02e 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/french.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/french.php
@@ -1,28 +1,28 @@
-<?php
-
-/**
- * @file languages/english.php
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'utilisant le serveur',
- CAS_STR_AUTHENTICATION_WANTED
- => 'Authentication CAS ncessaire&nbsp;!',
- CAS_STR_LOGOUT
- => 'Dconnexion demande&nbsp;!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Vous auriez du etre redirig(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'Authentification CAS infructueuse&nbsp;!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>Vous n\'avez pas t authentifi(e).</p><p>Vous pouvez soumettre votre requete nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le problme persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
-
-);
-
+<?php
+
+/**
+ * @file languages/english.php
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'utilisant le serveur',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'Authentication CAS n�cessaire&nbsp;!',
+ CAS_STR_LOGOUT
+ => 'D�connexion demand�e&nbsp;!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Vous auriez du etre redirig�(e) vers le serveur CAS. Cliquez <a href="%s">ici</a> pour continuer.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'Authentification CAS infructueuse&nbsp;!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Vous n\'avez pas �t� authentifi�(e).</p><p>Vous pouvez soumettre votre requete � nouveau en cliquant <a href="%s">ici</a>.</p><p>Si le probl�me persiste, vous pouvez contacter <a href="mailto:%s">l\'administrateur de ce site</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Le service `<b>%s</b>\' est indisponible (<b>%s</b>)'
+
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/german.php b/plugins/CasAuthentication/extlib/CAS/languages/german.php
index 55c3238fd..29daeb35d 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/german.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/german.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/german.php
- * @author Henrik Genssen <hg at mediafactory.de>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'via Server',
- CAS_STR_AUTHENTICATION_WANTED
- => 'CAS Authentifizierung erforderlich!',
- CAS_STR_LOGOUT
- => 'CAS Abmeldung!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
- CAS_STR_AUTHENTICATION_FAILED
- => 'CAS Anmeldung fehlgeschlagen!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/german.php
+ * @author Henrik Genssen <hg at mediafactory.de>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'via Server',
+ CAS_STR_AUTHENTICATION_WANTED
+ => 'CAS Authentifizierung erforderlich!',
+ CAS_STR_LOGOUT
+ => 'CAS Abmeldung!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'eigentlich h&auml;ten Sie zum CAS Server weitergeleitet werden sollen. Dr&uuml;cken Sie <a href="%s">hier</a> um fortzufahren.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => 'CAS Anmeldung fehlgeschlagen!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>Sie wurden nicht angemeldet.</p><p>Um es erneut zu versuchen klicken Sie <a href="%s">hier</a>.</p><p>Wenn das Problem bestehen bleibt, kontkatieren Sie den <a href="mailto:%s">Administrator</a> dieser Seite.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'Der Dienst `<b>%s</b>\' ist nicht verf&uuml;gbar (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/greek.php b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
index d41bf783b..fdff77e4e 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/greek.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/greek.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/greek.php
- * @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => ' ',
- CAS_STR_AUTHENTICATION_WANTED
- => ' CAS!',
- CAS_STR_LOGOUT
- => ' CAS!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => ' CAS. <a href="%s"></a> .',
- CAS_STR_AUTHENTICATION_FAILED
- => ' CAS !',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p> .</p><p> , <a href="%s"></a>.</p><p> , <a href="mailto:%s"></a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => ' `<b>%s</b>\' (<b>%s</b>).'
-);
-
+<?php
+
+/**
+ * @file languages/greek.php
+ * @author Vangelis Haniotakis <haniotak at ucnet.uoc.gr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => '��������������� � ������������',
+ CAS_STR_AUTHENTICATION_WANTED
+ => '���������� � ����������� CAS!',
+ CAS_STR_LOGOUT
+ => '���������� � ���������� ��� CAS!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => '�� ������ �� ������ �������������� ���� ����������� CAS. ����� ���� <a href="%s">���</a> ��� �� ����������.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => '� ����������� CAS �������!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>��� ���������������.</p><p>�������� �� ����������������, �������� ���� <a href="%s">���</a>.</p><p>��� �� �������� ���������, ����� �� ����� �� ��� <a href="mailto:%s">�����������</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => '� �������� `<b>%s</b>\' ��� ����� ��������� (<b>%s</b>).'
+);
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/japanese.php b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
index 333bb17b6..76ebe77bc 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/japanese.php
@@ -11,17 +11,17 @@ $this->_strings = array(
CAS_STR_USING_SERVER
=> 'using server',
CAS_STR_AUTHENTICATION_WANTED
- => 'CASˤǧڤԤޤ',
+ => 'CAS�ˤ��ǧ�ڤ�Ԥ��ޤ�',
CAS_STR_LOGOUT
- => 'CASȤޤ!',
+ => 'CAS����?�����Ȥ��ޤ�!',
CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'CASФ˹ԤɬפޤưŪžʤ <a href="%s"></a> 򥯥å³Ԥޤ',
+ => 'CAS�����Ф˹Ԥ�ɬ�פ�����ޤ�����ưŪ��ž������ʤ����� <a href="%s">������</a> �򥯥�å�����³�Ԥ��ޤ���',
CAS_STR_AUTHENTICATION_FAILED
- => 'CASˤǧڤ˼Ԥޤ',
+ => 'CAS�ˤ��ǧ�ڤ˼��Ԥ��ޤ���',
CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>ǧڤǤޤǤ.</p><p>⤦٥ꥯȤ<a href="%s"></a>򥯥å.</p><p>꤬褷ʤ <a href="mailto:%s">ΥȤδ</a>䤤碌Ƥ.</p>',
+ => '<p>ǧ�ڤǤ��ޤ���Ǥ���.</p><p>�⤦���٥ꥯ�����Ȥ������������<a href="%s">������</a>�򥯥�å�.</p><p>���꤬��褷�ʤ����� <a href="mailto:%s">���Υ����Ȥδ����</a>���䤤��碌�Ƥ�������.</p>',
CAS_STR_SERVICE_UNAVAILABLE
- => 'ӥ `<b>%s</b>\' ѤǤޤ (<b>%s</b>).'
+ => '�����ӥ� `<b>%s</b>\' �����ѤǤ��ޤ��� (<b>%s</b>).'
);
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/languages.php b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
index 001cfe445..2c6f8bb3b 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/languages.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/languages.php
@@ -1,24 +1,24 @@
-<?php
-
-/**
- * @file languages/languages.php
- * Internationalization constants
- * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-//@{
-/**
- * a phpCAS string index
- */
-define("CAS_STR_USING_SERVER", 1);
-define("CAS_STR_AUTHENTICATION_WANTED", 2);
-define("CAS_STR_LOGOUT", 3);
-define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
-define("CAS_STR_AUTHENTICATION_FAILED", 5);
-define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
-define("CAS_STR_SERVICE_UNAVAILABLE", 7);
-//@}
-
+<?php
+
+/**
+ * @file languages/languages.php
+ * Internationalization constants
+ * @author Pascal Aubry <pascal.aubry at univ-rennes1.fr>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+//@{
+/**
+ * a phpCAS string index
+ */
+define("CAS_STR_USING_SERVER", 1);
+define("CAS_STR_AUTHENTICATION_WANTED", 2);
+define("CAS_STR_LOGOUT", 3);
+define("CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED", 4);
+define("CAS_STR_AUTHENTICATION_FAILED", 5);
+define("CAS_STR_YOU_WERE_NOT_AUTHENTICATED", 6);
+define("CAS_STR_SERVICE_UNAVAILABLE", 7);
+//@}
+
?> \ No newline at end of file
diff --git a/plugins/CasAuthentication/extlib/CAS/languages/spanish.php b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
index 04067ca03..3a8ffc253 100644
--- a/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
+++ b/plugins/CasAuthentication/extlib/CAS/languages/spanish.php
@@ -1,27 +1,27 @@
-<?php
-
-/**
- * @file languages/spanish.php
- * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
- * @sa @link internalLang Internationalization @endlink
- * @ingroup internalLang
- */
-
-$this->_strings = array(
- CAS_STR_USING_SERVER
- => 'usando servidor',
- CAS_STR_AUTHENTICATION_WANTED
- => '¡Autentificación CAS necesaria!',
- CAS_STR_LOGOUT
- => '¡Salida CAS necesaria!',
- CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
- => 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
- CAS_STR_AUTHENTICATION_FAILED
- => '¡Autentificación CAS fallida!',
- CAS_STR_YOU_WERE_NOT_AUTHENTICATED
- => '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
- CAS_STR_SERVICE_UNAVAILABLE
- => 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
-);
-
-?>
+<?php
+
+/**
+ * @file languages/spanish.php
+ * @author Iván-Benjamín García Torà <ivaniclixx AT gmail DOT com>
+ * @sa @link internalLang Internationalization @endlink
+ * @ingroup internalLang
+ */
+
+$this->_strings = array(
+ CAS_STR_USING_SERVER
+ => 'usando servidor',
+ CAS_STR_AUTHENTICATION_WANTED
+ => '¡Autentificación CAS necesaria!',
+ CAS_STR_LOGOUT
+ => '¡Salida CAS necesaria!',
+ CAS_STR_SHOULD_HAVE_BEEN_REDIRECTED
+ => 'Ya debería haber sido redireccionado al servidor CAS. Haga click <a href="%s">aquí</a> para continuar.',
+ CAS_STR_AUTHENTICATION_FAILED
+ => '¡Autentificación CAS fallida!',
+ CAS_STR_YOU_WERE_NOT_AUTHENTICATED
+ => '<p>No estás autentificado.</p><p>Puedes volver a intentarlo haciendo click <a href="%s">aquí</a>.</p><p>Si el problema persiste debería contactar con el <a href="mailto:%s">administrador de este sitio</a>.</p>',
+ CAS_STR_SERVICE_UNAVAILABLE
+ => 'El servicio `<b>%s</b>\' no está disponible (<b>%s</b>).'
+);
+
+?>
diff --git a/plugins/Comet/CometPlugin.php b/plugins/Comet/CometPlugin.php
index 300d1e9a2..29cb3004b 100644
--- a/plugins/Comet/CometPlugin.php
+++ b/plugins/Comet/CometPlugin.php
@@ -68,7 +68,7 @@ class CometPlugin extends RealtimePlugin
$ours = array('jquery.comet.js', 'cometupdate.js');
foreach ($ours as $script) {
- $scripts[] = common_path('plugins/Comet/'.$script);
+ $scripts[] = 'plugins/Comet/'.$script;
}
return $scripts;
diff --git a/plugins/Facebook/FacebookPlugin.php b/plugins/Facebook/FacebookPlugin.php
index 65d4409b5..5dba73a5d 100644
--- a/plugins/Facebook/FacebookPlugin.php
+++ b/plugins/Facebook/FacebookPlugin.php
@@ -261,7 +261,7 @@ class FacebookPlugin extends Plugin
if ($this->reqFbScripts($action)) {
$apikey = common_config('facebook', 'apikey');
- $plugin_path = common_path('plugins/Facebook');
+ $plugin_path = 'plugins/Facebook';
$login_url = common_local_url('FBConnectAuth');
$logout_url = common_local_url('logout');
diff --git a/plugins/Facebook/facebookaction.php b/plugins/Facebook/facebookaction.php
index 8437a705a..f65b97c86 100644
--- a/plugins/Facebook/facebookaction.php
+++ b/plugins/Facebook/facebookaction.php
@@ -89,7 +89,7 @@ class FacebookAction extends Action
function showScripts()
{
- $this->script(common_path('plugins/Facebook/facebookapp.js'));
+ $this->script('plugins/Facebook/facebookapp.js');
}
/**
diff --git a/plugins/Imap/ImapPlugin.php b/plugins/Imap/ImapPlugin.php
index 89a775a16..d1e920b00 100644
--- a/plugins/Imap/ImapPlugin.php
+++ b/plugins/Imap/ImapPlugin.php
@@ -86,7 +86,7 @@ class ImapPlugin extends Plugin
}
}
- function onStartIoManagerClasses(&$classes)
+ function onStartQueueDaemonIoManagers(&$classes)
{
$classes[] = new ImapManager($this);
}
diff --git a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
index eb3a05117..483209676 100644
--- a/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
+++ b/plugins/LdapAuthentication/LdapAuthenticationPlugin.php
@@ -76,6 +76,32 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
return false;
}
}
+
+ function onEndShowPageNotice($action)
+ {
+ $name = $action->trimmed('action');
+ $instr = false;
+
+ switch ($name)
+ {
+ case 'register':
+ if($this->autoregistration) {
+ $instr = 'Have an LDAP account? Use your standard username and password.';
+ }
+ break;
+ case 'login':
+ $instr = 'Have an LDAP account? Use your standard username and password.';
+ break;
+ default:
+ return true;
+ }
+
+ if($instr) {
+ $output = common_markup_to_html($instr);
+ $action->raw($output);
+ }
+ return true;
+ }
//---interface implementation---//
@@ -96,8 +122,11 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
}
}
- function autoRegister($username)
+ function autoRegister($username, $nickname)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$entry = $this->ldap_get_user($username,$this->attributes);
if($entry){
$registration_data = array();
@@ -107,6 +136,7 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
if(isset($registration_data['email']) && !empty($registration_data['email'])){
$registration_data['email_confirmed']=true;
}
+ $registration_data['nickname'] = $nickname;
//set the database saved password to a random string.
$registration_data['password']=common_good_rand(16);
return User::register($registration_data);
@@ -153,6 +183,21 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
return false;
}
+
+ function suggestNicknameForUsername($username)
+ {
+ $entry = $this->ldap_get_user($username, $this->attributes);
+ if(!$entry){
+ //this really shouldn't happen
+ $nickname = $username;
+ }else{
+ $nickname = $entry->getValue($this->attributes['nickname'],'single');
+ if(!$nickname){
+ $nickname = $username;
+ }
+ }
+ return common_nicknamize($nickname);
+ }
//---utility functions---//
function ldap_get_config(){
@@ -179,8 +224,12 @@ class LdapAuthenticationPlugin extends AuthenticationPlugin
$ldap->setErrorHandling(PEAR_ERROR_RETURN);
$err=$ldap->bind();
if (Net_LDAP2::isError($err)) {
- common_log(LOG_WARNING, 'Could not connect to LDAP server: '.$err->getMessage());
- return false;
+ // 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;
diff --git a/plugins/LdapAuthentication/README b/plugins/LdapAuthentication/README
index 0460fb639..c188f2dbc 100644
--- a/plugins/LdapAuthentication/README
+++ b/plugins/LdapAuthentication/README
@@ -9,7 +9,10 @@ to the bottom of your config.php
Settings
========
-provider_name*: a unique name for this authentication provider.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
authoritative (false): Set to true if LDAP's responses are authoritative
(if authorative and LDAP fails, no other password checking will be done).
autoregistration (false): Set to true if users should be automatically created
diff --git a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
index 7f48ce5e1..042b2db8d 100644
--- a/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
+++ b/plugins/LdapAuthorization/LdapAuthorizationPlugin.php
@@ -131,13 +131,13 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
{
$ldap = $this->ldap_get_connection();
$link = $ldap->getLink();
- $r = ldap_compare($link, $groupDn, $this->uniqueMember_attribute, $userDn);
+ $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));
+ 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;
}
}
@@ -167,7 +167,12 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
$ldap->setErrorHandling(PEAR_ERROR_RETURN);
$err=$ldap->bind();
if (Net_LDAP2::isError($err)) {
- common_log(LOG_WARNING, 'Could not connect to LDAP server: '.$err->getMessage());
+ // 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;
@@ -185,6 +190,9 @@ class LdapAuthorizationPlugin extends AuthorizationPlugin
if($ldap==null) {
$ldap = $this->ldap_get_connection();
}
+ if(! $ldap) {
+ throw new Exception("Could not connect to LDAP");
+ }
$filter = Net_LDAP2_Filter::create($this->attributes['username'], 'equals', $username);
$options = array(
'attributes' => $attributes
diff --git a/plugins/LdapAuthorization/README b/plugins/LdapAuthorization/README
index 44239d8e0..3a6d8d25e 100644
--- a/plugins/LdapAuthorization/README
+++ b/plugins/LdapAuthorization/README
@@ -11,7 +11,10 @@ You *cannot* use this plugin without the LDAP Authentication plugin
Settings
========
-provider_name*: name of the LDAP authentication provider that this plugin works with.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
authoritative (false): should this plugin be authoritative for
authorization?
uniqueMember_attribute ('uniqueMember')*: the attribute of a group
diff --git a/plugins/MemcachedPlugin.php b/plugins/MemcachedPlugin.php
new file mode 100644
index 000000000..707e6db9a
--- /dev/null
+++ b/plugins/MemcachedPlugin.php
@@ -0,0 +1,223 @@
+<?php
+/**
+ * StatusNet - the distributed open-source microblogging tool
+ * Copyright (C) 2009, StatusNet, Inc.
+ *
+ * Plugin to implement cache interface for memcached
+ *
+ * PHP version 5
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Cache
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>, Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET')) {
+ // This check helps protect against security problems;
+ // your code file can't be executed directly from the web.
+ exit(1);
+}
+
+/**
+ * A plugin to use memcached for the cache interface
+ *
+ * This used to be encoded as config-variable options in the core code;
+ * it's now broken out to a separate plugin. The same interface can be
+ * implemented by other plugins.
+ *
+ * @category Cache
+ * @package StatusNet
+ * @author Evan Prodromou <evan@status.net>, Craig Andrews <candrews@integralblue.com>
+ * @copyright 2009 StatusNet, Inc.
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+class MemcachedPlugin extends Plugin
+{
+ static $cacheInitialized = false;
+
+ private $_conn = null;
+ public $servers = array('127.0.0.1;11211');
+
+ public $defaultExpiry = 86400; // 24h
+
+ /**
+ * Initialize the plugin
+ *
+ * Note that onStartCacheGet() may have been called before this!
+ *
+ * @return boolean flag value
+ */
+
+ function onInitializePlugin()
+ {
+ $this->_ensureConn();
+ self::$cacheInitialized = true;
+ return true;
+ }
+
+ /**
+ * Get a value associated with a key
+ *
+ * The value should have been set previously.
+ *
+ * @param string &$key in; Lookup key
+ * @param mixed &$value out; value associated with key
+ *
+ * @return boolean hook success
+ */
+
+ function onStartCacheGet(&$key, &$value)
+ {
+ $this->_ensureConn();
+ $value = $this->_conn->get($key);
+ Event::handle('EndCacheGet', array($key, &$value));
+ return false;
+ }
+
+ /**
+ * Associate a value with a key
+ *
+ * @param string &$key in; Key to use for lookups
+ * @param mixed &$value in; Value to associate
+ * @param integer &$flag in; Flag empty or Cache::COMPRESSED
+ * @param integer &$expiry in; Expiry (passed through to Memcache)
+ * @param boolean &$success out; Whether the set was successful
+ *
+ * @return boolean hook success
+ */
+
+ function onStartCacheSet(&$key, &$value, &$flag, &$expiry, &$success)
+ {
+ $this->_ensureConn();
+ if ($expiry === null) {
+ $expiry = $this->defaultExpiry;
+ }
+ $success = $this->_conn->set($key, $value, $expiry);
+ Event::handle('EndCacheSet', array($key, $value, $flag,
+ $expiry));
+ return false;
+ }
+
+ /**
+ * Atomically increment an existing numeric key value.
+ * Existing expiration time will not be changed.
+ *
+ * @param string &$key in; Key to use for lookups
+ * @param int &$step in; Amount to increment (default 1)
+ * @param mixed &$value out; Incremented value, or false if key not set.
+ *
+ * @return boolean hook success
+ */
+ function onStartCacheIncrement(&$key, &$step, &$value)
+ {
+ $this->_ensureConn();
+ $value = $this->_conn->increment($key, $step);
+ Event::handle('EndCacheIncrement', array($key, $step, $value));
+ return false;
+ }
+
+ /**
+ * Delete a value associated with a key
+ *
+ * @param string &$key in; Key to lookup
+ * @param boolean &$success out; whether it worked
+ *
+ * @return boolean hook success
+ */
+
+ function onStartCacheDelete(&$key, &$success)
+ {
+ $this->_ensureConn();
+ $success = $this->_conn->delete($key);
+ Event::handle('EndCacheDelete', array($key));
+ return false;
+ }
+
+ function onStartCacheReconnect(&$success)
+ {
+ // nothing to do
+ return true;
+ }
+
+ /**
+ * Ensure that a connection exists
+ *
+ * Checks the instance $_conn variable and connects
+ * if it is empty.
+ *
+ * @return void
+ */
+
+ private function _ensureConn()
+ {
+ if (empty($this->_conn)) {
+ $this->_conn = new Memcached(common_config('site', 'nickname'));
+
+ if (!count($this->_conn->getServerList())) {
+ if (is_array($this->servers)) {
+ $servers = $this->servers;
+ } else {
+ $servers = array($this->servers);
+ }
+ foreach ($servers as $server) {
+ if (strpos($server, ';') !== false) {
+ list($host, $port) = explode(';', $server);
+ } else {
+ $host = $server;
+ $port = 11211;
+ }
+
+ $this->_conn->addServer($host, $port);
+ }
+
+ // Compress items stored in the cache.
+
+ // Allows the cache to store objects larger than 1MB (if they
+ // compress to less than 1MB), and improves cache memory efficiency.
+
+ $this->_conn->setOption(Memcached::OPT_COMPRESSION, true);
+ }
+ }
+ }
+
+ /**
+ * Translate general flags to Memcached-specific flags
+ * @param int $flag
+ * @return int
+ */
+ protected function flag($flag)
+ {
+ //no flags are presently supported
+ return $flag;
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'Memcached',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Evan Prodromou, Craig Andrews',
+ 'homepage' => 'http://status.net/wiki/Plugin:Memcached',
+ 'rawdescription' =>
+ _m('Use <a href="http://memcached.org/">Memcached</a> to cache query results.'));
+ return true;
+ }
+}
+
diff --git a/plugins/Minify/MinifyPlugin.php b/plugins/Minify/MinifyPlugin.php
index fe1883ded..69def6064 100644
--- a/plugins/Minify/MinifyPlugin.php
+++ b/plugins/Minify/MinifyPlugin.php
@@ -86,7 +86,11 @@ class MinifyPlugin extends Plugin
$url = parse_url($src);
if( empty($url['scheme']) && empty($url['host']) && empty($url['query']) && empty($url['fragment']))
{
- $src = $this->minifyUrl($src);
+ if (strpos($src, 'plugins/') === 0 || strpos($src, 'local/') === 0) {
+ $src = $this->minifyUrl($src);
+ } else {
+ $src = $this->minifyUrl('js/'.$src);
+ }
}
}
diff --git a/plugins/OStatus/OStatusPlugin.php b/plugins/OStatus/OStatusPlugin.php
index ef28ab22e..b472ae242 100644
--- a/plugins/OStatus/OStatusPlugin.php
+++ b/plugins/OStatus/OStatusPlugin.php
@@ -415,12 +415,12 @@ class OStatusPlugin extends Plugin
}
function onEndShowStatusNetStyles($action) {
- $action->cssLink(common_path('plugins/OStatus/theme/base/css/ostatus.css'));
+ $action->cssLink('plugins/OStatus/theme/base/css/ostatus.css');
return true;
}
function onEndShowStatusNetScripts($action) {
- $action->script(common_path('plugins/OStatus/js/ostatus.js'));
+ $action->script('plugins/OStatus/js/ostatus.js');
return true;
}
diff --git a/plugins/OStatus/actions/ostatussub.php b/plugins/OStatus/actions/ostatussub.php
index 65dee2392..07081c2c6 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__);
@@ -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..eb80a5ad4 100644
--- a/plugins/OStatus/actions/userxrd.php
+++ b/plugins/OStatus/actions/userxrd.php
@@ -32,12 +32,15 @@ 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)) {
+ list($nick, $domain) = explode('@', substr(urldecode($this->uri), 5));
+ $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..80ba37bc1 100644
--- a/plugins/OStatus/classes/FeedSub.php
+++ b/plugins/OStatus/classes/FeedSub.php
@@ -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',
@@ -450,3 +450,4 @@ class FeedSub extends Memcached_DataObject
}
}
+
diff --git a/plugins/OStatus/classes/HubSub.php b/plugins/OStatus/classes/HubSub.php
index c420b3eef..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',
diff --git a/plugins/OStatus/classes/Magicsig.php b/plugins/OStatus/classes/Magicsig.php
index 5a46aeeb6..5705ecc11 100644
--- a/plugins/OStatus/classes/Magicsig.php
+++ b/plugins/OStatus/classes/Magicsig.php
@@ -40,8 +40,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 +71,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 +100,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 Crypt_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 Crypt_RSA();
+ $this->privateKey->loadKey($keypair['privatekey']);
+ $this->publicKey = new Crypt_RSA();
+ $this->publicKey->loadKey($keypair['publickey']);
+
$this->user_id = $user_id;
$this->insert();
}
@@ -117,14 +121,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 +133,6 @@ class Magicsig extends Memcached_DataObject
public static function fromString($text)
{
- PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
-
$magic_sig = new Magicsig();
// remove whitespace
@@ -144,35 +143,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 Crypt_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 +187,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 +214,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 6ae8e4fd5..73f5d2322 100644
--- a/plugins/OStatus/classes/Ostatus_profile.php
+++ b/plugins/OStatus/classes/Ostatus_profile.php
@@ -708,18 +708,122 @@ class Ostatus_profile extends Memcached_DataObject
* @return Ostatus_profile
* @throws FeedSubException
*/
- 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()) {
+ return null;
+ }
+
+ // 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);
+ }
+ }
+
+ 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;
+ }
+
+ 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);
@@ -1303,7 +1407,7 @@ class Ostatus_profile extends Memcached_DataObject
}
}
- // First, look it up
+ // Try looking it up
$oprofile = Ostatus_profile::staticGet('uri', 'acct:'.$addr);
@@ -1317,7 +1421,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?
@@ -1327,38 +1431,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);
+ $oprofile = self::ensureFeedURL($hints['feedurl'], $hints);
self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
return $oprofile;
} catch (Exception $e) {
@@ -1369,10 +1461,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::ensureProfile($hints['profileurl'], $hints);
self::cacheSet(sprintf('ostatus_profile:webfinger:%s', $addr), $oprofile->uri);
return $oprofile;
} catch (Exception $e) {
@@ -1384,7 +1476,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
@@ -1464,67 +1558,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 Bzout's identity.
+ *
+ * Say you have 693 and 609. The GCD is 21. Bzout'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 Bzout'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/lib/discovery.php b/plugins/OStatus/lib/discovery.php
index f8449b309..44fad62fb 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);
}
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..db13793dd
--- /dev/null
+++ b/plugins/OStatus/lib/discoveryhints.php
@@ -0,0 +1,182 @@
+<?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)
+ {
+ common_debug("starting tidy");
+
+ $body = self::_tidy($body);
+
+ common_debug("done with tidy");
+
+ set_include_path(get_include_path() . PATH_SEPARATOR . INSTALLDIR . '/plugins/OStatus/extlib/hkit/');
+ require_once('hkit.class.php');
+
+ $h = new hKit;
+
+ $hcards = $h->getByString('hcard', $body);
+
+ if (empty($hcards)) {
+ return array();
+ }
+
+ if (count($hcards) == 1) {
+ $hcard = $hcards[0];
+ } else {
+ foreach ($hcards as $try) {
+ if (array_key_exists('url', $try)) {
+ if (is_string($try['url']) && $try['url'] == $url) {
+ $hcard = $try;
+ break;
+ } else if (is_array($try['url'])) {
+ foreach ($try['url'] as $tryurl) {
+ if ($tryurl == $url) {
+ $hcard = $try;
+ break 2;
+ }
+ }
+ }
+ }
+ }
+ // last chance; grab the first one
+ if (empty($hcard)) {
+ $hcard = $hcards[0];
+ }
+ }
+
+ $hints = array();
+
+ 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;
+ }
+
+ private static function _tidy($body)
+ {
+ if (function_exists('tidy_parse_string')) {
+ common_debug("Tidying with extension");
+ $text = tidy_parse_string($body);
+ $text = tidy_clean_repair($text);
+ return $body;
+ } else if ($fullpath = self::_findProgram('tidy')) {
+ common_debug("Tidying with program $fullpath");
+ $tempfile = tempnam('/tmp', 'snht'); // statusnet hcard tidy
+ file_put_contents($tempfile, $source);
+ exec("$fullpath -utf8 -indent -asxhtml -numeric -bare -quiet $tempfile", $tidy);
+ unlink($tempfile);
+ return implode("\n", $tidy);
+ } else {
+ common_debug("Not tidying.");
+ return $body;
+ }
+ }
+
+ private static function _findProgram($name)
+ {
+ $path = $_ENV['PATH'];
+
+ $parts = explode(':', $path);
+
+ foreach ($parts as $part) {
+ $fullpath = $part . '/' . $name;
+ if (is_executable($fullpath)) {
+ return $fullpath;
+ }
+ }
+
+ return null;
+ }
+}
diff --git a/plugins/OStatus/lib/feeddiscovery.php b/plugins/OStatus/lib/feeddiscovery.php
index ff76b229e..7de80b335 100644
--- a/plugins/OStatus/lib/feeddiscovery.php
+++ b/plugins/OStatus/lib/feeddiscovery.php
@@ -117,7 +117,7 @@ class FeedDiscovery
return $this->discoverFromURL($target, false);
}
}
-
+
return $this->initFromResponse($response);
}
@@ -202,7 +202,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 +211,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..2f6c66dc9
--- /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->uri = 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');
+
+ // 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;
+ }
+} \ No newline at end of file
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/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/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/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php b/plugins/OpenExternalLinkTarget/OpenExternalLinkTargetPlugin.php
new file mode 100644
index 000000000..ebb0189e0
--- /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]").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/OpenIDPlugin.php b/plugins/OpenID/OpenIDPlugin.php
index 248afe3fa..6b35ec3e1 100644
--- a/plugins/OpenID/OpenIDPlugin.php
+++ b/plugins/OpenID/OpenIDPlugin.php
@@ -235,9 +235,14 @@ class OpenIDPlugin extends Plugin
switch ($name)
{
case 'register':
- $instr = '(Have an [OpenID](http://openid.net/)? ' .
- 'Try our [OpenID registration]'.
- '(%%action.openidlogin%%)!)';
+ if (common_logged_in()) {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ '[Add an OpenID to your account](%%action.openidsettings%%)!';
+ } else {
+ $instr = '(Have an [OpenID](http://openid.net/)? ' .
+ 'Try our [OpenID registration]'.
+ '(%%action.openidlogin%%)!)';
+ }
break;
case 'login':
$instr = '(Have an [OpenID](http://openid.net/)? ' .
diff --git a/plugins/OpenID/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/Orbited/OrbitedPlugin.php b/plugins/Orbited/OrbitedPlugin.php
index ba87b266a..8af71af74 100644
--- a/plugins/Orbited/OrbitedPlugin.php
+++ b/plugins/Orbited/OrbitedPlugin.php
@@ -77,9 +77,9 @@ class OrbitedPlugin extends RealtimePlugin
$root = 'http://'.$server.(($port == 80) ? '':':'.$port);
$scripts[] = $root.'/static/Orbited.js';
- $scripts[] = common_path('plugins/Orbited/orbitedextra.js');
+ $scripts[] = 'plugins/Orbited/orbitedextra.js';
$scripts[] = $root.'/static/protocols/stomp/stomp.js';
- $scripts[] = common_path('plugins/Orbited/orbitedupdater.js');
+ $scripts[] = 'plugins/Orbited/orbitedupdater.js';
return $scripts;
}
diff --git a/plugins/README-plugins b/plugins/README-plugins
new file mode 100644
index 000000000..cdce7eb18
--- /dev/null
+++ b/plugins/README-plugins
@@ -0,0 +1,21 @@
+Several example plugins are included in the plugins/ directory. You
+can enable a plugin with the following line in config.php:
+
+ addPlugin('Example', array('param1' => 'value1',
+ 'param2' => 'value2'));
+
+This will look for and load files named 'ExamplePlugin.php' or
+'Example/ExamplePlugin.php' either in the plugins/ directory (for
+plugins that ship with StatusNet) or in the local/ directory (for
+plugins you write yourself or that you get from somewhere else) or
+local/plugins/.
+
+Plugins are documented in their own directories.
+
+
+Additional information on using and developing plugins can be found
+on the StatusNet wiki:
+
+http://status.net/wiki/Plugins
+http://status.net/wiki/Plugin_development
+
diff --git a/plugins/Realtime/RealtimePlugin.php b/plugins/Realtime/RealtimePlugin.php
index 2b3cb35f1..b559d80c6 100644
--- a/plugins/Realtime/RealtimePlugin.php
+++ b/plugins/Realtime/RealtimePlugin.php
@@ -117,7 +117,7 @@ class RealtimePlugin extends Plugin
function onEndShowStatusNetStyles($action)
{
- $action->cssLink(common_path('plugins/Realtime/realtimeupdate.css'),
+ $action->cssLink('plugins/Realtime/realtimeupdate.css',
null, 'screen, projection, tv');
return true;
}
@@ -305,7 +305,7 @@ class RealtimePlugin extends Plugin
function _getScripts()
{
- return array(common_path('plugins/Realtime/realtimeupdate.js'));
+ return array('plugins/Realtime/realtimeupdate.js');
}
function _updateInitialize($timeline, $user_id)
diff --git a/plugins/Realtime/realtimeupdate.js b/plugins/Realtime/realtimeupdate.js
index 2e5851ae5..0f7a680d7 100644
--- a/plugins/Realtime/realtimeupdate.js
+++ b/plugins/Realtime/realtimeupdate.js
@@ -130,7 +130,7 @@ RealtimeUpdate = {
user = data['user'];
html = data['html'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
source = data['source'].replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&quot;/g,'"').replace(/&amp;/g,'&');
-
+console.log(data);
ni = "<li class=\"hentry notice\" id=\"notice-"+unique+"\">"+
"<div class=\"entry-title\">"+
"<span class=\"vcard author\">"+
diff --git a/plugins/Recaptcha/RecaptchaPlugin.php b/plugins/Recaptcha/RecaptchaPlugin.php
index 3665214f8..c585da43c 100644
--- a/plugins/Recaptcha/RecaptchaPlugin.php
+++ b/plugins/Recaptcha/RecaptchaPlugin.php
@@ -31,8 +31,6 @@ if (!defined('STATUSNET') && !defined('LACONICA')) {
exit(1);
}
-define('RECAPTCHA', '0.2');
-
require_once(INSTALLDIR.'/plugins/Recaptcha/recaptchalib.php');
class RecaptchaPlugin extends Plugin
@@ -88,4 +86,16 @@ class RecaptchaPlugin extends Plugin
return false;
}
}
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'Recaptcha',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Eric Helgeson',
+ 'homepage' => 'http://status.net/wiki/Plugin:Recaptcha',
+ 'rawdescription' =>
+ _m('Uses <a href="http://recaptcha.org/">Recaptcha</a> service to add a '.
+ 'captcha to the registration page.'));
+ return true;
+ }
}
diff --git a/plugins/ReverseUsernameAuthentication/README b/plugins/ReverseUsernameAuthentication/README
index e9160ed9b..57b53219e 100644
--- a/plugins/ReverseUsernameAuthentication/README
+++ b/plugins/ReverseUsernameAuthentication/README
@@ -8,7 +8,10 @@ add "addPlugin('reverseUsernameAuthentication', array('setting'=>'value', 'setti
Settings
========
-provider_name*: a unique name for this authentication provider.
+provider_name*: This is a identifier designated to the connection.
+ It's how StatusNet will refer to the authentication source.
+ For the most part, any name can be used, so long as each authentication source has a different identifier.
+ In most cases there will be only one authentication source used.
password_changeable*: must be set to false. This plugin does not support changing passwords.
authoritative (false): Set to true if this plugin's responses are authoritative (meaning if this fails, do check any other plugins or the internal password database).
autoregistration (false): Set to true if users should be automatically created when they attempt to login.
diff --git a/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php b/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
index d9d2137f8..dac5a1588 100644
--- a/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
+++ b/plugins/ReverseUsernameAuthentication/ReverseUsernameAuthenticationPlugin.php
@@ -47,10 +47,13 @@ class ReverseUsernameAuthenticationPlugin extends AuthenticationPlugin
return $username == strrev($password);
}
- function autoRegister($username)
+ function autoRegister($username, $nickname)
{
+ if(is_null($nickname)){
+ $nickname = $username;
+ }
$registration_data = array();
- $registration_data['nickname'] = $username ;
+ $registration_data['nickname'] = $nickname ;
return User::register($registration_data);
}
diff --git a/plugins/TabFocus/TabFocusPlugin.php b/plugins/TabFocus/TabFocusPlugin.php
new file mode 100644
index 000000000..bf89c478c
--- /dev/null
+++ b/plugins/TabFocus/TabFocusPlugin.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * StatusNet, the distributed open-source microblogging tool
+ *
+ * Plugin to enable Twitter-like "tab-space" pattern for a user to submit a notice
+ *
+ * PHP version 5
+ *
+ * LICENCE: This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @category Plugin
+ * @package StatusNet
+ * @author Craig Andrews <candrews@integralblue.com>
+ * @author Paul Irish <paul.irish@isobar.net>
+ * @copyright 2009 Craig Andrews http://candrews.integralblue.com
+ * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0
+ * @link http://status.net/
+ */
+
+if (!defined('STATUSNET') && !defined('LACONICA')) {
+ exit(1);
+}
+
+class TabFocusPlugin extends Plugin
+{
+ function __construct()
+ {
+ parent::__construct();
+ }
+
+ function onEndShowScripts($action)
+ {
+ $action->script('plugins/TabFocus/tabfocus.js');
+ }
+
+ function onPluginVersion(&$versions)
+ {
+ $versions[] = array('name' => 'TabFocus',
+ 'version' => STATUSNET_VERSION,
+ 'author' => 'Craig Andrews and Paul Irish',
+ 'homepage' => 'http://status.net/wiki/Plugin:TabFocus',
+ 'rawdescription' =>
+ _m('TabFocus changes the notice form behavior so that, while in the text area, pressing the tab key focuses the "Send" button, matching the behavor of Twitter.'));
+ return true;
+ }
+}
diff --git a/plugins/TabFocus/tabfocus.js b/plugins/TabFocus/tabfocus.js
new file mode 100644
index 000000000..e2c1c6521
--- /dev/null
+++ b/plugins/TabFocus/tabfocus.js
@@ -0,0 +1,7 @@
+jQuery(function($){
+ $('#notice_data-text').bind('keydown',function(e){
+ if (e.which==9) {
+ setTimeout(function(){ $('#notice_action-submit').focus(); },15);
+ }
+ });
+});
diff --git a/plugins/TwitterBridge/daemons/synctwitterfriends.php b/plugins/TwitterBridge/daemons/synctwitterfriends.php
index 671e3c7af..df7da0943 100755
--- a/plugins/TwitterBridge/daemons/synctwitterfriends.php
+++ b/plugins/TwitterBridge/daemons/synctwitterfriends.php
@@ -221,7 +221,7 @@ class SyncTwitterFriendsDaemon extends ParallelizingDaemon
// Twitter friend
if (!save_twitter_user($friend_id, $friend_name)) {
- common_log(LOG_WARNING, $this-name() .
+ common_log(LOG_WARNING, $this->name() .
" - Couldn't save $screen_name's friend, $friend_name.");
continue;
}
diff --git a/plugins/TwitterBridge/twitter.php b/plugins/TwitterBridge/twitter.php
index 508699939..2805b3ab5 100644
--- a/plugins/TwitterBridge/twitter.php
+++ b/plugins/TwitterBridge/twitter.php
@@ -252,8 +252,17 @@ function format_status($notice)
$statustxt = preg_replace('/^@/', ' @', $notice->content);
// Convert !groups to #hashes
+
+ // XXX: Make this an optional setting?
+
$statustxt = preg_replace('/(^|\s)!([A-Za-z0-9]{1,64})/', "\\1#\\2", $statustxt);
+ if (mb_strlen($statustxt) > 140) {
+ $noticeUrl = common_shorten_url($notice->uri);
+ $urlLen = mb_strlen($noticeUrl);
+ $statustxt = mb_substr($statustxt, 0, 140 - ($urlLen + 3)) . ' … ' . $noticeUrl;
+ }
+
return $statustxt;
}
diff --git a/scripts/fixup_utf8.php b/scripts/fixup_utf8.php
index 30befadfd..2af6f9cb0 100755
--- a/scripts/fixup_utf8.php
+++ b/scripts/fixup_utf8.php
@@ -249,7 +249,7 @@ class UTF8FixerUpper
$sql = 'SELECT id, fullname, location, description FROM user_group ' .
'WHERE LENGTH(fullname) != CHAR_LENGTH(fullname) '.
'OR LENGTH(location) != CHAR_LENGTH(location) '.
- 'OR LENGTH(description) != CHAR_LENGTH(description) ';
+ 'OR LENGTH(description) != CHAR_LENGTH(description) '.
'AND modified < "'.$this->max_date.'" '.
'ORDER BY modified DESC';
diff --git a/scripts/useremail.php b/scripts/useremail.php
index 6676a87c8..0a59d36f8 100755
--- a/scripts/useremail.php
+++ b/scripts/useremail.php
@@ -53,7 +53,17 @@ if (have_option('i', 'id')) {
if (!empty($user)) {
if (empty($user->email)) {
- print "No email registered for user '$user->nickname'\n";
+ # Check for unconfirmed emails
+ $unconfirmed_email = new Confirm_address();
+ $unconfirmed_email->user_id = $user->id;
+ $unconfirmed_email->address_type = 'email';
+ $unconfirmed_email->find(true);
+
+ if (empty($unconfirmed_email->address)) {
+ print "No email registered for user '$user->nickname'\n";
+ } else {
+ print "Unconfirmed Adress: $unconfirmed_email->address\n";
+ }
} else {
print "$user->email\n";
}
@@ -65,7 +75,18 @@ if (have_option('e', 'email')) {
$user->email = get_option_value('e', 'email');
$user->find(false);
if (!$user->fetch()) {
- print "No users with email $user->email\n";
+ # Check unconfirmed emails
+ $unconfirmed_email = new Confirm_address();
+ $unconfirmed_email->address = $user->email;
+ $unconfirmed_email->address_type = 'email';
+ $unconfirmed_email->find(true);
+
+ if (empty($unconfirmed_email->user_id)) {
+ print "No users with email $user->email\n";
+ } else {
+ $user=User::staticGet('id', $unconfirmed_email->user_id);
+ print "Unconfirmed Address: $user->id $user->nickname\n";
+ }
exit(0);
}
do {
diff --git a/theme/base/css/display.css b/theme/base/css/display.css
index 0246065a7..782d3dc71 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/
*/
diff --git a/theme/base/css/ie6.css b/theme/base/css/ie6.css
index edc49478f..6df5e01ce 100644
--- a/theme/base/css/ie6.css
+++ b/theme/base/css/ie6.css
@@ -12,11 +12,11 @@ margin:0 auto;
}
#content {
-width:69%;
+width:66%;
}
#aside_primary {
-padding:5%;
-width:29.5%;
+padding:1.8%;
+width:24%;
}
.entity_profile .entity_nickname,
.entity_profile .entity_location,
@@ -32,9 +32,9 @@ margin-bottom:123px;
width:20%;
}
.notice div.entry-content {
-width:50%;
+width:65%;
margin-left:30px;
}
.notice-options a {
width:16px;
-} \ No newline at end of file
+}
diff --git a/theme/default/css/display.css b/theme/default/css/display.css
index be341813a..d92a53965 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/
*/
diff --git a/theme/identica/css/display.css b/theme/identica/css/display.css
index db85408eb..59cb3c38a 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/
*/