diff options
189 files changed, 35965 insertions, 16981 deletions
@@ -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 330da039b..77091fad5 100644 --- a/classes/User.php +++ b/classes/User.php @@ -211,6 +211,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 "ఈ స్టేటస్‌నెట్ సైటుకి ప్రాధమిక అమరికలు." -#: 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) కింద లభ్యమయ్యే [స్టేటస్‌నెట్](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 Binary files differnew file mode 100644 index 000000000..d0bce1542 --- /dev/null +++ b/plugins/Autocomplete/jquery-autocomplete/indicator.gif 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('''=>'\'')),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 !', - CAS_STR_LOGOUT - => 'Dconnexion demande !', - 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 !', - 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 !',
+ CAS_STR_LOGOUT
+ => 'D�connexion demand�e !',
+ 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 !',
+ 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äten Sie zum CAS Server weitergeleitet werden sollen. Drü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ü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äten Sie zum CAS Server weitergeleitet werden sollen. Drü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ü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(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/&/g,'&'); source = data['source'].replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/&/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/ */ |